我如何审核 git rerere 的决议?
How can I audit git rerere's resolutions?
背景
我目前正在解决启用 git rerere 的合并冲突。 git status
显示了一个未合并的路径。当我查看文件时,没有 <<<<<<< HEAD
或 >>>>>>> <SHA>
标识冲突的标记,这告诉我 rerere 已经完成它的工作并根据我过去的做法解决了冲突。
我想确认 rerere 的决议是正确的。
我正在处理的合并过程非常复杂,涉及到 Linux 内核的多个遥控器。昨天我对几个遥控器进行了测试合并,目的是识别冲突、通知维护人员,然后丢弃生成的(肯定损坏的)内核。在这样做的同时,我做了几个粗心的冲突解决方案,只是为了移动到下一个远程,并在我完成后在所有冲突路径上调用 git rerere forget <pathspec>
,包括我现在正在处理的路径。由于我告诉 rerere 忘记这条路径,我不知道为什么它解决了这个 运行 上的任何问题,我担心它应用了我昨天所做的修复,而我不在乎结果是正确。
问题
有什么方法可以查看在应用了解决方案后又解决了哪些冲突?
我想避免重新启动合并,因为这是一个漫长的过程,我们还没有完全自动化。另外,因为我昨天试图告诉 rerere 忘记这条路,但它今天仍然应用了一个解决方案,我想如果我不找出为什么 git rerere forget <pathspec>
首先失败,我会以同样的方式结束。
相关问题
Undo a git rerere resolution that was done in a rebase <-- 解决方案需要重新启动合并
Are there any downsides to enabling git rerere? <-- 只讨论 git rerere forget <pathspec>
跟进Note/Question
我只是尝试在没有路径规范的情况下输入 git rerere forget
,我知道它已被弃用,但如果我理解正确,应该让 rerere 忘记所有决议。我重新运行 合并,它仍然对文件应用了分辨率。我还完全禁用了 rerere 和 运行 第三次合并,所以我可以看到冲突,并且 rerere 确实应用了我昨天所做的三心二意的决议。为什么 forget
没有正确丢弃我不想重复使用的分辨率?
您可以使用
切换到 un-rerere'd 合并结果
git checkout -m path/to/file
然后用
重新应用它
git rerere
关于遗忘的烦恼,你是在冲突还在的时候遗忘的吗?忘记适用于 "the current conflict in <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
背景
我目前正在解决启用 git rerere 的合并冲突。 git status
显示了一个未合并的路径。当我查看文件时,没有 <<<<<<< HEAD
或 >>>>>>> <SHA>
标识冲突的标记,这告诉我 rerere 已经完成它的工作并根据我过去的做法解决了冲突。
我想确认 rerere 的决议是正确的。
我正在处理的合并过程非常复杂,涉及到 Linux 内核的多个遥控器。昨天我对几个遥控器进行了测试合并,目的是识别冲突、通知维护人员,然后丢弃生成的(肯定损坏的)内核。在这样做的同时,我做了几个粗心的冲突解决方案,只是为了移动到下一个远程,并在我完成后在所有冲突路径上调用 git rerere forget <pathspec>
,包括我现在正在处理的路径。由于我告诉 rerere 忘记这条路径,我不知道为什么它解决了这个 运行 上的任何问题,我担心它应用了我昨天所做的修复,而我不在乎结果是正确。
问题
有什么方法可以查看在应用了解决方案后又解决了哪些冲突?
我想避免重新启动合并,因为这是一个漫长的过程,我们还没有完全自动化。另外,因为我昨天试图告诉 rerere 忘记这条路,但它今天仍然应用了一个解决方案,我想如果我不找出为什么 git rerere forget <pathspec>
首先失败,我会以同样的方式结束。
相关问题
Undo a git rerere resolution that was done in a rebase <-- 解决方案需要重新启动合并
Are there any downsides to enabling git rerere? <-- 只讨论 git rerere forget <pathspec>
跟进Note/Question
我只是尝试在没有路径规范的情况下输入 git rerere forget
,我知道它已被弃用,但如果我理解正确,应该让 rerere 忘记所有决议。我重新运行 合并,它仍然对文件应用了分辨率。我还完全禁用了 rerere 和 运行 第三次合并,所以我可以看到冲突,并且 rerere 确实应用了我昨天所做的三心二意的决议。为什么 forget
没有正确丢弃我不想重复使用的分辨率?
您可以使用
切换到 un-rerere'd 合并结果git checkout -m path/to/file
然后用
重新应用它git rerere
关于遗忘的烦恼,你是在冲突还在的时候遗忘的吗?忘记适用于 "the current conflict in <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