一周前,我将分支B合并到我的分支C,并对我的分支C进行了一些更新。
与此同时,我的同事更新了他的分支B。
我想让他更新我的分支C。
我真的很困惑,因为他告诉我只在他的分支上重新基本,但这会让删除我所有的新更新/添加的文件。
我再次尝试合并这两个分支,但不知何故这次我没有得到他的更新。
我们的项目看起来有点像:
Origin---o---o---o---o---o--- main
o---o---o---o---o---o---o---o---o B
(merged) (rebase here?)
o---o---o---o---o---o---o---o---o C
回扣很复杂,在这种情况下可能是个坏主意。让我们采用您的拓扑结构:
o---o---o---o---C1---o---o---o---o friend
o---o---o---o---M---o---o---o me
要获取朋友的更改,正确而简单的做法是(在me
上(:
git merge friend
这将给出:
o---o---o---o---C1---o---o---o---o friend
o---o---o---o---M---o---o---o---M2 me
尽管你的朋友说了什么,但你现在无法连贯地重新设置基准,因为me
已经包含了来自friend
的合并提交(M(。回扣不容易应付;它将忽略合并提交,因此合并的效果将在分支中撤消。有很多方法可以解决这个问题,但不值得在这里深入探讨。
然而,现在的关键问题是,如何摆脱糟糕的重组和糟糕的合并所带来的混乱。答案是使用reflog,这使得你在Git中所做的很多事情都是不可撤销的。当你说git reflog
时,你会看到一个列表,上面列出了你的HEAD之前的所有状态。其中之一将是在您开始重新基准之前的状态。你想通过说git reset --hard <SHA>
(正如我在这里解释的那样(回到这一点。现在做你应该做的合并,然后继续前进