当有新的上游提交时重新启动 git 合并

Restart a git merge when there's a new upstream commit

我有两个分支:featuremaster。我通过以下方式进行了合并:

$ git checkout feature
$ git merge master -Xdiff-algorithm=patience

这产生了一些 Unmerged paths。我解决了其中的一些问题。

然后,一个新的提交被推送到 master。它将使剩余的合并冲突更小,所以我想将它拉入我当前的合并。

如何在不丢失当前分辨率的情况下执行此操作?

我第二次尝试 运行 git merge master,但可以理解的是它拒绝了消息:

$ git merge master
error: Merging is not possible because you have unmerged files.

编辑:也许rerere会有所帮助。

简短的回答——"you can't"——令人难以置信的不满意,但幸运的是也不是完全正确。

较长的答案很难看但可行:git add剩余的未合并文件无论如何,以便Git相信正确的合并结果是你现在有。然后提交合并并将其哈希 ID 保存在某处,例如,在分支或标记名称中。 (我倾向于为此使用轻量级标签。)然后重置合并:

git add ...
git commit
git tag keep
git reset --hard HEAD~1

现在重新开始。当遇到未合并的文件,想获取合并后的版本时,使用:

git show keep:path/to/merged > path/to/merged.previously

例如。如果结果 100% 正确,则使用它;如果 90% 正确,则使用正确的部件;等等

对每个文件重复。完成后,照常提交合并。准备好后删除保存哈希 ID 名称(例如,git tag -d keep)。

无论如何,这不是最好的用户界面,但它确实有效。这里最大的缺点是您无法轻松返回并查看您确实正确解析了哪些文件。处理这个问题的一种方法是在提交部分合并之前添加一个额外的文件,列出您认为正确合并的文件。您可以立即使用 git show keep:MERGED.LIST 或您命名此文件的任何名称来取回它。

(如果你能记住这些信息,当然你不需要额外的文件。)

(你必须解决未解决的文件的原因是 Git 不会让你提交,直到你这样做。 git stash 命令通过提交来工作,所以它不能做任何东西。)