GIT · 版本控制 / 团队协作

Git 命令速查

从初始化仓库到分支变基、历史改写、Hooks 进阶到团队工作流与危险操作红线,团队协作中最常用的 38 条 Git 命令、6 步协作剧本与 5 条危险红线一张表收齐,随查随用。

49条速查 10大场景 持续更新

📖 速查表

点击展开各小节

📋 基础操作
命令说明示例
git init 在当前目录初始化一个新的 Git 仓库,创建 .git 子目录 git init
git init my-project
git clone 克隆远程仓库到本地,默认创建与仓库同名的目录 git clone https://github.com/user/repo.git
git clone --depth=1 repo.git 浅克隆
git add 将工作区的修改添加到暂存区(Staging Area),准备提交 git add .
git add src/main.js
git add -p 交互式
git commit 将暂存区的修改提交到本地仓库,生成一个快照 git commit -m "feat: add login"
git commit --amend 修改上次提交
git push 将本地分支的提交推送到远程仓库 git push origin main
git push --force-with-lease 安全强制推送
git pull 从远程仓库拉取最新代码并合并到当前分支
等价于 git fetch + git merge
git pull origin main
git pull --rebase 变基拉取
🌿 分支与合并
命令说明示例
git branch 列出、创建或删除分支。当前分支前有 * 标记 git branch
git branch feature-x
git branch -d old-branch
git merge 将指定分支合并到当前分支,生成一个合并提交 git merge feature-x
git merge --no-ff feature-x 禁止快进
git rebase 将当前分支的提交「移植」到另一个分支的顶端,历史更线性 git rebase main
git rebase -i HEAD~3 交互式变基
git cherry-pick 将某个或某几个提交的更改应用到当前分支(精选移植) git cherry-pick abc123
git cherry-pick abc123..def456
🔄 暂存与回退
命令说明示例
git stash 临时保存工作区和暂存区的修改,恢复到干净的 HEAD 状态 git stash push -m "wip"
git stash pop
git stash list
git reset 撤销提交或修改。--soft 保留工作区,--hard 完全丢弃 git reset HEAD~1
git reset --hard abc123
git reset --soft HEAD~1
git reflog 查看 HEAD 的移动历史,是数据恢复的最后一道防线 git reflog
git reset HEAD@{2}
🔍 检查与调试
命令说明示例
git log 查看提交历史,支持丰富的格式化输出 git log --oneline --graph
git log --author="john"
git diff 比较工作区、暂存区、提交之间的差异 git diff
git diff --staged
git diff HEAD~2 HEAD
git blame 逐行显示文件的每一行是谁在什么时候修改的 git blame src/index.js
git bisect 二分查找引入 Bug 的提交,标记 good/bad 自动缩小范围 git bisect start
git bisect bad
git bisect good v1.0
🏷️ 标签与工作树
命令说明示例
git tag 为某个提交打标签,常用于标记版本号(v1.0.0) git tag v1.0.0
git tag -a v1.0.0 -m "Release 1.0"
git push origin --tags
git worktree 允许在同一个仓库中同时检出多个分支到不同目录 git worktree add ../hotfix hotfix-branch
git worktree list
🧩 变基与历史改写
命令说明示例
git rebase -i 交互式变基:对提交执行 reword(改信息)、squash(合并保留信息)、fixup(合并丢弃信息)、drop(删除提交)等操作 git rebase -i HEAD~5 交互式
git rebase --onto 把一段提交序列移植到全新的基点分支,适合摘除中间提交、切换基底 git rebase --onto main dev~2 dev
git cherry-pick 精选移植:把其他分支的一个或多个提交复制到当前分支,常用于热修复同步到多版本 git cherry-pick abc123
git cherry-pick -x abc123 注明来源
git commit --amend 修补上一次提交:追加遗漏改动或修改提交信息,已推送的提交慎用 git commit --amend --no-edit
git commit --amend -m "新信息"
git commit --fixup 创建标记目标提交的「修复」提交,配合 --autosquash 变基时自动归位合并 git commit --fixup abc123
git rebase -i --autosquash main
git push --force 改写历史(amend / rebase)后推送的唯一方式;只许在自己的私有分支上用,共享分支根本不该走到这一步 git push --force-with-lease 安全替代裸 force
🪝 Hooks 与进阶
命令说明示例
pre-commit 等钩子 Git 钩子脚本:pre-commit 提交前跑 lint/格式化,commit-msg 校验提交信息格式,pre-push 推送前执行检查,失败则中断操作 .git/hooks/pre-commit
husky + lint-staged + commitlint
git worktree 多分支并行检出:同一仓库不同目录各检出一个分支,修线上 Bug 不必打断当前开发 git worktree add ../hotfix hotfix
git worktree remove ../hotfix
git submodule 在仓库中引用另一个仓库并固定其某个提交,适合公共组件、三方库管理 git submodule add <url> libs/common
git submodule update --init --recursive
git bisect 二分查找引入 Bug 的提交,标记 good/bad 自动缩小范围,结束后重置回原分支 git bisect start
git bisect good v1.0 / git bisect bad
git bisect reset
git blame -L 只查看指定行范围的逐行归属,快速定位某段代码的作者与来源提交 git blame -L 10,20 src/App.java
git reflog 记录 HEAD 的全部移动轨迹,reset/rebase「丢」的提交都能从这里找回 git reflog
git reset --hard HEAD@{2} 找回提交
git gc 垃圾回收与对象打包压缩,清理松散对象和不可达引用,给仓库瘦身 git gc
git gc --prune=now --aggressive
🌊 团队工作流
命令说明示例
Git Flow main/develop + feature/release/hotfix 多分支模型,分支多但隔离清晰,适合按版本发布的项目 feature/*developreleasemain
GitHub Flow 只有 main + 短生命周期分支,PR 合并即部署,流程简单,适合持续部署的 Web 服务 branchPRmain → 部署
Trunk Based 全员小步提交主干 + 存活不到一天的短分支,强依赖 CI/CD 与特性开关,合并冲突最小 main + 短分支 Feature Flag
小步 PR 一个 PR 只做一件事、控制在几百行 diff 内,审查更快、问题更好定位、回滚更容易 git switch -c feat/login-form 单一职责
PR 描述模板 要素齐全审查事半功倍:背景动机、改动点清单、影响范围、自测结果、关联 Issue .github/PULL_REQUEST_TEMPLATE.md
自我 Review 提 PR 前先以审查者视角过一遍自己的 diff:命名、边界、调试代码、敏感信息逐一检查 git diff main...HEAD 先自审再提审
🧑‍🤝‍🧑 多人协作剧本
以一条功能分支 feat/user-profile 的完整生命周期为例,六步走完从拉分支到合并清理的全流程,每一步都有对应命令,照做即可不掉队。
步骤要点命令
① 拉新分支 从最新 main 拉出功能分支,名字见名知义,一个分支只做一件事 git switch -c feat/user-profile
② 每日同步主干 开工先把远端主干变基进来,冲突当天消化、不攒到 Review 时 git fetch origin
git rebase origin/main 当天冲突当天解
③ 小步提交推送 一个提交只做一件事,随手推送备份,Review 也能逐条看 git commit -m "feat: add profile page"
git push -u origin feat/user-profile
④ 开 PR 请 Review PR 描述写清动机、影响范围与自测结果,再指派同事审查 gh pr create --fill GitHub CLI
⑤ 冲突处理 主干有更新或 Review 有修改时:先变基拿到最新基线,冲突解完逐个 --continue 走完剩余提交 git rebase origin/main
git add . && git rebase --continue 先变基再解
⑥ 合并后删分支 合并进主干后本地、远端一起清理,仓库不留僵尸分支 git branch -d feat/user-profile
git push origin --delete feat/user-profile
Git 分支工作流
功能分支从 main 拉出,开发完合回主干,发布打 tag 可随时回滚
⚠️ 危险操作黑名单
这些操作轻则污染队友的本地仓库、重则永久丢代码:能不用就不用,必须用时先看右列的安全替代,别在共享分支上赌运气。
危险操作风险安全做法
git push --force 直接覆盖远端历史,队友基于旧历史的新提交会被一并抹掉,且不留痕迹 git push --force-with-lease 远端有新提交时自动拒绝
git filter-branch 重写全仓库历史:速度慢、坑多,改完后所有协作者本地仓库全部错乱 git filter-repo 官方推荐的替代品
对共享分支 rebase 已推送的提交被改写,他人 pull 后出现重复提交、幽灵冲突,历史无法对齐 只 rebase 私有分支;共享分支用 git merge 已推送 = 已共享
git reset --hard 未推送的提交和工作区修改瞬间蒸发,没有远端副本就真的找不回来 执行前先 git branch backup-$(date +%s) 留个后悔药
git clean -fd 连未跟踪目录一起删,本地配置、临时脚本、未提交的产物一并消失 git clean -nd 预览清单再执行 dry-run 是义务