Contents

Magit的基本使用

Magit 的基本介绍

Magit是在emacs中对git的一种扩展, 它的本质是在emacs中, 利用emacs的方式调用git的命令, 使得git的使用更加地emacs化. 本人的emacs 能力有限, 因此只介绍magit中的一些最常用的命令, 方便日常使用够用即可. 要更加全面地研究可以看它的原网站.

Magit的基本介绍

打开Magit窗口:

使用Emacs打开任一由git管理的文件, 再使用快捷键 C-x g (M-x magit-status) 即可打开.

基本上第一次需要使用M-x magit-status打开, 后面才能用C-x g快捷键, 不知道是不是什么bug.

打开后会有一个窗口(这里我事先建好了一个 git 仓库)

分析下magit 窗口每部分的意思:

  • Head: 当前HEAD指向
  • Untracked files: 未追踪的文件 (也就是没使用 git add 命令添加的文件)
  • Unstaged changes: 由git管理, 进行了修改, 但未添加到暂存区的文件
  • Recent commits: 最近的提交记录, 第一列就是提交ID

如果常使用git, 以上解释应该一遍就能记住

常用的一些快捷键

  • g & G: g可以刷新当前buffer, G刷新全部buffer. 什么意思呢, 比如当前你在查看magit面板, 但是突发奇想往工程里添加了个文件, 这时magit面板的Untracked files里应该要多一个刚添加的文件的, 但是并没有, 此时需要按一下g, 这时这个新加的文件就会出现然Untracked files里了.

  • TAB: 折叠, 即如果光标在Untracked files这一行, 按TAB, 即可将UnTracked files这个小节给折叠起来, 工程文件多的时候这个功能十分管用. 下面是将Recent commits折叠后的结果.

  • C-p, C-n & M-p, M-n: C-p和C-n是上下移动, 与emacs移动相同. M-p和M-n是同级上下移动. 比如上面这个图, 如果光标在file这一行, 按M-n则会移动到new这一行, 如果光标在Untracked files这一行, 按M-n则会移动到Unstaged changes这一行.

  • d d: 查看diff, 将text.txt文件中的内容修改, 并将光标移动到Unstaged changes中的 modified text.txt 这一行, 按两下d, 即可弹出 diff 相关内容, 弹窗如下:

    这个弹窗分两部分, Unstaged changes部分是文件名以及其修改的总结. 它的下面是针对每个文件高亮修改的内容.

    可以清楚地看到改支的行以及改动的内容: 红删除, 蓝为添加行, 标红内容为删除内容, 标蓝内容为添加内容.

    一开始看可能有些不习惯, 但习惯后这个功能十分有用.

    此外, 如果在某一个提交行按 d d, 则会显示本次提交与前一次提交的diff

  • s & u: s可将文件添加到暂存区, u可将文件移出暂存区. 比如光标调整到new这个文件上, 按s后结果为:

    可以看到new这个文件从Untracked files移到了staged changes这个小节下.

    翻译成git的话就是 使用了 git add new 这个命令.

  • q: 退出当前buffer.

  • Enter: 到处都能用, 一个很好用的地方是, 在查看diff时, 在某一行按Enter, 它会直接跳到这个文件的这一行供你修改.

  • c: 提交弹窗, 如下:

此时按c, 即Commit (git commit -m), (通常直接按两下c), 这时会进入提交信息提示弹窗, 输入完提示信息后 再按C-c C-c 即可完成提交 (C-c C-k 放弃提交).

此时按a, 即 git commit --amend

  • l: log弹窗
  • r: rebase弹窗

可能看起来学习成本高, 但其实学会后好处要远远大于学习成本