2013-04-16 210 views
0

我正在與一些其他人設法在幾個提交中包含幾個大型DDL文件的git repo。有沒有辦法讓我從以前的所有提交中刪除它們?不幸的是,它並不像針對特定的提交那樣容易,因爲它們遍佈全球。從Git Repo中刪除DLL

我會解決只保留最新的提交上主和刪除它的一切。

+0

你需要知道具體的提交和使用這個:http://stackoverflow.com/questions/1186535/how-to-modify-a-specified-commit – logoff

回答

3

http://git-scm.com/book/en/Git-Tools-Rewriting-History

核選擇:過濾器分支

還有,如果你需要重寫一些腳本化的方式提交更多數量的,你可以使用一個新的歷史改寫選項 - 例如,全局更改您的電子郵件地址或從每次提交中刪除文件。該命令是filter-branch,它可以重寫大量的歷史記錄,所以除非你的項目尚未公開,其他人還沒有從你將要重寫的提交中解脫出來,否則你可能不應該使用它。但是,它可能非常有用。你會學到一些常用的東西,這樣你就可以瞭解它能夠做的一些事情。

刪除從每一個文件提交

出現這種情況相當普遍。有人意外地提交了一個巨大的二進制文件與一個粗心的git add。,並且你想要在任何地方刪除它。也許你意外提交了一個包含密碼的文件,並且你想讓你的項目成爲開源代碼。過濾分支是您可能想用來清理整個歷史記錄的工具。要從整個歷史記錄中刪除名爲passwords.txt的文件,可以使用--tree-filter選項來過濾分支:

$ git filter-branch --tree-filter'rm -f passwords.txt' HEAD

重寫6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd(21/21)

REF「參/頭/主」被改寫

的--tree濾波器選項運行項目的每個結賬後的規定命令然後重新結果。在這種情況下,您從每個快照中刪除一個名爲passwords.txt的文件,無論它是否存在。如果你想刪除所有意外提交的編輯器備份文件,你可以運行類似git filter-branch --tree-filter「rm -f *〜」HEAD。

您將能夠觀看Git重寫樹和提交,然後在最後移動分支指針。在測試分支中執行此操作通常是一個好主意,然後在確定結果是您真正想要的結果後,硬重置您的主分支。要在所有分支上運行filter-branch,您可以將--all傳遞給命令。

當心這是一個功能強大但也很危險的工具,告訴你的同事不要推動任何提交以防止歷史混亂。

相關問題