[Git] 使用vimdiff在Git合并中实现差异对比
目标
当发生冲突时,例如在pull操作时,可以使用vimdiff来解决冲突。
步骤
1. 用途
当git pull失败并且需要手动合并时,可以使用如下方法。
$ git pull
~
Auto-merging aaa
CONFLICT (content): Merge conflict in aaa
Automatic merge failed; fix conflicts and then commit the result.
2. 设定vimdiff作为合并工具进行使用。
请将以下内容放在全局配置中。
$ git config --global merge.tool vimdiff
$ git config --global merge.conflictstyle diff3
$ git config --global mergetool.prompt false
只要在git mergetool中设定vimdiff作为合并工具,即使没有输入任何内容,系统也会询问要使用哪个合并工具。
打开vimdiff。
$ git mergetool
输入此命令将打开以下形式的vimdiff界面。
╔═══════╦══════╦════════╗
║ LOCAL ║ BASE ║ REMOTE ║
╠═══════╩══════╩════════╣
║ ║
║ MERGED ║
║ ║
╚═══════════════════════╝
ウィンドウ役割LOCAL現在のワーキングツリー上のファイルBASE共通の先祖ファイル。変更前はどのようなファイルだったかREMOTEワーキングツリーへマージしようとしているファイルMERGED最終的にレポジトリの中で保存されるファイル
4. 如何使用vimdiff
窗口之间的移动
可以使用键盘上的 [ctrl]+w → hjkl 来在各个窗口之间进行移动(h代表向左,j代表向下,k代表向上,l代表向右)。
注意:也可以使用光标键来代替hjkl。
合并方式
当切换到合并的窗口时,冲突部分以不同颜色显示。
冲突点是从<<<<<<<到>>>>>>>之间。
<<<<<<< HEAD
localfile
||||||| merged common ancestors
ancestor
=======
remotefile
>>>>>>> ap8990as3eipsaldjff669197e1sdkfasasdf1131d
当将光标置于冲突部分时,决定采用LOCAL,BASE,还是REMOTE,并通过以下命令进行应用。
採用対象反映コマンドLOCAL:diffg LBASE:diffg BREMOTE:diffg Rその他手動で編集
合并处理结束
编辑完毕后关闭窗口。
当光标位于MERGED窗口时,可使用:xa命令保存并批量关闭所有窗口。
如果光标位于MERGED窗口,则使用:w命令保存,并使用:qa命令批量关闭所有窗口。
(虽然使用:wqa命令可以一次性关闭所有窗口,但这样会导致LOCAL、BASE和REMOTE文件全部保存,使版本库中出现未跟踪的文件)
:xa
删除在作业中未被跟踪的文件。
vimdiff中的合并处理完成后,发生冲突的本地文件会以.orig作为扩展名另存为别名。
这些由vimdiff保存的备份文件不需要包含在版本库中,因此可以使用git clean来删除。
※需要注意不要意外删除新创建的文件。
$ git clean -n
$ git clean -f
使用 git clean 命令可以删除暂存区中未被跟踪的文件。选项 -n 是表示进行演习运行的选项。如果只想删除特定的文件,请指定文件路径。
$ git clean -n %untracked_file_path%
$ git clean -f %untracked_file_path%