当挑选与之前解决的补丁具有相似分辨率的提交时,我有时会看到 git 说它试图重新应用我之前所做的事情。我相信这是 git 的
rerere
组件。
$ git cherry-pick ...
error: could not apply a123f6c424... [commit message]
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
Resolved 'path/to/file.c' using previous resolution.
问题是我不相信我之前的决定。 我怎样才能看到“之前的决议”做了什么?即只是冲突区域的差异。
我知道我可以使用以下命令完全重新进行合并。不过,我不想完全扔掉之前的工作,只是回顾和验证它。
git rerere forget path/to/file.c
git checkout -m path/to/file.c
# Resolve. e.g., git mergetool
以下问题类似,但适用于合并提交,而不是一般冲突或未提交的更改。
我最近遇到了同样的问题,虽然我是重新调整而不是挑选,但我认为应该没有区别。这是一个应该有效的流程:
首先,中止发生冲突的操作:
git cherry-pick --abort
然后,在禁用 rerere 功能的情况下重复该操作:
git -c rerere.enabled=false cherry-pick ...
观察冲突。
手动应用记录的分辨率:
git rerere
这有点乏味,但我认为它达到了你想要的。我很高兴是否有一种方法可以显示合并尝试(有冲突)与像
git show --diff-merges=remerge
这样的决议的差异,但我不确定是否有一种简单的方法可以实现这一点。