另外的路徑我有一個混帳歷史,看起來像這樣如何刪除混帳
F - G - H
/ \
A - B - C - D - E
,現在爲了清楚起見,我只是想完全擺脫了F-G-H路徑的問題。
我該如何做到這一點?
後期編輯1 - 試着讓自己更清楚,我並不需要在路徑上保持什麼,所以我想有什麼最終只是
A - B - C - D - E
後編輯2 - 同樣,我也不假定E的右側,那裏可能會有更多的變化,從E
開始,不想改變。
我不是很熟悉rebase
,它可以這樣做嗎?
另外的路徑我有一個混帳歷史,看起來像這樣如何刪除混帳
F - G - H
/ \
A - B - C - D - E
,現在爲了清楚起見,我只是想完全擺脫了F-G-H路徑的問題。
我該如何做到這一點?
後期編輯1 - 試着讓自己更清楚,我並不需要在路徑上保持什麼,所以我想有什麼最終只是
A - B - C - D - E
後編輯2 - 同樣,我也不假定E的右側,那裏可能會有更多的變化,從E
開始,不想改變。
我不是很熟悉rebase
,它可以這樣做嗎?
F G和H提交包含不在E提交中的更改。 E提交是一個空的提交(除非有衝突),只是在這裏作爲合併提交,它有兩個父母。
您可以使用rebase命令使您的歷史線性化,但是您的F G和H提交仍會再次出現。
好吧,如果你正在重新設計,你可以把它們壓到E中,你不需要保留F,G,H。 – filmor 2015-03-25 12:49:41
所以是的,我想我想要做的事情看起來有點像從A到E在上面的道路上,並將其壓縮成一個變更集,這是你的建議? – parmentelat 2015-03-25 20:13:02
如果您想保留來自F,G和H的更改,但不希望在歷史記錄中進行實際合併,那麼您想要進行壓縮合並,這不是實際合併,而是創建一個來自合併分支的所有更改的新提交被壓扁。
你需要先撤消實際的合併(E):
git reset --keep HEAD^ #assuming you're on E
然後,你可以這樣做:
git merge --squash H
git commit
而且你的歷史是這樣的:
F - G - H
/
A - B - C - D - E
但是E確實從F,G和H發生了變化。在此之後,您可以刪除指向H的分支,並且它看起來像分支是nev呃那裏,但變化仍在歷史中。
只刪除那些提交的分支 – 2015-03-25 11:14:46
@TimCastelijns這不會改變歷史。 – Agis 2015-03-25 12:11:33