git冲突处理

git冲突处理

今天在merge分支的时候,由于记忆错位,merge了format分支到master,造成了很严重的冲突(我原本是要把format分支合并到dev分支,结果合并到了master)。
看到几百个文件的modify想死的心都有,差点想重新clone重新来过。。。
好在理智战胜冲动,决定正面处理冲突,而不是消极回避。
而在处理完冲突之后,发现异常的简单,庆幸没有冲动乱来。

言归正传。

我在merge的时候git的提示是:

1
2
3
4
5
err: 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
2
3
git reset --hard
// or
git checkout -t -f remote/branch

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,松了一口气。