如何通过将所有文件标记为 "resolved" 来继续 git 合并有人推送的地方?

How to continue a git merge where someone pushed by marking all files as "resolved"?

我的朋友

我拉了树枝。我可以在

等文件中看到差异行
<<<<<<< HEAD
text1
=======
text2
>>>>>>> origin/master

如何模拟我朋友停止的合并?

我同意解决方案,其中包括一些 pull/checkouts 到其他地方,一些 copy/paste 命令,其他 commands/tools 检测差异部分等

我不会尝试从你朋友的工作中恢复,而是从头开始重新合并。

查找您朋友的合并提交并使用 git log --graphgit log --format=fuller 确定其父提交:

例如,我有 39184c481a,它是 2aa69455a31d3c2f45f6 的合并。

git log --format=fuller 39184c481a

commit 39184c481a
Merge: 1d3c2f45f6 2aa69455a3
Author: ...

然后检出原始的第一个父级并将另一个父级合并到其中

git checkout 1d3c2f45f6
git merge 2aa69455a3

现在我处于提交完成时的相同状态。所以从这里你应该能够重做冲突解决。

您可能想给自己一个分支以便以后能够找到这项工作:

git checkout -b dev.fixing-the-merge

并最终将其合并回您的主分支,或者如果您的团队愿意让您这样做,则可能用 git push --force 重写历史记录。

在这种情况下,您可以git grep '<<<<<<<'通过代码找到那些仍然需要合并的地方。如果您更正了代码,您可以自己提交它以表明哪个解决方案是由哪个作者完成的,或者您可以修改现有的提交以使每个提交都可以构建和纠正。但是,在这种情况下,提交的作者信息信息量较少。

您还必须考虑 git 组织工具。在 github 上,通常禁止向分支提交。因此,强制推送更新的提交通常是不可能的。在这种情况下,您必须创建自己的提交。在 Gerrit 上修改提交是设计的一部分,它更新了打开的更改。

我合并了这个 and this

  • 将分支拉入目录(BRANCH_DIR)

  • 在另一个目录中模拟相同的合并(MERGE_DIR)

  • 在BRANCH_DIR、运行下面的命令中对需要检查的文件进行排序

    git grep '<<<<<<<' |cut -d':' -f1 |sort -u

  • 在MERGE_DIR中,对于上一步中的每个文件,运行

    git mergetool 文件名

  • 解决MERGE_DIR中文件的冲突后,copy/paste将BRANCH_DIR

  • 中的文件内容
  • 创建新的提交或修改之前的提交(这取决于您的用例)