如果你是積極的,你只想要一個承諾,並罰款從來沒有被標記爲「合併」(也許是因爲你即將與git branch -D my-squash-merged-branch
刪除它,再也不想看到它)的分支,使用:
git checkout master
git merge --squash branch-to-merge
git commit -m "message for commit"
然而,許多測試之後,我相信最好的方式合併最分支是:
git checkout master
git merge --no-ff branch-to-merge -m "message for commit"
這就避免了「快進」合併是不允許指定-m "message"
選項很多合併。它不是實際上提供了最初請求的單個提交,但至少可以很容易地看到分支的開始/結束,因此可以輕鬆恢復等等。一個git log
將顯示所有被合併,個人提交...
commit a6672a4c3d90c35d5f39c45f307ef6b385660196
Merge: 015f8d6 f84e029
Author: Brian White <[email protected]>
Date: Wed Jan 15 20:47:35 2014 -0500
merged something trivial
commit f84e02915faa02afc9a31b8c93a6e7712420687d
Author: Brian White <[email protected]>
Date: Wed Jan 15 20:47:12 2014 -0500
added something also trivial
commit 904d5b5ff00d691d63104a77d2e2ca484732a5fb
Author: Brian White <[email protected]>
Date: Wed Jan 15 20:46:26 2014 -0500
added something trivial
commit 015f8d681bdaf65725067ee8058215cedb529dd6
Author: Brian White <[email protected]>
Date: Wed Jan 15 20:23:31 2014 -0500
optimizations to MyThing
...
...但如果你看看日誌(git log --graph
)的圖,你可以看到,混帳確實認識到它作爲一個合併。
* commit a6672a4c3d90c35d5f39c45f307ef6b385660196
|\ Merge: 015f8d6 f84e029
| | Author: Brian White <[email protected]>
| | Date: Wed Jan 15 20:47:35 2014 -0500
| |
| | merged something trivial
| |
| * commit f84e02915faa02afc9a31b8c93a6e7712420687d
| | Author: Brian White <[email protected]>
| | Date: Wed Jan 15 20:47:12 2014 -0500
| |
| | added something also trivial
| |
| * commit 904d5b5ff00d691d63104a77d2e2ca484732a5fb
|/ Author: Brian White <[email protected]>
| Date: Wed Jan 15 20:46:26 2014 -0500
|
| added something trivial
|
* commit 015f8d681bdaf65725067ee8058215cedb529dd6
| Author: Brian White <[email protected]>
| Date: Wed Jan 15 20:23:31 2014 -0500
|
| optimizations to MyThing
...
如果提交或其他活動發生在主分支,該圖表將顯示合併後的分支開始在正確的地方,在目前的頭部結合,但當然,所有提交仍將日誌與中所示來自頂部的分支承諾。
git merge --squash真是太棒了。我希望在2011年我更仔細地閱讀了這個;)+1 – 2013-01-06 21:22:17
git merge --squash的問題在於它實際上並沒有創建合併提交。像GitHub的網絡瀏覽器的GUI不會顯示分支重新加入;一個會突然結束而另一個繼續。 – Maxpm 2013-06-12 17:54:12