如何在本地和远程存储库中进行rebase?

时间:2013-12-03 12:24:51

标签: git

这是how to handle this git rebase issue?的后续问题。

我正在开发一个新功能,所以我创建了一个新的分支,如下所示:

A--B--C--D              master branch
         \
          \-1--2--3     my feature branch

但是鉴于人们不断向master分支添加代码,我想总是获取master分支的最新代码。请注意,我的功能是在目录中,因此在rebase或merge to master时不会发生冲突。我想要的是:

A--B--C--D--E--F
               \
                \-1--2--3--4

我从最后一个问题得到的回答是关于使用git rebase origin/master

但是当我尝试将我的功能分支推送到远程时,麻烦又来了:

$ git push ssh HEAD:ntfdev
To git@xxxx.xxxxxxx.com:yyyyy/yyyy.git
! [rejected]        HEAD -> ntfdev (non-fast-forward)
error: failed to push some refs to 'git@xxxx.xxxxxxx.com:yyyy/yyyy.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.

我认为失败是因为我在本地但远程功能分支中的功能分支没有重新定位,因此它们不一致。

如何在本地和远程重新定位?

1 个答案:

答案 0 :(得分:1)

您不应该同时重新绑定远程分支。您唯一的担心应该是保持最新的本地功能分支。

如果你喜欢变基,你应该这样做:

git checkout master
git pull --rebase #refresh master using rebase
git checkout featureBranch
git rebase master #replay all changes on the feature branch on top of the master branch

如果您定期执行上述操作,则您的功能分支将作为仅限本地主设备的延续。

现在,您希望将更改推送到主分支上的服务器,您应该执行上述操作,然后才执行以下操作:

git checkout master
git merge featureBranch #because you have rebased, this will only fast forward the feature branch pointer to where the master branch pointer points to
git push

如果这是你重视的事情,该序列将保持线性历史。

如果您的功能分支被推送到服务器并且有多个开发人员正在处理它,那么您需要做两件事: 1)确保定期在本地获取最新版本的远程功能分支,并确保在将任何更改推送到远程功能分支之前, 2)确保远程功能分支与主

保持同步

你需要做的第一件事:

git checkout featureBranch
git pull --rebase

每当您想要远程分支的最新代码时,以及在推送到远程功能分支之前肯定会发生这种情况。我们首先将本地功能分支更新为远程功能分支中的任何更改(修复路上的任何冲突)以及向服务器推送我们的更改(现在已经很好地合并)

对于第二个你需要我上面描述的内容。

所有从事该功能的开发人员应该经常做第一个。我建议将责任分配给一位开发人员,每天至少做一次。在此开发人员从master进行更新后,他/她会通知团队的其他成员从远程功能分支刷新其本地功能分支。它们

我希望有所帮助。