2012-12-30 193 views
1

可能重複:
How to delete a ‘git commit’從庫中刪除歷史記錄提交

知道,這將改變歷史,我想刪除一些不小心從庫的歷史承諾。我希望所有其他提交都保留其存儲庫的狀態。因此,我想要刪除的提交更改將由提交後的提交來覆蓋。

我該如何在Git中做到這一點,我怎樣才能將其應用於Github上的存儲庫?

回答

5

如果我理解正確,「壓扁」就是你想要的。

-A-B-C-D-E-F-G-H 

考慮到上面的歷史,你應該在第一次提交之前選擇你想壓縮的提交。比方說,你想壁球F和E爲d和H爲G,所以在第一個是C.

git rebase -i C 

您將看到一個編輯器包含類似下面的文本文件提交:

pick D 
pick E 
pick F 
pick G 
pick H 

修改到這一點:

pick D 
squash E 
squash F 
pick G 
squash H 

你會被要求審查提交新提交的信息,

產生的歷史將是這樣的:

-A-B-C-D'-G' 

請注意你總是擠壓較新提交到舊的,而不是相反。因此,pick Gsquash H。把它看作是在你的歷史繼續之後修改一個提交。注意:爲了將它存入你的GitHub倉庫,你需要強制推入git push -f origin(假設origin是你的GitHub遠程)。

PPS:欲瞭解更多信息,請參閱man page of git-rebase

+0

那麼我的歷史將成爲'A-B-C-D-G'? – danijar

+0

它是'-A-B-C-D'-G',我編輯了我的答案。但是'D'= D + E + F'和'G'= G + H'。 – Koraktor

+0

後來的提交是否受到影響?例如,如果我從「A-B-C-D」開始,並將「C」壓縮到「B」中。結果是「A-B'-D」還是「A-B'-D'」? – danijar

相關問題