2011-07-12 79 views
4

我想讓主題分支與其父分支保持同步。這與使用變基到父分支的本地特性分支奇妙的作品:如何與遠程分支的父分支保持同步

git checkout topic 
git rebase master 

但是,如果話題是遠程分支則似乎墊底掌握與檢查到遠程分支產生衝突。

什麼是最好的方式來跟上在遠程分支主人的變化。

這是我一直在做的。當將遠程分支重新定位爲主人時,我似乎總是會遇到多重衝突和多個「分支」。

git checkout master 
git checkout -b topic 
git push origin topic 
git branch --set-upstream topic origin/topic 

我繼續在專題的工作,使提交,推到原點:

我與遠程分支機構工作時,使用標準的結構。

# edit some files 
git commit -a 
git push 

在某些時候,master已更新,我需要將這些更改合併到我的主題分支中。

git checkout master 
git pull 
git checkout topic 
git rebase master 

太好了。現在推送該更新。

$ git push 
To [email protected]:duane/branchtest.git 
! [rejected]  topic -> topic (non-fast-forward) 
error: failed to push some refs to '[email protected]:duane/branchtest.git' 
To prevent you from losing history, non-fast-forward updates were rejected 
Merge the remote changes (e.g. 'git pull') before pushing again. See the 
'Note about fast-forwards' section of 'git push --help' for details. 

奇怪的是,日誌看起來是這樣的:

$ git log --graph --format=oneline 
* 31f4b133a4a9983528ba309e6c161e09e8061f84 Change 1 for topic 2. 
* 2dc45b91856748a9c6adaf3579a7b8b2cf90a6ae Change 3 for file1. 
* db97959ec75267bf94d97af6e8b2a8a762c61b25 Add topic2.txt. 
* 08e6cc4b14a23dad86c2d283ee4acc1cebc775ef Change 2 for file1. 
* e707b9571b2aa4d01073f156abb407fec15a195a Change 1 for file1. 
* 2002670efda4d8c83150a4cc1c25fac62e37814d Add file1.txt. 
* d3a6eae43e4824f455872622491c2ca861f96d4f Begin the repo. 
$ git pull 
Merge made by recursive. 

而且事後看起來像

$ git log --graph --format=oneline 
* 18ba5265e2836e1a7884341dbedb8b2cc8ab9727 Merge branch 'topic' of github.com:duane/branchtest into topic 
|\ 
| * 0e5f3022c7f087ed4dd70d11a0cba250300be05e Change 1 for topic 2. 
* | 31f4b133a4a9983528ba309e6c161e09e8061f84 Change 1 for topic 2. 
* | 2dc45b91856748a9c6adaf3579a7b8b2cf90a6ae Change 3 for file1. 
|/ 
* db97959ec75267bf94d97af6e8b2a8a762c61b25 Add topic2.txt. 
* 08e6cc4b14a23dad86c2d283ee4acc1cebc775ef Change 2 for file1. 
* e707b9571b2aa4d01073f156abb407fec15a195a Change 1 for file1. 
* 2002670efda4d8c83150a4cc1c25fac62e37814d Add file1.txt. 
* d3a6eae43e4824f455872622491c2ca861f96d4f Begin the repo. 

更改爲1 2的主題是,我所做的更改。現在列出兩次。

當然,我的遠程主題分支上的混亂一團糟。

更大的問題是,每次發生重新分配給主設備時都會重複這個額外的合併點;即使主人沒有變化!

我哪裏錯了?如何在保持遠程分支的同時與主分支保持同步?

回答

1

如果我理解正確,您希望遠程主題分支精確地鏡像您的本地分支,但只能在本地計算機上完成更改?

在這種情況下,無論何時您對主題分支進行本地更改,您都應該使用git push --force。但是,如果您與其他人共享您的主題分支,則不應該這樣做。在這種情況下,您應該跳過rebase,並且只需從主站執行merge以保持最新狀態。這不是「漂亮」,但它更可靠。

+0

強行推送不會很好。所以,對於本地分支來說,rebase是很好的,但對於遠程分支,合併更好(需要ney)。之後當主題分支合併爲主時,會不會出現合併問題? –

+0

回答我自己的問題...... git記錄合併的來源。當主題分支合併回主分支時,沒有(最小?)衝突。特別是,從主人到主題的合併都不會顯示爲衝突。 –

相關問題