背景
我目前正在解决启用 git rerere 的 merge 冲突。 git status
显示一条未 merge 的路径。当我查看文件时,没有 <<<<<<< HEAD
或 >>>>>>> <SHA>
识别冲突的标记,这告诉我 rerere 已经完成了它的工作并根据我过去的做法解决了冲突。
我想确认 rerere 的决议是正确的。
我正在处理的 merge 过程非常复杂,涉及对 Linux 内核做出贡献的多个远程。昨天我对几个 Remote 进行了测试 merge ,目的是识别冲突、通知维护人员,然后丢弃生成的(肯定损坏的)内核。在这样做的同时,我做了几个粗心的冲突解决方案只是为了移动到下一个 Remote ,并调用了 git rerere forget <pathspec>
在我完成后的所有冲突路径上,包括我现在正在处理的路径。由于我告诉 rerere 忘记这条路径,我不知道为什么它在这次运行中解决了任何问题,而且我担心它应用了我昨天所做的修复,而我并不关心结果是否正确。
问题
有什么办法可以看到应用了解决方案后又解决了哪些冲突?
我想避免重新开始 merge ,因为这是一个漫长的过程,我们还没有完全自动化。另外,因为我昨天试图告诉 rerere 忘记这条路,但它今天仍然应用了一个解决方案,我想如果我不找出原因,我最终会处于同样的位置 git rerere forget <pathspec>
先失败。
相关问题
Undo a git rerere resolution that was done in a rebase <-- 解决方案需要重新启动 merge
Are there any downsides to enabling git rerere? <-- 只讨论 git rerere forget <pathspec>
跟进注释/问题
我刚刚尝试输入 git rerere forget
没有 pathspec,我知道它已被弃用,但如果我理解正确,应该让 rerere 忘记所有决议。我重新运行 merge ,但它仍然对文件应用了分辨率。我还完全禁用了 rerere 并第三次运行 merge ,这样我就可以看到冲突,并且 rerere 确实应用了我昨天所做的三心二意的决议。为什么是forget
没有正确丢弃我不想重复使用的分辨率?
最佳答案
你可以切换到 un-rerere'd 的 merge 结果
git checkout -m path/to/file
然后用
重新应用它git rerere
关于遗忘的烦恼,你是在冲突还在的时候遗忘的吗?忘记适用于“
$ git checkout master^1 Warning: you are leaving 1 commit behind, not connected to any of your branches: 9e2db79 test3 HEAD is now at ca1fca7... Make a change to file (on master) $ git merge master^2 Auto-merging file.txt CONFLICT (content): Merge conflict in file.txt Resolved 'file.txt' using previous resolution. Automatic merge failed; fix conflicts and then commit the result. $ git rerere forget file.txt Updated preimage for 'file.txt' Forgot resolution for file.txt $ vi file.txt # old resolution's still in the worktree $ git checkout -m file.txt # now it's gone there too
关于git - 我如何审计 git rerere 的决议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37887739/