跳过正文

Magit:Emacs 里的 Git 神器

·204 字·1 分钟
[你的名字]
作者
[你的名字]
用 Sony A7R2 记录光影,用 NixOS & Emacs 构建工作流,探索大模型与 Agent 的边界。
目录
Emacs 生态 - 这篇文章属于一个选集。
§ 2: 本文

用了 Magit 之后,我再也没有打开过终端里的 git log

Magit 可能是 Emacs 生态里最强大的 Git 客户端。它不是简单的命令封装,而是把整个 Git 工作流重新设计成了交互式界面。

安装
#

(use-package magit
  :ensure t
  :bind ("C-x g" . magit-status))

核心工作流
#

1. 查看仓库状态
#

C-x g 打开 magit-status 界面:

Head:     main Add series grouping
Merge:    origin/main Add series grouping

Untracked files (1)
  content/digital-life/magit-guide.md

Unstaged changes (2)
  modified   content/digital-life/emacs-config.md
  modified   content/digital-life/nixos-setup.md

所有信息一目了然,比 git status 直观十倍。

2. 提交代码
#

magit-status 界面:

按键动作
sStage 当前文件
uUnstage
c c写提交信息(会打开编辑器)
C-c C-c确认提交

3. 查看历史与 Diff
#

按键动作
l l查看 log
d d查看 diff
b b切换分支
P pPush 到远程
F pPull 从远程

4. 交互式 Rebase
#

这是 Magit 最 killer 的功能之一。r i 进入交互式 rebase,你可以:

  • 拖动提交改变顺序
  • 标记 squash、fixup、drop
  • 实时预览结果

完全不用记 git rebase -i 的复杂语法。

高级技巧
#

Blame 逐行追溯
#

;; 当前文件 blame
M-x magit-blame

直接在代码右侧显示每行最后修改的提交信息,悬浮可查看详情。

暂存部分修改
#

在 diff 区域按 TAB 展开文件,然后按 s 可以只 stage 当前 hunk,不需要 git add -p

快速 Commit & Push
#

;; 一键提交当前文件并 push
(defun my/magit-commit-and-push (message)
  (interactive "sCommit message: ")
  (magit-stage-modified)
  (magit-commit-create (list "-m" message))
  (magit-push-current-to-pushremote nil))

与其他工具的对比
#

工具启动速度交互体验Emacs 集成
终端 Git
Lazygit需切窗口
SourceTree一般
Magit中等极好原生

对于 Emacs 用户来说,Magit 的集成度是无解的——你正在编辑代码,一个按键就能完成完整的 Git 工作流,不需要切换上下文。


下一篇预告:Org-mode 时间管理实战

Emacs 生态 - 这篇文章属于一个选集。
§ 2: 本文