撤消在rebase中完成的git rerere解析

kev*_*nmm 24 git git-rebase git-rerere

好的,所以我真的很喜欢git rerere命令.虽然,我还没有真正使用它,除了让它自动神奇地记录我的冲突并为我解决它们.但是,我确实搞砸了我的冲突解决方案中的一个很大的rebase(使用最新版本重新定义了一个非常陈旧的功能分支).

feature -> a - b - c - d

release -> e - f - g - h

rebase/feature -> e - f - g - h - a' - b' - c' - d'
Run Code Online (Sandbox Code Playgroud)

所以,比方说b'有一个不正确的合并(感谢我!),我想重新录制它.我该怎么办?我已经看过在Rerere Your Boat中提到的git checkout --conflict选项,但是我不太清楚它是如何工作的,如果它适用于这里.也许我必须检查合并冲突状态并在我正确解决此冲突后运行git rerere?

通常情况下,我只会提交rebase分支的提示,但这是一个扔掉.我只是提前处理冲突,因此当我与该功能团队同步时,我们将所需的时间最小化.合理?

Col*_*ett 37

要简单地删除所有以前的rerere分辨率,请运行rm -rf .git/rr-cache以删除缓存.

对于特定的合并,您可以rerere通过重新执行合并并允许rerere在工作树中应用其记录的分辨率来告知忘记记录的分辨率.

你可以退房a',然后做一个git merge b回到那种情况(你可能会在你指定提交哈希值时检查分离头a',所以要注意你不在分支上).

然后使用git rerere forget FILE-WITH-BAD-MERGEwhere指定应该忘记记录的冲突解决方案的文件.

forget <pathspec>
重置rerere为当前冲突记录的冲突解决方案.

(来自git-rerere的Git文档.)

  • 您还可以执行`rm -rf .git/rr-cache`来完全清理rr缓存. (37认同)
  • ^^这有帮助,而'rerere forget`没有为我做 (5认同)
  • 原作者被`git checkout --conflict`搞糊涂了.但是,如果您处于rebase的中间并且不想重新开始,那么该选项就在正确的轨道上.有一个更熟悉的选项,`-m`.您可以执行`git checkout -m FILE-WITH-BAD-MERGE`来恢复文件中更熟悉的默认冲突标记.好像你没有首先应用rerere的分辨率. (5认同)
  • 它的工作方式有点令人困惑,因为您首先必须进行合并,并且将应用(坏的)记录的原像。然后你必须使用`git rerere忘记&lt;文件&gt;`删除记录的原像。然后你应该 `git reset --hard origin/&lt;branch&gt;` 再次从那里进行合并,只有这样你才能再次得到原始冲突并且可以更正解决方案。 (2认同)