2011-11-01 126 views
5

不幸的是我們在前段時間無意中檢查了一個大的二進制文件,直到今天沒有人注意到。現在我想放棄提交,並保留原有的歷史記錄。我知道更改推送歷史的注意事項,但在這種情況下,我無法避免它。刪除舊的提交:`git rebase`導致合併衝突

我一直在試圖達到1小時,但未能得到它。我發現的最佳命令是

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

並在編輯註釋掉第一個提交是邪惡的。

不幸的是git rebase停止合併並提示手動解決合併衝突。邪惡的提交只會增加一些我們的軟件爲測試目的計算的示例文件。因此,它們不應該與僅僅缺少示例文件發生衝突。

  1. 我不明白合併衝突來自哪裏。有人可以解釋嗎?
  2. 如何解決?

我在Google和SO搜索上花了相當多的時間。有些主題涵蓋了類似的主題,但是在今天的Git版本中有syntax used is not available,或者它不適用於我(我只描述了上面的一種方法,因爲它是最簡單的方法)。

+0

可能重複歷史在Git倉庫?](http://stackoverflow.com/questions/2100907/how-to-remove-delete-a-large-file-from-commit-history-in-git-repository) – 2014-04-04 00:51:37

回答

6

我會跟filter-branch去:

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

這隻會刪除來自所有修訂版的文件'path/to/file',對吧?據我瞭解,它不會刪除在刪除二進制文件後會留空的提交(實際上有4個)。 –

+2

將「--prune-empty」添加到過濾器分支命令中。 –

+1

我認爲你的意思是'HEAD'而不是'$(EVIL_COMMIT)^'在這個答案中 - 否則它只會過濾提交到引入大文件之前的提交。 –