Git分支与主人分道扬..

时间:2015-01-13 22:39:06

标签: git version-control

我有feature分支,然后掌握branch

上周我在feature分支上工作,然后在功能分支上工作,我昨天做了这个

git rebase master

其他人今天也在主分公司提交了osme东西。

所以今天我做了这个

master# git pull
master# git rebase feature

现在我明白了

$ git status
On branch master
Your branch and 'origin/master' have diverged,
and have 18 and 11 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
nothing to commit, working directory clean

我该怎么办?我能做git push -f

吗?

2 个答案:

答案 0 :(得分:3)

尝试创建一些解释你所做的事情的图表会非常有用,所以让我们试一试。假设您从远程主服务器创建功能分支时,它只有3个提交。这意味着两个本地分支机构将开始如下所示:

A <- B <- C master
A <- B <- C feature

我们还假设在上周,您向本地功能部门提交了一些提交,团队中的其他开发人员也提交了远程主设备。通过master# git pull拉出主分支后,您的两个本地分支将如下所示:

A <- B <- C <- 1 <- 2 <- 3 master
A <- B <- C <- D <- E feature

此处,提交1,2和3来自其他开发人员,而提交D和E来自您。

接下来,如果您通过master# git rebase feature对该功能进行了本地rebase主,那么这两个分支将如下所示:

A <- B <- C <- D <- E <- 1' <- 2' <- 3' master
A <- B <- C <- D <- E feature

主提交1,2和3现在变为1',2'和3',因为实际上在主分支上重放功能后提交了不同的提交。

最后,让我们将您的本地主分支与远程主分支进行比较:

A <- B <- C <- D <- E <- 1' <- 2' <- 3' local master
A <- B <- C <- 1 <- 2 <- 3 remote master

当你进行git status电话时,Git告诉你,你的本地主人已经偏离了遥控器。这意味着本地和远程主服务器共享一个共同的祖先提交,但每个提交都超出了这一点。这也意味着您无法快进远程主站。此时您唯一的选择是强行推送git push -fgit merge。正如Oliver Charleworth指出的那样,强制你的本地分支到远程通常是一个坏主意,因为它可以覆盖使用master的其他开发人员的所有更改。您剩下的选择是将本地主人与遥控器合并。

继续前进的更简单(和更简洁)的方法就是在功能分支中完成所有工作,然后在需要时将其合并到master中。通常情况下,您应该只是将某个功能(或将功能合并到主服务器)重新设置为主服务器,而不是相反。

答案 1 :(得分:-1)

不,如果你推-f,你将删除其他开发人员提交给主人的更改。

您有两种选择:

1)与主人合并。

git merge master

2)重新加入主人

git rebase <sha1> onto --master

<sha1>将是您从主分支的原始提交。

这些选项彼此非常不同,您需要完全了解它们的作用。你需要做的是完全取决于你的意图,未来。如果你准确地解释了你想要实现的目标,可以提出一些进一步的建议。