请考虑这种情况:
Gerrit
git pull
时,fetch
部分(remote-> local)正常但merge
部分(本地分支 - >工作目录)因为需要手动合并的Z文件而失败。 但是,(Y减Z)文件更改不会发生任何冲突。为什么没有把这些文件合并为没有冲突应该停止它? git status
中的修改/删除相关联。它们在遥控器上被修改/删除,而不是在本地。如果我进行提交,它们将包含在提交中,而我只想在提交中包含Z文件。所以我不能真正提交,因为如果我这样做,所有的Y文件都会显示并在代码审查时进入代码审查,这会使代码审查变得混乱。就像我在上面说的那样,我会通过创建一个全新的分支来解决这个争论但是我不能这样做,因为我不会在那个分支中拥有我的变更ID,我需要挂钩到同一个现有的Gerrit门票
主要的两个问题是:
Q1。如何/可以让git在git pull的合并阶段合并未冲突的文件,同时让冲突的文件手动解析?这样,一旦完成手动合并,您就可以使用远程的最新版本进行构建,以确保在进行任何本地提交之前都可以构建。在我看来,这是git的一个根本缺陷(除非我做错了,例如我的git pull
没有使用某些选项)
Q2。有没有办法使用与最初用于创建审核的提交/更改ID不同的现有Gerrit审核(修改)?到目前为止,我能够在内部以及在互联网上获得这个问题的唯一答案是否定的,但对我来说这似乎是另一个主要的缺陷。因为如上所述,Gerrit约束限制了您使用git的最强功能,即使本地分支(您没有该更改ID)很容易。
答案 0 :(得分:1)
要使用上游更改更新本地分支,请重新提交您的提交,不要合并。 git pull
有一个--rebase
选项供您使用(您可以更改.gitconfig
以使其成为默认选项)。合并创建了一个无用的合并提交,必须进行审核,这没有任何意义 - 您在#7中注意到了这一点。
Q1。这是一种误解。 Git将合并它可以的所有文件,但请求您帮助解决冲突。我不知道是什么让你得出这些文件没有被触及的结论。
Q2。您似乎正在混淆提交ID和更改ID。如果修改提交(即使您实际上没有对文件内容或提交消息进行更改),则提交ID会更改,而更改ID是提交消息页脚中的Gerrit特定标识符。 Gerrit使用它来连接具有不同ID(SHA-1)的提交以及Gerrit中的更改。如果由于某种原因,当您想要为更改上传新的补丁集时无法修改原始提交,您只需将Change-Id页脚添加到您想要推送的任何提交中。
答案 1 :(得分:1)
一旦推送更改分支it can be fetched并进行修改而不需要原始的本地提交。
因此,在FETCH_HEAD
分支上,您可以合并/重新绑定远程分支,修改它,并作为新的补丁集推送。这就对了。因此,所有提交在Gerrit上都有唯一的分支。我认为用新的changeId推动修改后的提交毫无意义。这意味着应放弃原来的。有了这种技术,代码可以与每个人共享并由每个人修改,而无需将代码提交给远程分支。