当"git pull up branch_name"在不应该发生冲突时出现冲突时如何处理 GitHub 的情况?



奇怪的是,以下步骤存在合并冲突:

  1. 我在 GitHub 上分叉了一个存储库foo
  2. git clone这个分叉的存储库到我的硬盘驱动器
  3. 3 天后,有人向分支提交了大量代码xyz
  4. 因此,为了使分支在我的分叉存储库上完全相同,我再次从分叉存储库git clone到一个新的文件夹bar
  5. cd bar
  6. git checkout xyz
  7. git remote add upstream <the URL for foo>
  8. git pull upstream xyz

并且出现了大量的合并冲突。 我从来没有碰过树枝xyz里的任何东西.是另一个开发人员将很多东西提交到xyz中,因此分支xyz应该使用他的所有更改进行更新,而不是合并冲突。 后来他说它有合并冲突,因为他git push -f,如果他从未使用过-f,那么它不应该有合并冲突。

这种情况是如何解决的?

您应该将pull分解为fetch,然后merge

git fetch upstream xyz git merge upstream/xyz

然后你必须解决冲突。

后来他说它有合并冲突,因为他git push -f,如果他从未使用过-f,那么它不应该有合并冲突。

这是正确的。

假设原始xyz分支看起来很简单

A --- B --- C --- D

也就是说,有四个提交,D是最新的。这是您克隆的内容。

现在,另一个人强制推动,使存储库看起来像这样:

A --- B --- C --- E

也就是说,已删除提交D,并添加了提交E。考虑一下运行git fetch时会发生什么:

A --- B --- C --- D  <-- local xyz branch
`
`--- E <-- remote xyz branch

完成此操作后,无法确定提交D最初来自远程分支。它与您在本地创建的提交没有区别,因此,您的后续git merge尝试保留其内容。

在这种情况下,你想完全忽略D,你只想得到Egit reset --hard E会这样做。你可以用任何通常的方式来指代E,这里对我来说最合适的似乎是git reset --hard @{upstream}.

最新更新