繁体   English   中英

Git分支与大师分叉

[英]Git branch diverged from master

我有feature分支,然后有主branch

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

git rebase master

另一个人aslo今天在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

尝试创建一些图表来确切说明您所做的工作将非常有用,因此让我们来看看。 假设您从远程主机创建功能分支时,它只有3次提交。 这意味着两个本地分支将开始如下所示:

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

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

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

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

接下来,如果您通过master# git rebase feature在该功能上对master进行了本地重设,则两个分支将如下所示:

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

现在,主提交1、2和3已变成1',2'和3',因为实际上是在您的master分支上重播功能后所做的不同提交。

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

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

当您进行git status呼叫时,Git告诉您您的本地主机已与远程主机分离。 这意味着本地和远程主节点共享一个共同的祖先提交,但在此之后,每个提交都有不同的提交。 这也意味着您无法快速转发远程主服务器。 此时,您唯一的选择是通过git push -f强制推送,或git merge 正如Oliver Charleworth指出的那样,将本地分支强制到远程通常是一个坏主意,因为它可以覆盖使用master的其他开发人员所做的所有更改。 您剩下的选择是将本地主机与远程主机合并。

前进的更简单(更简洁)的方法是在功能分支中完成所有工作,然后在需要时将其合并到master中。 通常,您仅应在主控上建立基础(或将功能合并到主控),​​而不是相反。

不,如果您按-f键,则将消除其他开发人员提交给母版的更改。

您有两种选择:

1)与主人合并。

git merge master

2)重新建立基础

git rebase <sha1> onto --master

<sha1>将是您分支出的master上的原始提交。

这些选项彼此非常不同,您需要完全了解它们的作用。 您需要做什么,完全取决于您的意图,即前进。 如果您确切说明您要实现的目标,则可以提出一些进一步的建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM