在代码合并时遇到 conflict
是常有的事情,有些内容是自动生成的资源文件,手工处理起来很麻烦,某一文件如何全部以某一分支的内容为准?
使用 checkout --theirs .
checkout --ours .
。
场景实例
Engineer A、B 同时从 master checkout 自己的功能分支:
# Engineer A
git checkout -b feature-a
# Engineer B
git checkout -b feature-b
Engineer A 开发比较快先进行了 push:
git add .
git commit -m "feat: feature-a"
git checkout master
git merge feature-a
git push
Engineer B 再 push 前需要拉最新的 master,因为改到了同一行代码,出现代码冲突。
merge 合并代码
使用 merge 命令导致的代码冲突。
git checkout master
git pull
git merge feature-a
在处理冲突的过程中:
# 以自己(Engineer B)的代码为准
git checkout --ours .
git checkout --ours file.txt
# 以他人(Engineer A)的代码为准
git checkout --theirs .
rebase 合并代码
使用 rebase 命令导致的代码冲突。
git checkout master
git merge feature-a
git pull --rebase
在处理冲突的过程中:
# 以自己(Engineer B)的代码为准;与 merge 相反,可以理解为 rebase 时主干是他人的分支
git checkout --theirs .
# 以他人(Engineer A)的代码为准;与 merge 相反,可以理解为 rebase 时主干是他人的分支
git checkout --ours .