【问题标题】:git pull merges no files if any of the deltas are conflicted (need manual merge)如果任何增量冲突,git pull 不合并任何文件(需要手动合并)
【发布时间】:2013-12-03 18:32:22
【问题描述】:

请考虑这种情况:

  1. 我修改了X个文件,推送到Gerrit
  2. Joe 更改了 Y 个文件,其中 Z 与我的更改集相交
  3. Joe 的代码审查获得批准并合并到远程分支中,我的代码审查阶段被搁置
  4. 因为 Joe 和我同时更改了 Z 个文件,并且他的更改在我之前获得批准,所以我必须将我的更改合并到 Joe 也更改的 Z 文件中
  5. 当我进入 Gerrit 时,我在同一个 git 分支中,我必须这样做,因为这是唯一具有我的更改 ID 的分支,这是 git 和 Gerrit 之间的唯一链接(修改我现有的 Gerrit 评论,修改必须在同一个提交中,否则我会创建一个全新的分支并使一切变得更容易,但我不能这样做,因为它没有我的更改 ID)
  6. 当我在同一个分支中执行git pull 时,fetch 部分(远程->本地)运行良好,但 merge 部分(本地分支->工作目录)由于需要 Z 文件而失败手动合并。 但是,有(Y 减去 Z)文件更改没有任何冲突。为什么 GIT 不合并这些文件,因为没有冲突应该阻止它?
  7. 我手动合并了 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)。

【问题讨论】:

    标签: git git-merge gerrit


    【解决方案1】:

    要使用上游更改更新您的本地分支,请重新设置您的提交,不要合并。 git pull 有一个您可以使用的 --rebase 选项(您可以更改您的 .gitconfig 以使其成为默认值)。合并会创建一个无用的合并提交,必须对其进行审查,这没有任何意义——你在 #7 中注意到了这一点。

    Q1。这是一种误解。 Git 将合并它可以合并的所有文件,但请您帮助解决冲突。我不知道是什么让你得出没有触及这些文件的结论。

    Q2。您似乎将提交 ID 和更改 ID 混为一谈。如果您修改提交(即使您实际上并未更改文件内容或提交消息),提交 ID 也会更改,而更改 ID 是提交消息页脚中特定于 Gerrit 的标识符。 Gerrit 使用它将具有不同 ID (SHA-1) 的提交与 Gerrit 中的更改联系起来。如果您在想要上传新补丁集以进行更改时由于某种原因无法修改原始提交,则只需将 Change-Id 页脚添加到您要推送的任何提交中即可。

    【讨论】:

      【解决方案2】:

      一旦更改被推送到审查分支it can be fetched 并在不需要原始本地提交的情况下进行修改。 因此,在FETCH_HEAD 分支上,您可以合并/变基远程分支、修改它并作为新补丁集推送。这就对了。所以所有提交在 Gerrit 上都有唯一的分支。而且我认为用新的changeId推动修改后的提交是没有意义的。这意味着应该放弃原来的那个。使用这种技术,代码可以与所有人共享并由所有人修改,而无需将代码提交到远程分支。

      【讨论】:

        猜你喜欢
        • 2011-07-01
        • 1970-01-01
        • 2017-03-26
        • 2018-08-04
        • 2020-07-25
        • 2017-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多