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

时间:2013-08-28 23:36:59

标签: git git-rebase git-rerere

好的,所以我非常喜欢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 Boat中提到的git checkout --conflict选项,但我不清楚它是如何工作的,如果它适用于此处。也许我必须检查合并冲突状态并在我正确解决此冲突后运行git rerere?

通常情况下,我只会提交rebase分支的提示,但它只是扔掉了。我只是提前处理冲突,因此当我与该功能团队同步时,我们将所需的时间最小化。有意义吗?

1 个答案:

答案 0 :(得分:33)

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

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

您可以查看a'然后执行git merge b以重新回到那种情况(因为您指定了{{1}的提交哈希值,您可能会检查分离的头部所以要注意你不在分支上。)

然后使用a'在哪里指定应该忘记记录的冲突解决方案的文件。

  

git rerere forget FILE-WITH-BAD-MERGE
  重置rerere为当前冲突记录的冲突解决方案。

(来自the Git documentation for git-rerere。)