我有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
答案 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 -f
或git merge
。正如Oliver Charleworth指出的那样,强制你的本地分支到远程通常是一个坏主意,因为它可以覆盖使用master的其他开发人员的所有更改。您剩下的选择是将本地主人与遥控器合并。
继续前进的更简单(和更简洁)的方法就是在功能分支中完成所有工作,然后在需要时将其合并到master中。通常情况下,您应该只是将某个功能(或将功能合并到主服务器)重新设置为主服务器,而不是相反。
答案 1 :(得分:-1)
不,如果你推-f,你将删除其他开发人员提交给主人的更改。
您有两种选择:
1)与主人合并。
git merge master
2)重新加入主人
git rebase <sha1> onto --master
<sha1>
将是您从主分支的原始提交。
这些选项彼此非常不同,您需要完全了解它们的作用。你需要做的是完全取决于你的意图,未来。如果你准确地解释了你想要实现的目标,可以提出一些进一步的建议。