48

好的,所以我真的很喜欢这个git rerere命令,虽然除了让它自动神奇地记录我的冲突并为我解决它们之外,我并没有真正使用过它。但是,在相当大的变基(使用最新版本变基一个非常陈旧的功能分支)期间,我确实搞砸了我的一个冲突解决方案。

feature -> a - b - c - d

release -> e - f - g - h

rebase/feature -> e - f - g - h .
                                 ` a' - b' - c' - d'

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

通常,我只会提交 rebase 分支的尖端,但它是一个扔掉。我只是想提前处理冲突,这样当我与那个功能团队同步时,我们可以最大限度地减少花费的时间。说得通?

4

1 回答 1

69

要简单地删除所有以前的rerere解决方案,请运行rm -rf .git/rr-cache以删除缓存。

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

您可以签出a'然后执行 agit merge b以回到那种情况(由于您指定了 的提交哈希,您可能会在签出一个分离的头a',所以请注意您不在分支上)。

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

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

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

于 2014-02-07T18:43:50.123 回答