参考:Fix conflicts only once with git rerere
下载初始化仓库-百度云,直接开始操作,不写太多理论啦,没毛用。
打开rerere
功能
$ git config --global rerere.enabled true
- 也可以在自己的仓库的创建
.git/rr-cache
文件夹来开启该功能,但是用命令开启的话,全局都开启。创建文件夹只对当前git repository有效。
初始化仓库(下载仓库默认的样子就是这样)
$ git log --oneline --all --graph --decorate
merge合并hello.txt并记录冲突解决方式
$ git merge master
git add hello.txt
git commit --no-edit
$ git log --oneline --all --graph --decorate
$ git reset --hard HEAD^
$ git log --oneline --all --graph --decorate
修改morning.txt
将修改的morning提交
$ git add morning.txt
$ git commit -am '修改morning 第一行为(modified test)'
切换回master
$ git checkout master
将修改的morning提交
$ git add morning.txt
$ git commit -am '修改morning 第一行为(modified master)'
$ git log --oneline --all --graph --decorate
继续将master合并到test
$ git checkout test
$ git merge master
$ git rerere remaining
hello.txt文件已经自动解决啦,把hello.txt添加到index
$ git add hello.txt
如果已经在merge之前开启啦下面的选项,那么自动解决冲突的hello.txt会被自动添加到index,这样就不用上面的add啦,推荐开启。
$ git config --global rerere.autoupdate true
提交修改完成merge操作,
-a
就是自动添加修改过的文件,--no-edit
就是使用默认commit message,不修改
$ git commit -a --no-edit
$ git reset --hard HEAD^
$ git log --oneline --all --graph --decorate
最后一次在test分支上工作并提交,将test合并到master
$ git commit -am '修改hello.txt第10行为(test10)'
$ git log --oneline --all --graph --decorate
$ git checkout master
$ git merge test
下面命令执行后,也没有显示有剩余的冲突文件,证明merge干净利落,虽然输出结果最后还是有一句自动合并失败,直接无视。
git rerere remaining
$ git diff --staged
$ git commit --no-edit
$ git log --oneline --all --graph --decorate
注意事项:
rerere会自动用解决hello.txt中两个
(test)
(master)
冲突的方法来解决morning文件中的冲突,所以rerere存储的解决方式是基于冲突的内容的,而不是基于冲突文件名中的某个区域。