【发布时间】:2013-12-03 18:32:22
【问题描述】:
请考虑这种情况:
- 我修改了X个文件,推送到
Gerrit - Joe 更改了 Y 个文件,其中 Z 与我的更改集相交
- Joe 的代码审查获得批准并合并到远程分支中,我的代码审查阶段被搁置
- 因为 Joe 和我同时更改了 Z 个文件,并且他的更改在我之前获得批准,所以我必须将我的更改合并到 Joe 也更改的 Z 文件中
- 当我进入 Gerrit 时,我在同一个 git 分支中,我必须这样做,因为这是唯一具有我的更改 ID 的分支,这是 git 和 Gerrit 之间的唯一链接(修改我现有的 Gerrit 评论,修改必须在同一个提交中,否则我会创建一个全新的分支并使一切变得更容易,但我不能这样做,因为它没有我的更改 ID)
- 当我在同一个分支中执行
git pull时,fetch部分(远程->本地)运行良好,但merge部分(本地分支->工作目录)由于需要 Z 文件而失败手动合并。 但是,有(Y 减去 Z)文件更改没有任何冲突。为什么 GIT 不合并这些文件,因为没有冲突应该阻止它? - 我手动合并了 Z 文件,但现在分阶段的 git 更改集将它们与我无关的 Y 减 Z 更改混为一谈,并在
git status中将它们显示为已修改/删除。它们在远程而不是本地被修改/删除。如果我进行提交,它们将包含在提交中,而我只想将 Z 文件包含在我的提交中。所以我不能真正提交,因为如果我这样做了,所有的 Y 文件都会在不应该提交的时候显示并进入代码审查,从而使代码审查变得混乱。
就像我在上面 5. 中所说的那样,我将通过创建一个全新的分支来解决这个争用,但是我不能这样做,因为我不会在那个分支中拥有我需要挂钩到同一个现有 Gerrit 票的更改 ID .
主要的两个问题是:
Q1. 如何/如何让 git 在 git pull 的合并阶段合并不冲突的文件,同时让有冲突的文件手动解决?这样,一旦您完成了手动合并,您就可以使用来自远程的最新版本进行构建,以确保您可以在本地进行任何提交之前进行构建。在我看来,这是 git 的一个根本缺陷(除非我做错了什么,例如我的 git pull 没有使用某些选项)
Q2. 有没有办法使用与最初用于创建评论的提交/更改 ID 不同的提交/更改 ID 来推动现有的 Gerrit 评论(修改它)?到目前为止,我能够在内部和互联网上得到这个问题的唯一答案是“否”,但对我来说,这似乎是另一个重大缺陷。因为如上所述,Gerrit 约束限制了您使用 git 最强大的功能,即轻松创建本地分支(您没有该更改 ID)。
【问题讨论】: