您可能確實在尋找--squash
(與其他答案一樣),但您也許正在尋找--no-ff
。
以下是兩者之間的區別。假設你開始兩次提交:
A --- B <-- branch "master", when you start
,然後讓兩個對你的新分支foo_baz
:
A --- B <-- master
\
C --- D <-- foo_baz
現在(一度重上master
),你有這兩個選項(等等)。您可以git merge --squash foo_baz && git commit
,這將給你如下:
A --- B ----------- E <-- master
\
C --- D <-- foo_baz
,或者你可以git merge --no-ff
:
A --- B ----------- E <-- "master" after merge --no-ff
\ /
C --- D <-- foo_baz
兩個給你一個新的提交E
- 在第一種情況下,從單獨的git commit
命令,但第一個壓制多父母行爲,所以最後,當你從現在開始回顧這一年時,看起來你只是複製了分支中的所有更改。 樹(您在git checkout
分支時獲得的所有文件)在D
和E
(在這種情況下,無論如何,合併操作之前master
上的B都沒有變化)都是相同的,重新提交不同的提交。
從直git merge
所不同的是,後者通常會產生一個「快進」,它看起來像這樣:
A --- B
\
C --- D <-- foo_baz, master
,其中該斜線可以理順,給你一個歷史的其中兩個分支看起來完全一樣。