在同一分支上工作时合并未更改文件的冲突

Merge conflict on unchanged files when working on the same branch

A 和 B 两个人在同一个分支上工作。 人员 A 将文件 X 的更改推送到分支。 B 没有触及文件 X,但触及 git pull。 这导致了文件 X 的合并冲突。 为什么会出现这种情况,B是如何避免或处理这种情况的?

与远程分支的历史相比,B 应该检查其本地分支的历史:

git log --oneline --graph <branch> origin/<branch>

# you possibly want to only see what commits impacted file X :
git log --oneline --graph <branch> origin/<branch> -- X

# generic shortcuts :
#  - "the commit I'm currently on" is HEAD
#  - "the tracked upstream branch" is @{u}
git log --oneline --graph HEAD @{u}

我建议使用终端命令查看历史记录,大多数 GUI 前端还允许查看多个分支的合并历史记录。


可能性包括(但不限于):

  • 人 A 使用 commit --amendrebase 提交她的更改,并使用 push -f
  • 上传她的更改
  • B 在拉动之前重写了她的部分本地历史记录(例如:commit --amendrebase)。

我真的不明白如果不更改历史记录怎么会发生冲突,但也许我忽略了一些可能性。无论如何:历史视图应该突出一些东西。


“修复”这种情况的最合适方法取决于您在历史中看到的内容,一些通用方法是:

  • B 可以在远程分支的最新版本之上重新设置她的更改;如果有多余的提交要删除,她可以使用 rebase --interactive,并在所述提交前标记“删除”

  • B 可以简单地解决她所拥有的合并中的冲突;如果她确定文件 X 的正确版本是 A 推送的版本,她可以 运行 :

# remove the "conflicting" flags :
git reset -- X
# use the version from the remote branch :
git checkout origin/<branch> -- X