Git 速查表
最全 Git 命令参考手册,按分类整理,快速查找
基础命令(13)
在当前目录创建新的 Git 仓库
克隆远程仓库到本地
浅克隆,只获取最近一次提交
将文件添加到暂存区
添加所有修改到暂存区
提交暂存区的更改
修改上一次提交
查看仓库当前状态
查看未暂存的更改
查看已暂存的更改
查看所有配置
设置全局用户名
设置全局邮箱
分支管理(14)
列出所有本地分支
列出所有分支(含远程)
创建新分支
删除分支
重命名分支
切换分支
创建并切换到新分支
切换分支(Git 2.23+)
创建并切换到新分支(Git 2.23+)
合并指定分支到当前分支
合并分支并创建合并提交
变基当前分支到指定分支
解决冲突后继续变基
选择特定提交合并到当前分支
远程操作(10)
查看远程仓库信息
添加远程仓库
获取远程仓库最新内容
获取所有远程仓库更新
拉取并合并远程分支
拉取并变基
推送到远程仓库
强制推送(谨慎使用)
推送并设置上游分支
删除远程分支
撤销修改(8)
取消暂存文件
撤销最近一次提交,保留更改
撤销提交和暂存,保留工作区
撤销提交并丢弃所有更改
撤销指定提交(创建新提交)
恢复工作区文件(Git 2.23+)
取消暂存文件(Git 2.23+)
删除未跟踪的文件和目录
标签管理(6)
列出所有标签
创建轻量标签
创建附注标签
删除本地标签
推送标签到远程
推送所有标签到远程
历史查看(7)
查看提交历史
简洁显示提交历史
图形化显示所有分支历史
显示提交详情
查看文件每行的修改历史
查看所有操作历史
开始二分查找问题提交
储藏(7)
储藏当前更改
带消息储藏更改
查看所有储藏
应用并删除最近的储藏
应用最近的储藏但不删除
删除最近的储藏
删除所有储藏
什么是 Git?
Git 速查表是按任务场景整理的版本控制命令参考,用来在忘记具体写法时快速查找。Git 本身是分布式版本控制系统:每个克隆都包含项目历史,分支是轻量指针,提交记录了代码库随时间发生的变化。速查表适合在你记得要做什么、但想不起完整命令时使用,比如查看暂存差异、创建分支、撤销提交、临时储藏改动、打标签发布、同步远程仓库等。它是参考资料,不替代对仓库状态的判断。reset --hard、clean -fd、rebase、force push 等破坏性或高风险命令,复制前必须确认未提交改动、当前分支和对远程协作的影响。
使用指南
快速参考
- 点击任意命令卡片即可复制命令
- 使用搜索框快速查找特定命令
- 点击分类标签按类型筛选
- 将光标移至命令上方即可查看详细说明
功能特点
进阶技巧
- 使用 git restore --staged 取消暂存文件
- 使用 git commit --amend 修改上一次提交
- 使用 git stash 暂时保存工作进度
- 使用 git revert 撤销已推送的提交
使用场景
技术原理
本地变更在三个区域之间流转:工作目录、索引(也称暂存区,存储在 .git/index 中)和对象数据库。git add 将 blob 哈希记录到索引中,git commit 将索引冻结为新的 tree 和 commit 对象,git checkout/switch 将索引和工作树更新到目标提交。合并分为两类:快进合并(fast-forward)在目标是直接后代时仅推进分支指针,而三方合并(recursive 或 ort 策略)计算公共祖先并构建带有两个父提交的合并提交。git rebase 通过逐一将提交重放到新基底上来改写历史,产生新的 SHA 值。
远程同步通过 HTTPS 智能协议、SSH 或已弃用的 git:// 协议运行,交换由增量压缩生成的包文件。fetch 之后,Git 将快照存储在 refs/remotes/origin/* 下,.git/logs/ 中的 reflog 默认保留 90 天的撤销轨迹(gc.reflogExpire),因此即使执行了 reset --hard 或错误的 rebase,也可以在垃圾回收清除不可达对象之前恢复。
- 对象模型:blob、tree、commit、tag——通过 SHA-1(或自 2.29 起的 SHA-256)进行内容寻址,松散存储在 .git/objects/xx/ 下或打包在 .git/objects/pack/*.pack 中
- 索引/暂存区:.git/index 是一个二进制文件,映射路径到 blob 哈希和 stat 信息;git add 更新它,git commit 将其冻结为 tree
- 引用和 HEAD:refs/heads/<branch>、refs/remotes/<remote>/<branch>、refs/tags/<tag> 是包含 SHA 值的纯文件;HEAD 是指向当前分支的符号引用
- 合并策略:目标是后代时使用快进合并,否则使用三方递归/orf 合并(基于合并基底);--no-ff 强制创建合并提交
- Rebase 改写:git rebase 将提交重放到新基底上产生新的 SHA 值,推送后会破坏共享历史——因此推荐使用 --force-with-lease 而非 --force
- Reflog 恢复:.git/logs/HEAD 和每个引用的日志保留引用变动 90 天(gc.reflogExpire);git reflog 配合 git reset 可在破坏性操作后恢复
- 传输:智能 HTTPS、SSH 或 git:// 通过 upload-pack/receive-pack 协议协商包文件;浅克隆使用 --depth 限制历史深度
示例
创建并切换到新分支
git checkout -b feature/login # 创建并切换到新分支撤销工作区修改
git restore filename # 将文件恢复到最近一次提交的状态查看提交历史
git log --oneline --graph --all # 以图形方式展示所有分支的历史常见问题
怎么撤销最近一次提交?
git reset --soft HEAD~1 会保留改动并停留在暂存区,方便重新提交;git reset --mixed HEAD~1 会保留改动到工作区但取消暂存;git reset --hard HEAD~1 会直接丢弃改动。如果该提交已经推送,请改用 git revert HEAD,它会生成一个新的提交来抵消变更,而不会重写历史。
git pull 和 git fetch 有什么区别?
git fetch 只是把远程的提交下载到本地引用中,不会动当前分支。git pull 相当于 git fetch + git merge(设置了 --rebase 时是 git rebase)。如果想在合并前先查看上游变更,请使用 fetch。
怎么丢弃一个文件的本地改动?
git restore <file> 会丢弃工作区中尚未提交的修改;git restore --staged <file> 会取消暂存但保留内容;git checkout HEAD -- <file> 会恢复到最近一次提交时的版本。对于未跟踪的文件,使用 git clean -f,加 -fd 还能删除目录。
什么时候用 rebase,什么时候用 merge?
在合并前希望让自己的私有特性分支保持线性历史时使用 rebase;在合并多人协作分支、希望保留真实开发历史时使用 merge。已经推送到共享分支的提交除非所有人都同意,否则永远不要 rebase——它会重写 SHA,破坏其他人的克隆。
怎么查看即将推送的内容?
git log @{u}.. 列出本地分支上还没推送到上游的提交,git diff @{u} 查看合并后的差异;fetch 之后 git status 也会显示与 origin 的领先/落后数。
怎么找回被删除的分支或丢失的提交?
git reflog 列出 HEAD 出现过的所有位置;找到丢失提交的 SHA 后,用 git checkout <sha> 或 git branch <name> <sha> 恢复。reflog 默认保留约 90 天才会被垃圾回收,所以发现失误后要尽快处理。
修改提交最安全的做法是什么?
git commit --amend 可以修改最近一次提交的信息或追加遗漏的文件。它会重写 SHA,所以只能用在尚未推送的本地提交上。如果不得不修改已推送的提交,用 --force-with-lease 推送(不要用 --force),以避免覆盖队友的更新。