2013-07-03 52 views
5

假設進出口工作的一個特點,在一個名爲foo_baz分支。Squash在主控上提交,但在功能分支上單獨提交?

我犯多次爲我實現這個特性。

我週期性推foo_baz,遠程跟蹤分支,到遠程回購。 IE origin/foo_baz

我進展到了我想要將foo_baz的所有提交合併到master並推送到origin/master的點。這裏的問題:

我可以將其合併到foo_baz這樣master所有提交仍在foo_baz分開的histroy,但在master的歷史,他們都是一個,壓扁承諾?

編輯:

我有點混帳初學者,所以請原諒我,如果有什麼東西完全明顯,我失蹤。我在網上搜索,但無法找到我的問題的直接答案。

回答

5

您可能確實在尋找--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分支時獲得的所有文件)在DE(在這種情況下,無論如何,合併操作之前master上的B都沒有變化)都是相同的,重新提交不同的提交。

從直git merge所不同的是,後者通常會產生一個「快進」,它看起來像這樣:

A --- B 
     \ 
      C --- D  <-- foo_baz, master 

,其中該斜線可以理順,給你一個歷史的其中兩個分支看起來完全一樣。

0

我想你想要的是這樣的:

git merge --squash foo_baz 
git commit