2015-03-25 94 views
0

另外的路徑我有一個混帳歷史,看起來像這樣如何刪除混帳

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

,現在爲了清楚起見,我只是想完全擺脫了F-G-H路徑的問題。

我該如何做到這一點?


後期編輯1 - 試着讓自己更清楚,我並不需要在路徑上保持什麼,所以我想有什麼最終只是

A - B - C - D - E 

後編輯2 - 同樣,我也不假定E的右側,那裏可能會有更多的變化,從E開始,不想改變。

我不是很熟悉rebase,它可以這樣做嗎?

+0

只刪除那些提交的分支 – 2015-03-25 11:14:46

+0

@TimCastelijns這不會改變歷史。 – Agis 2015-03-25 12:11:33

回答

0

F G和H提交包含不在E提交中的更改。 E提交是一個空的提交(除非有衝突),只是在這裏作爲合併提交,它有兩個父母。

您可以使用rebase命令使您的歷史線性化,但是您的F G和H提交仍會再次出現。

+0

好吧,如果你正在重新設計,你可以把它們壓到E中,你不需要保留F,G,H。 – filmor 2015-03-25 12:49:41

+0

所以是的,我想我想要做的事情看起來有點像從A到E在上面的道路上,並將其壓縮成一個變更集,這是你的建議? – parmentelat 2015-03-25 20:13:02

0

如果您想保留來自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呃那裏,但變化仍在歷史中。