16.5.2 交互式解决树冲突

    树冲突虽然不能像文件冲突那样使用图形工具进行冲突解决,但还是可以使用git mergetool命令,通过交互式问答快速解决此类冲突。

    首先将user2的工作区重置到前一次提交,再执行git merge引发树冲突。

    (1)重置到前一次提交。


    $cd/path/to/user2/workspace/project $git reset—hard HEAD^ HEAD is now at 20180eb rename doc/README.txt to README $git clean-fd

    (2)执行git merge引发树冲突。


    $git merge refs/remotes/origin/master CONFLICT(rename/rename):Rename "doc/README.txt" ->"README" in branch "HEAD" rename "doc/README.txt" ->"readme.txt" in "refs/remotes/origin/master" Automatic merge failed;fix conflicts and then commit the result. $git status-s AU README DD doc/README.txt UA readme.txt

    上面的操作所引发的树冲突,可以执行git mergetool命令进行交互式冲突解决,会如下逐一提示用户进行选择。

    (1)执行git mergetool命令。忽略其中的提示和警告。


    $git mergetool merge tool candidates:opendiff kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff diffuse ecmerge p4merge araxis emerge vimdiff Merging: doc/README.txt README readme.txt mv:无法获取"doc/README.txt"的文件状态(stat):没有那个文件或目录 cp:无法获取"./doc/README.txt.BACKUP.13869.txt"的文件状态(stat):没有那个文件或目录 mv:无法将".merge_file_I3gfzy"移动至"./doc/README.txt.BASE.13869.txt":没有那个文件或目录

    (2)询问对文件doc/README.txt的处理方式。输入d选择将该文件删除。


    Deleted merge conflict for 'doc/README.txt': {local}:deleted {remote}:deleted Use(m)odifed or(d)eleted file,or(a)bort?d

    (3)询问对文件README的处理方式。输入c选择将该文件保留(创建)。


    Deleted merge conflict for 'README': {local}:created {remote}:deleted Use(c)reated or(d)eleted file,or(a)bort?c

    (4)询问对文件readme.txt的处理方式。输入d选择将该文件删除。


    Deleted merge conflict for 'readme.txt': {local}:deleted {remote}:created Use(c)reated or(d)eleted file,or(a)bort?d

    (5)查看当前状态,只有一些尚未清理的临时文件,而冲突已经解决。


    $git status-s ?? .merge_file_I3gfzy ?? README.orig

    (6)提交完成冲突解决。


    $git commit-m "fixed tree conflict." [master e070bc9]fixed tree conflict.

    (7)向共享服务器推送。


    $git push Counting objects:5,done. Delta compression using up to 2 threads. Compressing objects:100%(3/3),done. Writing objects:100%(3/3),457 bytes,done. Total 3(delta 0),reused 0(delta 0) Unpacking objects:100%(3/3),done. To file:///path/to/repos/shared.git 615c1ff..e070bc9 master->master