2017-08-07 35 views
2

我一直在研究一個即將與其他開發人員共享的Git項目。我的項目中有一部分信息是我不允許分享的。如何在Git中刪除項目的提交歷史記錄的一部分?

如果我的項目歷史記錄看起來像A→B→C→D→E→F,並且提交C和D中包含的信息是私有的,是否可以修改我的項目歷史記錄,看起來像A - > B - > E' - > F'(其中E'和F'是沒有保密信息的E和F)在共享之前?

我的理解是,如果我在F和B之間執行手動合併來創建F',那麼最終提交將是我想要的,但它不會保留項目歷史記錄。我認爲它會看起來像A - > B - > F'而不是A - > B - > E' - > F'。

+0

可能的重複[刪除敏感文件及其從Git歷史提交](https://stackoverflow.com/questions/872565/remove-sensitive-files-and-their-commits-from-git-history) – phd

回答

1

我相信你正在尋找的是一個rebase。

如果提交C和D是自包含的,即如果提交E和F不需要提交E和F,則應該沒問題。

適當的語法是:

$ git rebase --onto B D F 

其中B,d和F是任一散列或這些提交的參考文獻。

如果這些提交已經被推送到公共存儲庫,請務必小心,因爲已提交的提交的重寫歷史記錄通常是危險的並且是不鼓勵的。

0

有完成此操作的簡單和複雜的方法。這裏有一個非常簡單的方法,它可以讓你輕鬆地用grep比較麻煩的片段來驗證他們的缺席。

創建一個新的回購分享。 (您可以在其中存儲歷史記錄F'快照並完成,但您希望保留一些歷史記錄。)

在舊回購中使用git format-patch來存儲A,B,E',F'的差異/ tmp目錄。

使用git am將這些差異應用於新回購。發佈它。

0

有一個強大的工具,允許您刪除敏感信息,不管提交什麼提交它:BFG,The Big Repo Cleaner

BFG將允許您選擇性刪除您的回購歷史記錄中的敏感信息。例如,您可以使用它刪除錯誤地添加到存儲庫的文件。它還將允許從存儲庫中的文件歷史記錄中刪除特定的字符串。

BFG優於其他方法的優勢在於它在不影響不擔心的提交的情況下擦除歷史記錄。但是,它會更改存儲庫中已提交的某些提交的提交id。詳情請參閱其常見問題

相關問題