两种情况会导致merge失败
执行git pull
有时会提示自动merge失败,原本显示分支的地方会多出MERGING
提示,需要我们手动解决冲突。
- 没有冲突的部分则会自动合并。
- 执行
git pull
的时候实际上是先执行git fetch
获取远程仓库的数据,再执行git merge
将其与本地的当前分支合并。
- 同一个文件中既有2个人独自编辑的部分也有共同编辑的部分,merge时共同编辑的部分git不知道要保留谁的,这就导致了冲突,merge失败。
- 还有一种情况是服务器上最新的版本中某个文件被删除了,但是本地版本中还有此文件,这也会导致merge失败。
第一种情况的解决方法
我们可以通过git checkout
+ --ours
/ --theirs
来告诉git我们要保留本地版本还是服务器版本的文件
保留本地版本的文件
git checkout --ours
ours表示dev分支的版本
保留服务器版本的文件
git checkout --theirs
theris表示服务器上的版本
批量保留服务器版本的文件
符号.
在git中表示所有文件,我们可以用git checkout --theirs .
来批量保留服务器版本的文件。
批量checkout时要确保冲突文件中没有delete by them的文件,否则会报错:
第二种情况的解决方法
删除本地文件
使用git rm
来删除本地文件。
使用git status
来看一下状态,发现刚刚删除的TX1686.xml已经不见了。
保留本地文件
如果要保留本地文件则可以用git checkout --ours
来保留
提交更改
所有冲突都解决完之后就需要git commit -am 'comments'
来保存更改。提交后分支名旁边的MERGING
就会消失了,此时代码就成功合并了。