git冲突处理
今天在merge分支的时候,由于记忆错位,merge了format分支到master,造成了很严重的冲突(我原本是要把format分支合并到dev分支,结果合并到了master)。
看到几百个文件的modify想死的心都有,差点想重新clone重新来过。。。
好在理智战胜冲动,决定正面处理冲突,而不是消极回避。
而在处理完冲突之后,发现异常的简单,庆幸没有冲动乱来。
言归正传。
我在merge的时候git的提示是:1
2
3
4
5err: Your local changes to the following files would be overwritteen by merge:
bla bla bla
Please commit your changes or stash them before you merge.
Abording
Updating xxxxxxx(some hashcode)
解决方案有三种:
第一种: 提交修改
1 | git commit -m "my message" |
第二种: stash
备份当前工作区的内容,从最近的一次提交种读取相关内容,当工作去保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。然后执行merge,然后再从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。1
git statsh
然后执行之前未执行完的merge操作:1
git merge xxx
然后拉取stash:1
git stash pop
由于可能存在多个stash的内容,所有用栈来管理,pop会从最近的一个stash中读取内容并恢复。
可以用 git stash list
来查看Git栈内的所有备份,可以利用这个列表来决定从哪个地方恢复。git stash clear
可以清空Git栈。
第三种: 忽略本地修改
1 | git reset --hard |
Or 忽略只忽略特定的文件
1 | git checkout filename |
我当然使用的是stash的方式。
- 在
master
分支上使用git stash
, - 然后
git merge dev
, 成功merge! - 然后恢复工作区
git stash pop
, 然后多出了很多modify的文件,还有一个标红的文件(冲突),不过它已经帮你解决好,只需要在文件中选择你要保留哪一段代码就好。 - 修改完冲突文件后,
git add .
,git commit -m "conflict fixed"
. - 最后,赶紧把这个解决完冲突后的代码传上远程仓库, WOO,松了一口气。