1
知道,這將改變歷史,我想刪除一些不小心從庫的歷史承諾。我希望所有其他提交都保留其存儲庫的狀態。因此,我想要刪除的提交更改將由提交後的提交來覆蓋。
我該如何在Git中做到這一點,我怎樣才能將其應用於Github上的存儲庫?
知道,這將改變歷史,我想刪除一些不小心從庫的歷史承諾。我希望所有其他提交都保留其存儲庫的狀態。因此,我想要刪除的提交更改將由提交後的提交來覆蓋。
我該如何在Git中做到這一點,我怎樣才能將其應用於Github上的存儲庫?
如果我理解正確,「壓扁」就是你想要的。
-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 G
和squash H
。把它看作是在你的歷史繼續之後修改一個提交。注意:爲了將它存入你的GitHub倉庫,你需要強制推入git push -f origin
(假設origin
是你的GitHub遠程)。
PPS:欲瞭解更多信息,請參閱man page of git-rebase。
那麼我的歷史將成爲'A-B-C-D-G'? – danijar
它是'-A-B-C-D'-G',我編輯了我的答案。但是'D'= D + E + F'和'G'= G + H'。 – Koraktor
後來的提交是否受到影響?例如,如果我從「A-B-C-D」開始,並將「C」壓縮到「B」中。結果是「A-B'-D」還是「A-B'-D'」? – danijar