← 返回工具箱

Git 命令速查

GIT CHEAT SHEET · 参考速查

常用 Git 命令场景化速查:撤销、回滚、分支、变基、储藏、子模块等分类检索,一键复制即贴即用。

69 条
场景COMMAND说明
配置git config --global user.name "Name"设置全局提交者姓名
配置git config --global user.email "you@example.com"设置全局提交者邮箱
配置git config --global init.defaultBranch main新仓库默认分支改为 main
配置git config --global core.autocrlf input提交转 LF、检出不动(跨平台行尾)
配置git config --global alias.st "status -sb"配置别名(git st)
配置git config --list --show-origin查看全部配置及其来源文件
开始git init在当前目录初始化仓库
开始git clone <url> --depth 1浅克隆(只取最近一次提交,大仓库快)
开始git clone -b <branch> <url>克隆并直接检出指定分支
开始git status -sb精简状态(分支 + 变更列表)
开始git switch -c <new-branch>创建并切换到新分支(现代写法)
日常提交git add -p逐块暂存(拆分提交的好帮手)
日常提交git commit --amend --no-edit把改动并入上一次提交(未推送时)
日常提交git commit -m "feat: message"带约定的提交信息(Conventional Commits)
日常提交git restore <file>丢弃工作区改动(危险:不可恢复)
日常提交git restore --staged <file>把文件移出暂存区(保留改动)
日常提交git diff --staged查看已暂存但未提交的差异
日常提交git clean -fd删除未跟踪的文件与目录(危险)
日常提交git rm --cached <file>停止跟踪但保留本地文件(如误提交的 .env)
分支git branch -a列出本地与远程全部分支
分支git branch -m old new重命名分支
分支git branch -d <branch>删除已合并分支(-D 强制)
分支git switch <branch>切换分支(现代写法)
分支git worktree add ../hotfix hotfix工作树:并行检出另一分支到独立目录
分支git cherry-pick <sha>摘取单个提交到当前分支
合并 / 变基git merge --no-ff <branch>合并并保留合并节点
合并 / 变基git merge --abort放弃本次合并,回到合并前状态
合并 / 变基git rebase main把当前分支变基到 main(线性历史)
合并 / 变基git rebase --continue解决冲突后继续变基
合并 / 变基git rebase -i HEAD~3交互式变基:改序/合并/改写最近 3 个提交
合并 / 变基git rebase --onto main <sha>把一段提交整体搬到另一基底上
撤销 / 回滚git commit --amend修正最后一次提交(信息或内容)
撤销 / 回滚git reset --soft HEAD~1撤销提交、保留改动在暂存区
撤销 / 回滚git reset --hard HEAD~1撤销提交并丢弃改动(危险:不可恢复)
撤销 / 回滚git revert <sha>生成反向提交安全回滚(公共分支用这个)
撤销 / 回滚git reflog查看 HEAD 移动历史(找回"消失"的提交)
撤销 / 回滚git reset --hard <sha>整个分支硬回位到某次提交(危险)
撤销 / 回滚git checkout <sha> -- <file>从历史提交恢复单个文件
远程git remote -v查看远程仓库地址
远程git remote set-url origin <url>更换远程地址(换协议/搬家)
远程git fetch --prune拉取远程更新并清理已删除的远程分支引用
远程git push -u origin <branch>首次推送并建立跟踪关系
远程git push --force-with-lease安全强推(远程被别人动过会拒绝)
远程git push origin --delete <branch>删除远程分支
远程git pull --rebase以变基方式拉取(避免无谓合并节点)
储藏git stash push -m "wip: msg"带说明地储藏当前改动
储藏git stash list查看储藏列表
储藏git stash pop恢复最近一次储藏并删除该记录
储藏git stash apply stash@{2}恢复指定储藏但保留记录
储藏git stash -u储藏时包含未跟踪文件
标签git tag -a v1.2.0 -m "release"创建附注标签(发版用)
标签git push origin v1.2.0推送单个标签(push 默认不带标签)
标签git tag -d v1.2.0删除本地标签
标签git tag --sort=-creatordate按时间倒序列出标签
子模块git submodule add <url> <path>添加子模块
子模块git submodule update --init --recursive克隆后初始化全部子模块
子模块git submodule update --remote把子模块更新到其上游最新
子模块git clone --recurse-submodules <url>克隆时一并拉取子模块
查看历史git log --oneline --graph --all -20图形化总览最近提交
查看历史git log -p <file>查看单文件的逐次改动
查看历史git log --author="Name" --since="2 weeks ago"按作者与时间过滤历史
查看历史git blame -L 10,20 <file>逐行问责:10–20 行是谁改的
查看历史git show <sha>查看某次提交的完整改动
查看历史git shortlog -sn按提交数统计贡献者
疑难杂症git fsck --lost-found检查悬空对象(配合 reflog 找回数据)
疑难杂症git diff main...feature三点差异:从分叉点看 feature 的改动
疑难杂症git bisect start二分定位引入 bug 的提交
疑难杂症git update-index --assume-unchanged <file>临时忽略本地改动(本地配置类文件)
疑难杂症git ls-files | xargs rm && git checkout .工作区完全恢复到 HEAD(最后手段)
按场景与关键词过滤;标「危险」的命令不可逆,公共分支回滚优先 revert 而非 reset --hard / force push(必要时用 --force-with-lease)。

