2017-10-04 67 views
1

我有以下的歷史在我的叉:爲什麼github上創建一個岔路提交樹時,壁球和合並

x feature & origin/feature 
| 
x upstream/feature 

然後我做了一個拉請求,這是成功壓扁&合併。當我拉從上游的變化,我的歷史是這樣的:

x upstream/feature 
| x feature & origin/feature 
|/
x 

我期待下面:

x feature & origin/feature & upstream/feature 
| 
x 

所以是GitHub上的預期行爲拉請求或我搞砸的東西了?

回答

1

GitHub的「壓扁和合並」按鈕始終創建一個新的提交,該提交包含在拉取請求中應用每個提交的結果。 (更準確地說,它會創建一個新的提交,它使用合併行動 - 「合併爲動詞」,但是讓一個普通的,非合併提交這也是什麼命令行git merge --squash一樣。)

當有一個只有一個在提交請求中提交,這使得一個提交的副本。

如果有兩次提交你:

* (upstream/feature) the squash commit that is not a merge 
| * (feature, origin/feature) commit 2 
| * commit 1 
|/ 
* the common base across your GitHub repo and their GitHub repo 

注意,如果上游回購使用真實的合併,曲線幾乎是一樣的,只不過它的內容:

* (upstream/feature) the merge commit that IS a merge 
|\ 
| * (feature, origin/feature) commit 2 
| * commit 1 
|/ 
* the common base across your GitHub repo and their GitHub repo 

無論哪種方式,如果你打算使用合併或合併(即不合並,但是壓扁)提交,你應該移動你自己的分支來指向他們的提交,並忘記你的一系列提交。如果上游人員進行了壁球合併,這可能很困難:您必須得到整個球隊的放棄他們的feature版本並切換到上游的feature,的提示提交,即使這意味着失去您自己的提交。如果上游人員確實合併了您的提交,則更容易:您可以簡單地允許Git從feature的頂端向上遊feature執行不實際合併的快速「合併」。

+0

謝謝,torek,這似乎是真的。我想我現在可以重置我的分支到'upstream/feature',但是我想知道在壓縮和合並請求之後是否與傳統的上游同步?我想這就是你在這裏提出的建議_你應該把你自己的分支指向他們的提交,並忘記你所有提交的系列_ –

+0

_如果上游的人確實合併了你的提交,那就容易多了:你可以簡單地讓Git來執行從功能的頂端到上游功能的一個不實際合併的快速「合併」._ - 是的,這正是我所期望的,是本地快速合併。我猜如果我在壓縮和合並之後只是簡單的'git pull',我會在我的本地'特性'分支上得到一個**多餘的**合併提交。使用github的壓縮和合並拉取請求工作流程的常規方法是什麼? –

+0

對,如果你做了一個提取和合並(aka'git pull'),你會得到你自己的冗餘合併坐在他們的壓扁合併和你自己的提交。但是,除非上游以及提出請求的人(「下游」?:-)),否則您無法控制上游人員的行爲。在我目前的$工作中,我們實際上是這個等式的「雙方」(我們使用付費的GitHub賬戶進行私人回購),我們根據與自己的協調來做出不同的合併選擇:有時壓縮,有時合併,呃必須重建提交系列。 – torek