在同一分支上工作时合并未更改文件的冲突
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 --amend
或 rebase
提交她的更改,并使用 push -f
、 上传她的更改
- B 在拉动之前重写了她的部分本地历史记录(例如:
commit --amend
或 rebase
)。
我真的不明白如果不更改历史记录怎么会发生冲突,但也许我忽略了一些可能性。无论如何:历史视图应该突出一些东西。
“修复”这种情况的最合适方法取决于您在历史中看到的内容,一些通用方法是:
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
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 --amend
或rebase
提交她的更改,并使用push -f
、 上传她的更改
- B 在拉动之前重写了她的部分本地历史记录(例如:
commit --amend
或rebase
)。
我真的不明白如果不更改历史记录怎么会发生冲突,但也许我忽略了一些可能性。无论如何:历史视图应该突出一些东西。
“修复”这种情况的最合适方法取决于您在历史中看到的内容,一些通用方法是:
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