>_ 使用指南 · GUIDE

Git 的命令你天天用,但「撤销昨天的提交」「把一段提交搬到别的基底」「找回消失的 commit」这些低频操作每次都要现查。这份速查按场景组织:配置、开始、日常提交、分支、合并/变基、撤销/回滚、远程、储藏、标签、子模块、历史与疑难杂症,支持关键词 + 场景双重过滤,每条命令一键复制。

典型步骤:

  1. 按场景浏览:点场景标签聚焦一类操作,如排查回滚问题时切到「撤销 / 回滚」
  2. 关键词搜索:搜 reset、撤销、force 直接命中相关命令
  3. 复制即用:点行尾复制按钮,贴进终端稍改参数就能跑
  4. 留意危险标记:说明里标「不可恢复」的命令(reset --hard、clean -fd 等)执行前务必确认

>_ 常见问题 · FAQ

Q1 · git reset 和 git revert 怎么选?

revert 生成一个「反向提交」来抵消目标提交,历史只增不改,公共分支一律用它;reset 是把分支指针直接搬走,本地未推送的整理用它没问题,推过之后 reset + 强推会让协作者的历史错乱。一句话:改自己的历史用 reset,改公共历史用 revert。

Q2 · commit 信息写错了怎么改?

尚未推送:git commit --amend 直接改写最后一次提交(想保留原信息加 --no-edit)。已推送:amend 后需要强推,公共分支请评估改用一次说明性的 revert + 新提交。更早的提交用交互式变基 git rebase -i 把目标行改为 reword。

Q3 · git push --force 和 --force-with-lease 差在哪?

--force 无条件覆盖远程;--force-with-lease 先校验远程仍停在你本地上次见到的位置,若有人在你之后推送过则拒绝。几乎任何时候都该用后者——它只在「远程没有别人的新提交」时才允许覆盖。

Q4 · 提交不见了怎么找回?

分支指针动过但提交对象还在:git reflog 列出 HEAD 的移动历史,找到目标提交的 sha,git reset --hard <sha> 或建新分支指过去即可。reflog 默认保留约 90 天,配合 git fsck --lost-found 能救回绝大多数「事故现场」。

Q5 · 误把密钥提交进仓库怎么办?

先 git rm --cached <file> 停止跟踪并加入 .gitignore;但历史里仍有痕迹——私有仓库可考虑用 git filter-repo 清洗历史后强推,公开仓库或已泄露的密钥直接作废轮换,清洗历史不等于撤销泄露。

嵌入代码

把下面的代码复制到你的网页,即可将本工具嵌入为 iframe(自动隐藏导航与页脚)。

高度px
此工具在你的浏览器本地运行,输入内容不会上传。按 Ctrl K 可随时切换到其他工具。