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/* → develop → release → main |
| GitHub Flow | 只有 main + 短生命周期分支,PR 合并即部署,流程简单,适合持续部署的 Web 服务 | branch → PR → main → 部署 |
| 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 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 是义务 |