ZZ --- Git 速查表
速查卡片,一图胜千言 ------ 忘了命令怎么用?翻这里。

三棵树

操作对照

reset 三种模式

rebase vs merge
三棵树模型(一句话版)
| 树 | 是什么 | 类比 |
|---|---|---|
| 工作区 | 你能直接看到的文件夹 | 桌面 |
| 暂存区(index) | git add 之后、还没提交的东西 |
购物车 |
| 仓库(HEAD) | git commit 之后的快照 |
已下单的记录 |
初始设置(3 条命令)
| 命令 | 干什么 |
|---|---|
git config --global user.name "你的名字" |
告诉 Git 你是谁 |
git config --global user.email "你的邮箱" |
告诉 Git 你的邮箱 |
git init 或 git clone 地址 |
创建仓库:从零开始 or 从远程拉 |
日常命令速查(按场景分组)
我刚改了代码,想提交
| 步骤 | 命令 | 白话 |
|---|---|---|
| 看看改了啥 | git status |
哪些文件动了、哪些还没 add |
| 看具体改动 | git diff |
工作区和暂存区的差异 |
| 挑文件放进购物车 | git add 文件名 |
把指定文件加到暂存区 |
| 全部放进购物车 | git add . |
当前目录下所有改动一起加 |
| 提交 | git commit -m "说明" |
把购物车结账,变成一条记录 |
| 改完再补一句 | git commit --amend -m "新说明" |
修改最近一次提交的说明 |
我想看历史
| 命令 | 白话 |
|---|---|
git log --oneline |
每条提交一行,简洁 |
git log --oneline --graph |
带分支图的提交历史 |
git log -5 |
只看最近 5 条 |
git diff HEAD~1 |
当前提交和上一条的差异 |
撤销决策表
先走决策流程,再查对应命令:
text
想撤销?
├─ 只改了工作区(没 add)? → git restore 文件名
├─ 已经 add 了(没 commit)?
│ ├─ 想保留改动? → git restore --staged 文件名(取消暂存,文件还在)
│ └─ 不想要了? → git restore --staged 文件名 && git restore 文件名
├─ 已经 commit 了(没推送)? → git reset --soft HEAD~1(撤销提交,改动还在暂存区)
│ ├─ 想改完重新提交? → git reset --soft HEAD~1
│ └─ 彻底不要? → git reset --hard HEAD~1(危险!改动全丢)
└─ 已经推送了? → git revert 哈希(生成一条新提交来抵消,安全)
| 命令 | 撤销什么 | 改动还在吗 | 安全等级 |
|---|---|---|---|
git restore 文件 |
工作区改动 | 不在了 | 安全 |
git restore --staged 文件 |
暂存(取消 add) | 在,回到工作区 | 安全 |
git reset --soft HEAD~1 |
最近一次提交 | 在,回到暂存区 | 较安全 |
git reset --mixed HEAD~1 |
最近一次提交 | 在,回到工作区 | 较安全 |
git reset --hard HEAD~1 |
最近一次提交 | 全没了 | 危险 |
git revert 哈希 |
指定提交 | 抵消掉,但历史保留 | 最安全 |
分支操作速查
| 场景 | 命令 | 白话 |
|---|---|---|
| 看所有分支 | git branch -a |
列出本地和远程分支 |
| 新建分支 | git branch 分支名 |
只创建,不切换 |
| 切换分支 | git switch 分支名 |
跳过去 |
| 新建+切换 | git switch -c 分支名 |
一步到位 |
| 合并分支 | git merge 分支名 |
把目标分支合到当前分支 |
| 变基 | git rebase 分支名 |
把当前分支嫁接到目标分支后面 |
| 删本地分支 | git branch -d 分支名 |
删已经合并的分支 |
| 强删本地分支 | git branch -D 分支名 |
不管合没合并都删 |
| 摘一个提交 | git cherry-pick 哈希 |
只拿某一条提交过来 |
merge vs rebase 一句话
merge:保留完整历史,会产生一个合并提交rebase:历史更干净,但会改写提交哈希(别在公共分支上用!)
远程操作速查
| 场景 | 命令 | 白话 |
|---|---|---|
| 看远程地址 | git remote -v |
查看关联的远程仓库 |
| 添加远程 | git remote add origin 地址 |
给远程仓库起个名 |
| 拉取远程信息 | git fetch |
只下载,不改工作区 |
| 拉取+合并 | git pull |
fetch + merge,一把梭 |
| 推送 | git push |
把本地提交推上去 |
| 首次推送 | git push -u origin 分支名 |
推并设置上游跟踪 |
| 强推(安全版) | git push --force-with-lease |
强推但有确认,比 --force 安全 |
临时保存速查
| 场景 | 命令 | 白话 |
|---|---|---|
| 临时存起来 | git stash |
工作区和暂存区改动先藏起来 |
| 带说明存 | git stash push -m "说明" |
给这堆改动起个名 |
| 看藏了什么 | git stash list |
列出所有 stash |
| 拿回来 | git stash pop |
恢复最近一条并删除 |
| 拿回来但保留 | git stash apply |
恢复但不删 stash 记录 |
| 删一条 stash | git stash drop |
删最近一条 stash |
标签
| 命令 | 白话 |
|---|---|
git tag v1.0 |
给当前提交打轻量标签 |
git tag -a v1.0 -m "说明" |
打附注标签(带说明的) |
git tag |
列出所有标签 |
git push origin v1.0 |
把标签推到远程 |
紧急情况速查
| 紧急场景 | 命令 | 白话 |
|---|---|---|
| 搞崩了想找回去 | git reflog |
查所有 HEAD 移动记录,找到哈希就能恢复 |
| 恢复到某条记录 | git reset --hard 哈希 |
配合 reflog 用,回到那个状态 |
| 哪行代码谁写的 | git blame 文件名 |
逐行显示提交者和时间 |
| 二分找 bug | git bisect start |
自动 halves 法定位问题提交 |
| 误删了没 add 的文件 | git clean -fd |
清除未跟踪文件(先 git clean -fdn 预览) |
容易混淆的命令对比
| 对比 | 区别 |
|---|---|
git reset vs git revert |
reset 是回退指针(改历史),revert 是新增一个反向提交(不改历史) |
git merge vs git rebase |
merge 保留分叉,rebase 把历史拉成一条线 |
git fetch vs git pull |
fetch 只下载,pull = fetch + merge |
git restore vs git reset |
restore 恢复文件内容,reset 恢复提交指针 |
git restore vs git checkout -- |
功能一样,restore 是新版拆出来的,更明确 |
git branch -d vs git branch -D |
小写检查是否合并,大写强制删 |
git stash pop vs git stash apply |
pop 恢复并删 stash,apply 只恢复不删 |
git reset --soft vs --mixed vs --hard |
soft 只动 HEAD,mixed 动 HEAD+暂存区,hard 全动 |
取证与调试速查
| 命令 | 白话 |
|---|---|
git reflog |
所有操作的时间线,救命神器 |
git bisect start/end/good/bad |
二分法找 bug,自动帮你定位是哪个提交引入的 |
git blame 文件名 |
看每一行是谁在哪个提交写的 |
git log --all --oneline --graph |
全局提交图,一目了然 |
git show 哈希 |
查看某个提交的详细改动 |
清理速查
| 命令 | 白话 |
|---|---|
git clean -fdn |
预览:哪些未跟踪文件会被删(干跑不删) |
git clean -fd |
真删:清除未跟踪的文件和目录 |
git gc |
垃圾回收,压缩仓库体积 |
git prune |
删掉不可达的对象 |
| `git branch --merged | grep -v main |
高级速查
| 命令 | 白话 |
|---|---|
git worktree add ../新路径 分支名 |
同一仓库同时检出多个分支到不同目录 |
git worktree list |
看当前有哪些 worktree |
git worktree remove 路径 |
删掉一个 worktree |
.git/hooks/ 里的脚本 |
提交前自动跑检查(pre-commit 等) |
git commit --amend |
改最近一次提交(内容或说明) |
git rebase -i HEAD~3 |
交互式整理最近 3 条提交(合并、改顺序、改说明) |
以 git 2.43.0 验证。演示身份:
Ada Example <ada@example.com>。参考资料:Pro Git 中文 | Git 文档 | 术语
写在最后:
这个课程是专门写给外甥的, 他今年9月份就上大学了,相对他说, 大学里人生会打开新的一页,那里有更广阔的世界,也有更多要自己做主的时刻------学习、交友、选择、起起落落,都会一点点变成你自己的故事。
不必急着把一切都想明白。先把身体照顾好,把该做的事一件件做好,遇到不懂的就问,走错了就改。真正重要的,不是一开始就完美,而是愿意认真过每一天,并在跌倒后重新站起来。
愿你入学顺利,心有所向,脚踏实地,遇见好人,也成为更好的自己。