M-x ediff-buffers
C-x v = (vc-diff
)
您还可以通过 M-x ediff-revision
调用 ediff
查看变更
进入ediff会话后,将焦点放在 ediff
导航中进行操作.像这样:
- n/p -下一个不同之处/前一个不同之处
- a - 应用版本a的内容
- b - 应用版本b的内容
- r -还原,撤销A/B块的应用。
- q - 退出 ediff 会话
Emacs自带一个合并冲突的易用接口, 叫做 smerge
(即”simple merge”之意).
当出现合并冲突, Emacs将自动突出显示那些版本控制系统写入源文件中的差异标记。 它将识别哪些部分是“他们的”,哪些是“我的”——以及“祖先”是什么样子的(如果你设置了三路合并)。
要选择下面的版本,我只要把光标放在上面,然后运行 M-x smerge-keep-current
.
默认情况下,git 在发生合并冲突时使用双路对比 (“我们”文件版本以及”他们”的版本). 然而当解决合并冲突时, 通常还需要查看合并文件两个版本的最新公共祖先.
三路对比特别有用, 你可以通过在 ~/.gitconfig
中添加下面内容来全局性地为所有项目设置成三路对比:
[merge] conflictstyle = diff3
在版本Emacs版本25.1上通过测试
在 .p4enviro
中写入:
P4MERGE=/home/torstein/bin/p4-emacs-merge
在 .emacs
中写入:
(server-start)
在 /home/torstein/bin/emerge
中写入 (Gentoo用户,注意完整的路径;-)
ancestor=$1 theirs=$2 yours=$3 merge_result=$4 emacsclient -e "(ediff-merge-files-with-ancestor "${yours}" "${theirs}" "${ancestor}" () "${merge_result}")" emacsclient "${merge_result}"
p4-emacs-merge的完整源代码可以在这里找到: https://github.com/skybert/my-little-friends/blob/master/bash/vcs/p4-emacs-merge
在 ediff
会话中完成操作并返回到 p4/shell提示符后,选择 ae
(接受编辑)
下面是一个合并冲突, 显示了两个版本的内容 (p4 “你的内容” 作为 A 而 p4 “他们的内容” 作为 B):
这次我希望使用他们的版本, 因此我按下 b 键. Emacs 就会使用B块的内容替换冲突部分了: