用了 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 界面:
| 按键 | 动作 |
|---|---|
s | Stage 当前文件 |
u | Unstage |
c c | 写提交信息(会打开编辑器) |
C-c C-c | 确认提交 |
3. 查看历史与 Diff#
| 按键 | 动作 |
|---|---|
l l | 查看 log |
d d | 查看 diff |
b b | 切换分支 |
P p | Push 到远程 |
F p | Pull 从远程 |
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 时间管理实战