我在master上有两个分支:branch1和branch2。我在branch1上做了一些修改,并对此进行了积极的公关。我还对branch2进行了修改,这些更改已经被检查并合并到master中,分支随后被删除。
我更新了我的本地master,做了一个git fetch -ap和一个git pull,这降低了在branch2中所做的更改。现在,我想用这些更改更新branch1,这样唯一的区别就是我在这个分支上所做的区别。我尝试了git checkout branch1,然后是git rebase master。
然而,当我在branch1上做一个branch1时,它说:
On branch branch1
Your branch and 'origin/branch1' have diverged,
and have 3 and 1 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)在这里执行git pull将打开一个合并注释对话框。但是现在,当我在branch1上查看我的公关时,它现在包括了branch2的变化作为新的变化。这里发生了什么,我该怎么解决呢?
发布于 2016-09-23 17:40:12
(对于这个答案,我假设您已经签出了branch1。如果没有,那么做git checkout branch1。)
当您执行git rebase master时,您将在branch1中重写提交,因为它们现在有了一个新的父级。这就是你的历史可能是这样的:
X--*--Y [master]
\ \
\ A'--B'--C' [branch1] <--
\ | (git rebase master)
A--B--C [origin/branch1] ----例如,A'具有与A相同的内容,但具有不同的提交哈希,因为它的父级是Y而不是X。
由于提交已经更改,您将不得不强制更新origin。在完成重基之后,您应该做:
git push --force-with-lease但是,由于您已经做了一个git pull后重基,您需要首先修复它。例如:
git reset --hard C'或者:
git reset --hard HEAD^这将从branch1中删除合并提交,您可以强制推送(如前所述)。首先,要确保正确重置分支,请执行以下操作:
git log --oneline --decorate master..HEAD该命令的输出应该显示应该在branch1中的所有提交,并且只有那些提交。
(旁白:如果此时执行git status,您可能会看到如下一些输出:
On branch branch1
Your branch is behind 'origin/branch1' by 2 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)您可以安全地忽略此警告,因为其中一个提交是合并提交,另一个是原始错误消息中的1 different commit。)
如前所述,在这一点上,您应该:
git push --force-with-lease现在,远程branch1将具有与本地branch1相同的提交。
强制性的警告:由于重基重写历史,这对从事此分支工作的其他任何人来说都是危险的/破坏性的。确保你清楚地告诉了你和你合作的人做了什么。
https://stackoverflow.com/questions/39662147
复制相似问题