ZZ — Git 速查表

0 阅读6分钟

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 initgit 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当前提交和上一条的差异

撤销决策表

先走决策流程,再查对应命令:

想撤销?
├─ 只改了工作区(没 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 pullfetch + 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 记录
删一条 stashgit 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 文件名逐行显示提交者和时间
二分找 buggit bisect start自动 halves 法定位问题提交
误删了没 add 的文件git clean -fd清除未跟踪文件(先 git clean -fdn 预览)

容易混淆的命令对比

对比区别
git reset vs git revertreset 是回退指针(改历史),revert 是新增一个反向提交(不改历史)
git merge vs git rebasemerge 保留分叉,rebase 把历史拉成一条线
git fetch vs git pullfetch 只下载,pull = fetch + merge
git restore vs git resetrestore 恢复文件内容,reset 恢复提交指针
git restore vs git checkout --功能一样,restore 是新版拆出来的,更明确
git branch -d vs git branch -D小写检查是否合并,大写强制删
git stash pop vs git stash applypop 恢复并删 stash,apply 只恢复不删
git reset --soft vs --mixed vs --hardsoft 只动 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 --mergedgrep -v mainxargs git branch -d`批量删已合并的本地分支

高级速查

命令白话
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月份就上大学了,相对他说, 大学里人生会打开新的一页,那里有更广阔的世界,也有更多要自己做主的时刻——学习、交友、选择、起起落落,都会一点点变成你自己的故事。

不必急着把一切都想明白。先把身体照顾好,把该做的事一件件做好,遇到不懂的就问,走错了就改。真正重要的,不是一开始就完美,而是愿意认真过每一天,并在跌倒后重新站起来。

愿你入学顺利,心有所向,脚踏实地,遇见好人,也成为更好的自己。