2011-07-12 84 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记录合并的来源。当主题分支合并回主分支时,没有(最小?)冲突。特别是,从主人到主题的合并都不会显示为冲突。 –

相关问题