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