删除旧提交:`git rebase`导致合并冲突

时间:2011-11-01 16:47:02

标签: git git-rebase git-merge

不幸的是,我们不久前意外地检查了一个大型二进制文件,直到今天没有人注意到。现在我想删除该提交并保留剩余的历史记录。我知道改变推进历史的警告,但在这种情况下,我无法避免它。

我一直试图达到这个~1h但却未能得到它。我找到的最好的命令是

git rebase --interactive --preserve-merges $(EVIL_COMMIT)^

并在编辑中评论出第一次提交是邪恶的。

不幸的是git rebase在合并时停止并提示手动解决合并冲突。邪恶的提交只添加了我们的软件为测试目的计算的一些示例文件。因此,它们不应该与刚刚丢失的示例文件发生任何冲突。

  1. 我不明白合并冲突的起源。有人可以解释一下吗?
  2. 如何解决?
  3. 我在Google和SO搜索上花了很多时间。有些主题涵盖了一个类似的主题,但在今天的Git版本中只有syntax used is not available或者它对我不起作用(我之前只描述了一种方法,因为它是最简单的方法)。

2 个答案:

答案 0 :(得分:6)

我选择filter-branch

git filter-branch --prune-empty --index-filter '
  git rm --cached --ignore-unmatch path/to/file
' --all

答案 1 :(得分:0)

我的朋友启动了一个方便的脚本来清除git历史记录中的文件,请检查https://github.com/donquixote/gitpurge