参考
使用 git.el
安装 git.el
使用 git.el
git-status 模式命令快捷键

参考

  1. Work with Git from Emacs
  2. 基本是上面的中文翻译

使用 git.el

安装 git.el

安装 git.el 非常的简单, 它放在git源文件的contrib/emacs子目录下。主要进 入这个目录运行make命令就可以编译它。 同样你也可以运行make install 来安 装它,它默认安装在$HOME/share/emacs/site-lisp下,当然你也可以通过传参数 emacslispdir给make来改变目录, 或者把全部文件copy到emacs目录下。

可以通过在.emacs文件中加入来默认启动它。

(require 'git)

使用 git.el

在emacs中首先都是通过执行 git-status 命令,它会询问用户Git仓库 (repository)的目录名,并且分析仓库的状态。 分析状态后, 它会创建一个 *git-status*的buffer, 这个buffer用来在文件上执行git命令。下面的图片是 这个buffer的一个示例(图片的底部是diff命令的输出)。 这个buffer内使用的 是git-status-mode,这个mode里定义了许多命令和对应的快捷键(他们有很多快 捷键和PCL-CVS包的快捷键相同)。所有的命令只是在这个mode里面有效。

用户可以在这个buffer内容过方向键来查看文件, 或者用命令 git-next-file(n或者SPC)和 git-prev-file(p键)来查看前一个文件或者后一个。 就像emacs的很多命令一样, 用户可以为他们定义数字前缀来改变命令的行为。

默认的, 所有的命令都在光标所在的文件上执行。 当然, 用户也可以通过选择 多个文件来让命令执行在多个文件上。选择主要通过下面的命令和快捷键来执 行:m键(git-mark-file)标记当前文件并且把光标下移一行;M键 (git-mark-all)来标记buffer中的所有文件。取消标记用键 u(git-unmark-file)或者DEL键(git-unmark-file-up),两个键的区别是, 第一个键在取消标记光标所在的文件之后往下移动一样,而后一个命令则往上移 动一行。 取消当前buffer中所有的选择标记通过命令git-unmark-all(M-DEL快 捷键)来实现。你还可以通过git-toggle-all-marks(T键)来反选你现在的选择 情况。

就像在PCL-CVS中, 用户可以通过命令git-find-file(回车键或者f)来打开当 前光标所在的文件。 用过v键(git-view-file)来查看文件。 如果你遇到冲突以 后, 可以通过 git-resolve-file(R键)来解决冲突。

你可以通过 git-add-file 命令(a键),或者 git-remove-file (r键)来像代 码库里面添加或者删除一个文件。 如果有的文件你已经不需要了,却不想这个删 除命令影响到代码库, 你可以把它们放在忽略文件列表中,通过 git-ingore-file(i键)来执行。 提交代码通过 c键(git-commit-file),回 滚(reverting)改变通过U键(git-revert-file)。 你可以通过l键 (git-log-file)来查看修改日志。

d键是和改变(diff)有关的所有命令的前缀。 他们中最重要的要数 git-diff-file 命令了,你可以功过=或者 d = 键来调用它。 命令 git-diff-file-base(键 d b)可以用列出当前文件和仓库中的文件的不同的地方。 命令 git-diff-file-idiff (键 d e)可以用emacs中的 idiff 来互动的查看改 变。而命令git-find-file-imerge (键 d E) 允许用户以互动的方式来合并代码。

其他的命令有查看那这个分支(branch)和主分支(main branch)差别 — git-diff-file-merge-head 命令(d h), 在文件合并之间的相关的版本 — git-diff-file-mine 命令(d m), 刷新git状态buffer的命令 git-refresh-status命令(g键),退出git状态buffer命令 git-status-quit (q),从列表中删除处理过的文件 git-remove-handled 命令 (x),详细的命 令请查看这个mode的帮助(C-h m)。

git-status 模式命令快捷键

M-x git-status
    进入git-status-mode,以下命令都是在git-status-mode中执行。
n
    git-next-file,下一个文件。
SPC
    git-next-file,下一个文件。
P
    git-prev-file,上一个文件。
m
    git-mark-file,标记(mark)当前文件。
M
    git-mark-all-files,标记(mark)所有文件。
u
    git-unmark-file,取消当前文件的标记(mark)并移动光标到下一行。
DEL
    git-unmark-file-up,取消当前文件的标记(mark)并移动光标到上一行。
M-DEL
    git-unmark-all,取消所有的标记(mark)。
T
    git-toggle-all-marks,反向标记(reverse mark)。
f
    git-find-file,打开当前光标所在的文件。
RET
    git-find-file,打开当前光标所在的文件。
v
    git-view-file,以只读方式打开当前光标所在的文件。
r
    git-resolve-file,解决冲突(resolove conflict)。
a
    git-add-file,添加文件到仓库(repository)。
r
    git-remove-file,从仓库(repository)中删除文件。
i
    git-ignore-file,忽略文件。
c
    git-commit-file,提交文件。
U
    git-revert-file,取消修改。
l
    git-log-file,查看文件历史。
=
    git-diff-file,查看当前修改。
d =
    git-diff-file,查看当前修改。
d b
    git-diff-file-base,这个不太明白,原文是find difference between current and base files,但是我不知道这个base file是指什么?
d e
    git-diff-file-idiff,交互式文件比较。
d E
    git-find-file-imerge,交互式的文件比较和merge。
d h
    git-diff-file-merge-head,查看修改并merge到main branch。
d m
    git-diff-file-mine,与上次的merge的文件比较修改。
g
    git-refresh-status,刷新当前的status buffer。
q
    git-status-quit,退出当前的status buffer。
x
    git-remove-handled,移除处理过的文件。
?
    git-help,查看帮助。
h
    git-help,查看帮助。