2013-09-27 63 views
7

假設你有這樣的:怎樣的Git合併--squash讓GitHub的「網絡」圖顯示了合併

 master: o--o--o 
development:  `o--o--o 

我要合併更改回爲一個承諾(避免所有的垃圾沿提交方式):然後

git checkout master 
git merge --squash development 

但是GitHub的網絡頁面顯示如下:

 master: o--o--o---------o 
development:  `o--o--o 

什麼是你應該做到這一點,說明你所期望的,即什麼:

 master: o--o--o---------o 
development:  `o--o--o’ 
+0

您使用'git merge --no-ff'獲取最後一張圖。但請注意,「垃圾提交」仍然存在。 –

+0

值得一提的是,「壁球合併」不是真正的合併(正如你的歷史所顯示的那樣);它確實更像是一個「壁球基地」。通過首先壓縮'development'(**重寫歷史記錄**),然後通常將結果合併到主文件中,您可能會得到您真正想要的內容。 –

回答

9

在過去的圖表,你可以使用下面的命令:

git merge --no-ff 
git branch -d development 

master: o--o--o---------o 
       `o--o--o’ 

你告訴混帳創建一個合併提交,即使合併分支是快速前進的,即主控的最後一個提交是合併分支的直接祖先。

請注意,「垃圾提交」將不會被刪除,但除非您有一個非常好的理由,否則應該保持原樣。壓縮提交使得瀏覽您的歷史記錄變得困難。

如果您覺得您的開發分支歷史充滿垃圾,您也可以在合併之前使用交互式分配重寫它。

git checkout developement 
git rebase -i master 

您將能夠挑選,編輯,重新排序,壓扁或放棄提交併重寫您的分支歷史記錄。完成此操作後,使用經典合併(根據您的喜好可以帶或不帶--no-ff)。