2015-09-25 51 views
0

以下情況:我有一個提交很多提交的git倉庫,並且我想刪除一個文件,這個文件在一個提交中被更改並最終在提交中被刪除。所以現在我想刪除從我的回購完全提交,因此做的:完全刪除git commit的所有痕跡

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch UNWANTED_FILE' --prune-empty --tag-name-filter cat -- --all git push -f origin master

這偉大的工作,我的歷史被改寫(多次提交被重寫但是:

git log --all -- UNWANTED_FILE

我仍然得到兩個條目出現,即提交無非是刪除文件並添加文件完成。

Alll的其他提交也完成了其他的事情都完全沒了。我怎樣才能刪除這些提交的最後痕跡?

回答

1

刪除提交的規範指南是here。它實質上提供了兩條路線,git-filter-branchbfg

但是,如果你真的是完全刪除,你缺少的步驟9在這個過程中,即:

git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin 
git reflog expire --expire=now --all 
git gc --prune=now 

這將實際刪除未使用的引用。請注意,如果這些敏感數據不應該是已提交的,或者它們只是巨大的(因此您不希望git pull再次將其拉下),則需要確保將它們從以下位置刪除:

  • 上游回購(以及任何其他上游回購)
  • 所有你的合作者的回購(所以他們不把它們放回原) - 這是通常更容易讓他們刪除其回購和重新克隆。

還要注意有關讓合作者重定位而不是合併的評論。