ToolAct工具行动

Git 速查表

最全 Git 命令参考手册,按分类整理,快速查找

全部: 65 个命令

基础命令(13)

git init

在当前目录创建新的 Git 仓库

git clone <url>

克隆远程仓库到本地

git clone --depth=1 <url>

浅克隆,只获取最近一次提交

git add <file>

将文件添加到暂存区

git add .

添加所有修改到暂存区

git commit -m "message"

提交暂存区的更改

git commit --amend

修改上一次提交

git status

查看仓库当前状态

git diff

查看未暂存的更改

git diff --staged

查看已暂存的更改

git config --list

查看所有配置

git config --global user.name "name"

设置全局用户名

git config --global user.email "email"

设置全局邮箱

分支管理(14)

git branch

列出所有本地分支

git branch -a

列出所有分支(含远程)

git branch <name>

创建新分支

git branch -d <name>

删除分支

git branch -m <old> <new>

重命名分支

git checkout <branch>

切换分支

git checkout -b <branch>

创建并切换到新分支

git switch <branch>

切换分支(Git 2.23+)

git switch -c <branch>

创建并切换到新分支(Git 2.23+)

git merge <branch>

合并指定分支到当前分支

git merge --no-ff <branch>

合并分支并创建合并提交

git rebase <branch>

变基当前分支到指定分支

git rebase --continue

解决冲突后继续变基

git cherry-pick <commit>

选择特定提交合并到当前分支

远程操作(10)

git remote -v

查看远程仓库信息

git remote add <name> <url>

添加远程仓库

git fetch <remote>

获取远程仓库最新内容

git fetch --all

获取所有远程仓库更新

git pull <remote> <branch>

拉取并合并远程分支

git pull --rebase

拉取并变基

git push <remote> <branch>

推送到远程仓库

git push -f

强制推送(谨慎使用)

git push -u origin <branch>

推送并设置上游分支

git push origin --delete <branch>

删除远程分支

撤销修改(8)

git reset <file>

取消暂存文件

git reset --soft HEAD~1

撤销最近一次提交,保留更改

git reset --mixed HEAD~1

撤销提交和暂存,保留工作区

git reset --hard HEAD~1

撤销提交并丢弃所有更改

git revert <commit>

撤销指定提交(创建新提交)

git restore <file>

恢复工作区文件(Git 2.23+)

git restore --staged <file>

取消暂存文件(Git 2.23+)

git clean -fd

删除未跟踪的文件和目录

标签管理(6)

git tag

列出所有标签

git tag <name>

创建轻量标签

git tag -a <name> -m "msg"

创建附注标签

git tag -d <name>

删除本地标签

git push origin <tag>

推送标签到远程

git push --tags

推送所有标签到远程

历史查看(7)

git log

查看提交历史

git log --oneline

简洁显示提交历史

git log --oneline --graph --all

图形化显示所有分支历史

git show <commit>

显示提交详情

git blame <file>

查看文件每行的修改历史

git reflog

查看所有操作历史

git bisect start

开始二分查找问题提交

储藏(7)

git stash

储藏当前更改

git stash save "message"

带消息储藏更改

git stash list

查看所有储藏

git stash pop

应用并删除最近的储藏

git stash apply

应用最近的储藏但不删除

git stash drop

删除最近的储藏

git stash clear

删除所有储藏

什么是 Git?

Git 速查表是按任务场景整理的版本控制命令参考,用来在忘记具体写法时快速查找。Git 本身是分布式版本控制系统:每个克隆都包含项目历史,分支是轻量指针,提交记录了代码库随时间发生的变化。速查表适合在你记得要做什么、但想不起完整命令时使用,比如查看暂存差异、创建分支、撤销提交、临时储藏改动、打标签发布、同步远程仓库等。它是参考资料,不替代对仓库状态的判断。reset --hard、clean -fd、rebase、force push 等破坏性或高风险命令,复制前必须确认未提交改动、当前分支和对远程协作的影响。

使用指南

快速参考

  1. 点击任意命令卡片即可复制命令
  2. 使用搜索框快速查找特定命令
  3. 点击分类标签按类型筛选
  4. 将光标移至命令上方即可查看详细说明

功能特点

按场景分类命令按基础操作、分支、远程、撤销、标签、历史记录和暂存分类,无需滚动整个列表即可快速查找。
搜索与筛选搜索框与分类按钮配合使用,快速缩小结果范围,特别适合只记得部分命令或描述时使用。
点击即复制点击命令卡片即可复制,然后根据需要替换分支名、文件路径或 commit hash。
风险提示撤销、重置和强制推送命令需确认影响范围,避免误删本地更改或覆盖共享历史记录。

进阶技巧

  • 使用 git restore --staged 取消暂存文件
  • 使用 git commit --amend 修改上一次提交
  • 使用 git stash 暂时保存工作进度
  • 使用 git revert 撤销已推送的提交

使用场景

在工作中快速找到需要的命令分类通过搜索或按基础操作、分支、远程、撤销、标签、历史记录和储藏分类筛选 Git 命令,无需翻阅长文或重新打开教程标签页即可看到正确的语法。每张卡片上的命令旁边已经附有简要说明,适合在记得工作流程但不确定具体参数时使用,比如区分 --force-with-lease 和 --force,或者了解 git restore 和 git reset 的差异。
一键复制带占位符的命令对 git checkout -b <branch>、git push -u origin <branch>、git log --oneline --graph --all 或 git restore --staged <file> 等命令使用一键复制,然后在终端中替换占位符。由于速查表在浏览器中运行,不会发送任何提交数据或分支名称,即使旁边有真实的哈希值、内部分支前缀或尚未推送的功能分支名称也可以放心使用。
在执行高风险命令前先查阅说明撤销分组集中了 reset、clean、restore 和 force-push 相关的操作流程,破坏性操作的意图一目了然。在运行 git reset --hard HEAD~3 或 git push --force 之前,用 git status 确认当前分支,用 git rev-parse --abbrev-ref --symbolic-full-name @{u} 确认远程跟踪状态,因为重写共享历史后队友无法自行恢复。
将分支、标签和储藏的命令片段保存为模板git switch -c feature/x、git tag -a v1.2 -m 和 git stash push -m 这类命令在各项目中会随着团队的分支或发版规范反复使用。复制一次到团队的入职文档、运维手册或 pre-commit hook 配置中,在 Git 行为变化时重新审视——例如当项目要求在受保护分支上用 --force-with-lease 替代普通的 --force 时。
用历史命令理解仓库而非重写它在执行 rebase 或 revert 之前,先运行 git log --oneline --graph --all、git blame -L 和 git diff <branch>... 来了解谁改了什么。先读一遍的代价远低于从一次失败的历史重写中恢复,特别是在 monorepo 中,一次跨功能分支的误操作 rebase 可能导致数十个进行中的 pull request 失效。

技术原理

Git 将每个项目状态存储为 .git/objects 中的内容寻址对象图,地址是 40 字符的 SHA-1 哈希值(自 Git 2.29 起可选择启用实验性的 SHA-256 对象格式)。共有四种对象类型:blob 存储原始文件字节,tree 将名称映射到 blob 和子树,commit 指向一个 tree 加上父提交和作者元数据,tag 是指向以上任何对象的签名指针。refs/heads/、refs/remotes/ 和 refs/tags/ 下的分支和标签只是包含 SHA 值的文本文件,HEAD 是一个指向当前分支的符号引用。

本地变更在三个区域之间流转:工作目录、索引(也称暂存区,存储在 .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),以避免覆盖队友的更新。