Git 的冲突主要发生在分支合并、rebase 等操作时,多个开发者在同一个文件中修改了同处代码导致的不兼容。
Git 中解决冲突的主要方式有:
- 手动解决:打开包含冲突的文件,手动修改代码使其达到兼容,再提交。这种方式修改便捷,但容易出错。
- 丢弃本地或远程修改: git checkout –ours/–theirs 命令丢弃本地/远程分支上的修改,使用其中一方的文件版本解决冲突。
- 延迟解决:在合并分支时使用 git merge –no-commit 命令,此时会暂时保存未提交的合并,等到手动解决所有冲突后再提交。这种方式可以在统一解决冲突后再提交。
- 取消合并:如果发现分支合并产生的冲突难以解决,可以使用 git merge –abort 命令取消本次合并,回到合并前的状态,这时需要重新考虑分支合并的方案。
- 重置提交:使用 git reset –hard 命令回退到某次提交,丢弃该提交后的修改,解决冲突后再次发起分支合并。这种方式操作更简单粗暴,但也更容易丢失修改内容,需要谨慎操作。
例如:
- 手动解决冲突,在文件中标注冲突位置,修改后保存提交:
<<<<<<< HEAD
var name = "John"
=======
var name = "Jack"
>>>>>>> feature
# 修改后:
var name = "Jim"
- 丢弃本地修改,使用远程分支版本:
git checkout --theirs README.md
- 延迟解决冲突,修改完之后统一提交:
git merge --no-commit feature
# 修改各个文件解决冲突
git commit -m "Merge branch feature"
- 取消合并,重新修改合并方案:
git merge --abort
- 重置到某次提交,再合并分支:
git reset --hard HEAD~3 # 回退3次提交
git merge feature
Git 提供了多种方式来灵活解决分支合并产生的冲突。根据项目的实际情况选择适宜的冲突解决方式,可以让我们更自如地利用Git进行分支管理和多人协作开发。