我该如何审核Git rerere的决策?

8

背景

我正在使用启用了git rerere的方式解决合并冲突。 git status 显示有一个未合并的路径。当我查看文件时,没有标出冲突的 <<<<<<< HEAD 或者 >>>>>>> <SHA> 标记,这告诉我rerere已经根据我过去的做法解决了冲突。

我想确认rerere的解决方案是正确的。

我正在处理一个非常复杂的合并过程,涉及多个远程参与到Linux内核中。昨天我进行了几次远程测试合并,目的是识别冲突,通知维护人员,然后丢弃结果(肯定是错误的)内核。在这样做的过程中,我进行了几次粗心的冲突解决方案,只是为了转移到下一个远程分支,并在完成后调用了git rerere forget <pathspec> 命令来清除所有冲突的路径,包括我现在处理的路径。因为我告诉rerere忘记这个路径,所以我不知道它在此次运行中解决了什么问题,我担心它在昨天我对结果不关心时应用了我做的修复。

问题

有没有办法在rerere已经应用解决方案后查看rerere解决的冲突?

我想避免重新开始合并,因为这是一个尚未完全自动化的漫长过程。此外,由于昨天我试图告诉rerere忘记这个路径,但它今天仍然应用了一个解决方案,所以如果我不知道 git rerere forget <pathspec>失败的原因,我认为我最终将处于同样的位置。

相关问题
撤销在rebase中完成的git rerere解析 <-- 解决方案需要重新开始合并
启用git rerere是否有任何缺点? <-- 仅讨论git rerere forget <pathspec>

跟进说明/问题
我刚刚尝试键入没有 pathspec 的 git rerere forget ,我知道这已经被弃用,但如果我理解正确,它应该使rerere忘记所有的解决方案。我重新运行了合并,它仍然应用解决方案到文件上。我还完全禁用了rerere,并第三次运行了合并,以便我可以看到冲突,rerere确实正在应用我昨天做出的半心半意的决策。为什么forget没有正确丢弃我不想重用的解决方案?

1个回答

9

您可以使用以下方法切换为未重复合并的合并结果:

git checkout -m path/to/file

然后使用

重新应用它。

git rerere

关于“忘记问题”,您在冲突仍处于活动状态时是否执行了“忘记”操作? “忘记”适用于“<pathspec>中的当前冲突”。

$ 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

你今天是我的英雄。 - skrrgwasme

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接