Git 常用命令 25 条 + 5 个保命撤销技巧 - 程序员每天都用到的
不是 200 条全收的命令大全。只列我自己一周内真的输了 N 次的 25 条,加 5 个事故现场救命撤销。看完直接拿去用。
Git 常用命令 25 条 + 5 个保命撤销技巧 - 程序员每天都用到的
我入行 8 年,Git 命令应该敲过 30 万次。但说实话日常真用的也就是固定那 20 多条,剩下的 95% 命令我都是"用的时候 Google 一下"。
这篇不堆 200 条全清单。我打开自己 .zsh_history 拉过去 6 个月所有 git 开头的命令,统计了一下,实际高频就 25 条。这篇就把这 25 条 + 5 个事故救命的撤销姿势讲清楚。
每天都用 (top 10)
git status # 看当前修改了什么、哪些文件还没 add
git diff # 看具体改了什么 (未 staged 部分)
git diff --cached # 看已经 add 但还没 commit 的部分
git add <file> # add 单个文件 (尽量不用 git add .)
git commit -m "feat: xxx" # 提交,m 后面带消息
git pull # 拉远端最新
git push # 推到远端
git log --oneline -20 # 看最近 20 条提交记录,一行一条
git checkout -b feat/new-thing # 新建分支并切过去
git branch # 看本地所有分支
git status 是我用得最多的命令,平均每个开发日 50 次以上。它就是 Git 的"我在哪",哪怕你已经知道答案也建议养成习惯每次操作前看一眼。
git diff 配合 git status 是 commit 前的 review。提交之前你应该完整看一遍 diff,确认没有把调试用的 console.log 一起提交进去。
分支管理 (top 11 到 18)
git checkout main # 切到 main 分支
git switch main # 同上,新版命令,推荐
git switch -c feat/xxx # 新建并切换,等价于 git checkout -b
git branch -d feat/old # 删本地分支(已合并的)
git branch -D feat/old # 强删本地分支(未合并的也删)
git push origin feat/xxx # 第一次推新分支到远端
git push -u origin feat/xxx # 推并建立 tracking
git fetch --all --prune # 拉所有远端分支信息,清理本地已删除的
switch 和 checkout 的关系: switch 是 Git 2.23 之后引入的新命令,专门做分支切换,语义更清晰。checkout 历史上被塞了太多功能 (切分支、检出文件、新建分支)。新代码推荐用 switch + restore 这一对。
--prune 是个好习惯。你的本地经常会残留一堆其实远端已经删掉的分支 tracking 信息,定期 fetch 时带 prune 清理,跑 git branch -r 看远端分支列表才不会眼花。
合并 / rebase (top 19 到 22)
git merge feat/xxx # 把 xxx 分支合并到当前分支
git rebase main # 把当前分支变基到 main 最新
git rebase -i HEAD~3 # 交互式 rebase 最近 3 个 commit (合并/改信息)
git cherry-pick <hash> # 把指定 commit 摘到当前分支
merge 和 rebase 哪个好,网上能吵 100 楼。我自己的实践:
- 公共分支 (main, develop): 严禁 rebase,只能 merge
- 个人 feature 分支: rebase 让历史更线性,review 的人看得舒服
- PR 合并到 main: 用 squash merge,一个 feature 一个 commit
rebase -i HEAD~3 是必须掌握的技能。提交之前合并几个"修复 typo""调样式""加注释"的小提交,让历史干净。一个 PR 留 1 到 3 个有意义的 commit,而不是 20 个零碎修改。
stash 和 reset (top 23 到 25)
git stash # 临时存起当前未提交修改
git stash pop # 取回最近一次 stash
git reset HEAD <file> # 把 add 进去的文件取消 add (回到 working tree)
stash 的典型场景: 你在 feature/a 上写到一半,产品突然说有个 main 的 bug 要紧急修。这时候你不能直接切分支 (会带着未提交的修改),做法是:
git stash
git switch main
# 修 bug, commit, push
git switch feat/a
git stash pop
刚刚的修改完整回来,继续干活。
5 个保命撤销技巧
事故现场,深呼吸,按下面操作。
1. 刚 commit 完发现写错了消息
git commit --amend -m "正确的消息"
注意: 只能改还没 push 的 commit。已 push 的不要 amend。
2. 刚 commit 完发现少加了一个文件
git add <missing-file>
git commit --amend --no-edit
--no-edit 表示用原来的消息,把刚才落下的文件并到上一个 commit 里。
3. 误删了一个本地分支
git reflog # 找到删除前最后一个 commit 的 hash
git checkout -b feat/recovered <hash>
reflog 是 Git 的后悔药,记录了你本地所有 HEAD 变动。30 天内删过的东西都能找回。
4. git reset --hard 误删了本地未提交修改
这个最惨,因为未提交的修改 reflog 也救不回。正确预防: 危险操作前先 git stash 一下,等于自动备份。
如果真的丢了,试试:
git fsck --lost-found
可能能找回被悬空的 blob 对象,然后挑出来。但需要你认得自己代码长什么样。
5. push --force 覆盖了同事的提交
下次记住用:
git push --force-with-lease
这个加了一道防线: 如果远端在你 fetch 之后又被别人推了新 commit,这条命令会拒绝你强推。比 --force 安全 10 倍。
配置一个好用的 alias
我 .gitconfig 里这几条 alias 用了 5 年:
[alias]
s = status
co = checkout
sw = switch
br = branch
cm = commit -m
lg = log --oneline --graph --decorate -20
last = log -1 HEAD
unstage = reset HEAD --
之后你敲 git s 就是 git status,git lg 一行带分支图看最近 20 条。手指头能省不少。
想要更全的 cheatsheet 收藏
这 25 条是我个人高频。但实际项目里你总会遇到边缘情况 (submodule、worktree、bisect)。我把这些都整理到了 git-cheatsheet,浏览器加书签随时翻。
如果你也用 Docker,docker-cheatsheet 同样列了我每天用的 30 多条容器命令。Vim 党可以收 vim-cheatsheet,Bash 党收 bash-cheatsheet。
一句话总结
Git 不需要背 200 条命令。25 条够你跑完 95% 的日常,5 个撤销姿势够你在出事时不慌。
git-cheatsheet 放在 Chrome 书签栏第一格,下次出事打开就在。
Made by Toolora · Updated 2026-05-26