Git 全命令超级详细指南
Git 作为当下最流行的分布式版本控制系统,包含了 150 多个命令。本文以分类场景 和完整示例为线索,为你系统梳理从入门到精通的所有核心 Git 操作。
第一部分:配置与仓库管理
1.1 git config ------ Git 配置管理
git config 用于管理 Git 的三层配置:系统级 (--system)、全局级 (--global) 和仓库级(不加选项)。
bash
# 设置全局用户名和邮箱(最基础,每次提交都会用到)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# 查看所有配置
git config --list
# 查看某单项配置
git config user.name
# 仓库级配置(优先级高于全局,在当前仓库目录执行)
git config user.name "Project Maintainer"
git config user.email "maintainer@project.com"
设置别名提高效率:
bash
# 设置常用别名
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.unstage 'reset HEAD --'
# 设置更复杂的别名
git config --global alias.graph "log --graph --oneline --all"
# 设置默认编辑器
git config --global core.editor vim
1.2 git init ------ 初始化仓库
在当前目录创建一个新的 .git 子目录,包含所有仓库元数据。
bash
# 在当前目录初始化 Git 仓库
git init
# 指定目录初始化
git init my-project
# 初始化一个空的裸仓库(常用于远程中心仓库)
git init --bare my-project.git
1.3 git clone ------ 克隆远程仓库
将远程仓库完整复制到本地,包含所有文件和历史记录。
bash
# 基本克隆
git clone https://github.com/user/repo.git
# 克隆到指定目录
git clone https://github.com/user/repo.git my-folder
# 克隆指定分支
git clone -b develop https://github.com/user/repo.git
# 浅克隆(只拉取最近一次提交,节省时间)
git clone --depth 1 https://github.com/user/repo.git
# 克隆所有子模块
git clone --recursive https://github.com/user/repo.git
# 通过 SSH 克隆(需要配置 SSH 密钥)
git clone git@github.com:user/repo.git
第二部分:核心快照操作(日常开发核心)
2.1 git add ------ 将改动加入暂存区
将工作区的修改添加到暂存区(Index),准备下一次提交。
bash
# 添加单个文件
git add file.txt
# 添加当前目录下所有变更(新增、修改、删除)
git add .
# 添加整个目录
git add src/
# 只添加已跟踪文件的修改(不添加新文件)
git add -u
# 添加所有变更(相当于 `git add .` + `git add -u`)
git add -A
# 交互式添加(可选择性地暂存文件的部分修改)
git add -i
# 添加所有 `.js` 文件
git add *.js
2.2 git commit ------ 提交到本地仓库
将暂存区的内容固化为一个提交对象。
bash
# 基本提交(会打开编辑器写提交信息)
git commit
# 提交并直接写信息(推荐)
git commit -m "fix: 修复登录页面显示问题"
# 跳过暂存区,直接提交已跟踪文件的修改
git commit -am "update: 优化性能"
# 修改最近一次提交信息(未推送时使用)
git commit --amend -m "修正提交信息"
# 向最近一次提交追加文件(不改信息)
git add forgotten.txt
git commit --amend --no-edit
2.3 git status ------ 查看工作区状态
查看工作区和暂存区的文件状态。
bash
# 标准输出(详细)
git status
# 简洁模式(每行一个文件,用字母标识状态:A=新增,M=修改,D=删除,?=未跟踪)
git status -s
# 输出简短信息
git status -b
输出解读:
- 红色:修改在工作区,未暂存
- 绿色:修改已暂存,等待提交
- 无颜色/不在列表:文件已提交,与版本库一致
第三部分:分支管理
3.1 git branch ------ 分支操作
创建、列出、删除和重命名分支。
bash
# 查看本地分支(* 表示当前分支)
git branch
# 查看所有分支(含远程)
git branch -a
# 查看远程分支
git branch -r
# 创建新分支
git branch feature-login
# 删除已合并的分支
git branch -d feature-login
# 强制删除未合并的分支
git branch -D feature-login
# 重命名分支
git branch -m old-name new-name
# 查看分支最后一次提交
git branch -v
# 查看已合并到当前分支的分支
git branch --merged
# 查看未合并的分支
git branch --no-merged
3.2 git checkout / git switch ------ 切换分支
switch 是 Git 2.23+ 推荐的新命令,语义更清晰。
bash
# 切换到已有分支
git checkout develop
# 新版推荐:
git switch develop
# 创建并切换到新分支
git checkout -b feature-login
git switch -c feature-login
# 切换到上一个分支
git checkout -
# 用某个提交的文件覆盖工作区(注意 `--`)
git checkout -- file.txt
3.3 git merge ------ 合并分支
将指定分支的修改合并到当前分支,产生合并提交。
bash
# 合并指定分支到当前分支
git checkout main
git merge feature-branch
# 禁用快进合并(保留分支历史)
git merge --no-ff feature-branch
# 压缩合并(将所有提交合并成一个)
git merge --squash feature-branch
git commit -m "合并 feature 分支"
# 合并后不自动提交(供检查)
git merge --no-commit feature-branch
# 放弃正在进行的合并(解决冲突前可用)
git merge --abort
3.4 git rebase ------ 变基操作
将当前分支的提交"移植"到目标分支的最新提交之后,形成线性历史。
bash
# 基本变基(在 feature 分支执行)
git checkout feature
git rebase main
# 直接指定源和目标
git rebase main feature
# 交互式变基(合并、修改、删除历史提交)
git rebase -i HEAD~3
# 继续变基(解决冲突后)
git add .
git rebase --continue
# 跳过当前提交
git rebase --skip
# 放弃变基
git rebase --abort
第四部分:远程仓库协作
4.1 git remote ------ 管理远程仓库
管理本地仓库关联的远程源。
bash
# 查看远程仓库列表
git remote
# 查看详细信息(含 fetch 和 push 地址)
git remote -v
# 添加远程仓库
git remote add origin https://github.com/user/repo.git
# 查看远程仓库详细信息
git remote show origin
# 修改远程仓库地址
git remote set-url origin https://new-url.com/repo.git
# 删除远程仓库连接
git remote remove origin
# 重命名远程仓库
git remote rename origin upstream
4.2 git fetch ------ 获取远程更新(不合并)
从远程仓库下载最新数据,但不自动合并到当前分支。
bash
# 获取所有分支更新
git fetch origin
# 获取特定分支
git fetch origin main
# 获取所有远程仓库的更新
git fetch --all
# 获取后清理已删除的远程分支引用
git fetch --prune
# 获取标签
git fetch --tags
4.3 git pull ------ 拉取并合并
git fetch + git merge 的组合命令。
bash
# 拉取并合并远程分支到当前分支
git pull origin main
# 使用 rebase 代替 merge(推荐)
git pull --rebase origin main
# 只拉取不自动提交(合并后手动提交)
git pull --no-commit origin main
# 拉取所有远程分支的更新
git pull --all
4.4 git push ------ 推送到远程
将本地提交推送到远程仓库。
bash
# 推送到远程同名分支
git push origin main
# 首次推送并设置上游关联
git push -u origin feature-branch
# 删除远程分支
git push origin --delete feature-branch
# 推送所有本地分支
git push --all origin
# 推送标签
git push origin v1.0
# 推送所有标签
git push --tags
# 强制推送(危险,用于改写历史)
git push --force origin main
# 更安全的强制推送(检查远程是否有他人更新)
git push --force-with-lease origin main
第五部分:撤销与回退
5.1 工作区撤销
bash
# 丢弃工作区单个文件的修改
git restore file.txt
# 或旧版命令
git checkout -- file.txt
# 丢弃所有工作区修改
git restore .
# 删除未跟踪的文件
git clean -f
git clean -fd # 包括目录
git clean -n # 预览将要删除的文件
5.2 暂存区撤销
bash
# 将文件从暂存区移回工作区
git restore --staged file.txt
# 或
git reset HEAD file.txt
# 撤销所有暂存区的修改
git reset
5.3 提交撤销(本地)
bash
# 撤销最近一次提交,修改回到暂存区
git reset --soft HEAD~1
# 撤销最近一次提交,修改回到工作区
git reset HEAD~1
# 彻底删除最近一次提交(危险)
git reset --hard HEAD~1
# 回退到任意提交
git reset --hard a1b2c3d
# 安全撤销已推送的提交(生成反向提交)
git revert HEAD
git revert a1b2c3d
5.4 Stash 暂存(临时保存)
bash
# 暂存当前未提交的修改
git stash
git stash push -m "临时保存"
# 查看所有暂存记录
git stash list
# 恢复最近一次暂存(保留暂存记录)
git stash apply
# 恢复并删除暂存记录
git stash pop
# 删除指定暂存
git stash drop stash@{1}
# 删除所有暂存
git stash clear
第六部分:查看与对比
6.1 git log ------ 查看提交历史
bash
# 完整提交历史
git log
# 一行简洁展示
git log --oneline
# 图形化展示分支历史
git log --graph --all --oneline
# 查看最近 n 次提交
git log -n 5
# 查看某人提交记录
git log --author="John"
# 按提交信息搜索
git log --grep="fix"
# 查看某文件的修改历史
git log --follow file.txt
# 查看每次提交的差异(patch)
git log -p
6.2 git diff ------ 查看差异
bash
# 工作区 vs 暂存区
git diff
# 暂存区 vs 版本库
git diff --staged
git diff --cached
# 工作区 vs 最新提交
git diff HEAD
# 比较两个分支
git diff main..feature
# 比较两个提交
git diff a1b2c3d e4f5g6h
# 查看某文件的差异
git diff file.txt
6.3 git show ------ 查看某次提交详情
bash
# 查看最近一次提交详情
git show
# 查看指定提交详情
git show a1b2c3d
# 只查看某次提交的某文件
git show a1b2c3d:file.txt
6.4 git blame ------ 查看文件行归属
bash
# 查看文件每行最后修改信息
git blame file.txt
# 查看指定行范围
git blame -L 10,20 file.txt
# 忽略空白改动
git blame -w file.txt
第七部分:高级操作
7.1 git cherry-pick ------ 选择性应用提交
将其他分支的某个提交应用到当前分支。
bash
# 应用单个提交
git cherry-pick a1b2c3d
# 应用多个提交
git cherry-pick a1b2c3d e4f5g6h
# 应用区间提交(不包括起始)
git cherry-pick start..end
# 不自动提交(供检查)
git cherry-pick -n a1b2c3d
# 继续(解决冲突后)
git cherry-pick --continue
# 放弃
git cherry-pick --abort
7.2 git bisect ------ 二分查找定位 bug
bash
# 开始二分查找
git bisect start
# 标记当前版本为坏版本
git bisect bad
# 标记已知的好版本
git bisect good v1.0
# Git 会切到一个中间提交,测试后标记好或坏
git bisect good # 如果这个版本正常
git bisect bad # 如果这个版本有问题
# 找到 bug 提交后,结束 bisect
git bisect reset
7.3 git reflog ------ 引用日志(救急神器)
找回所有因 reset、rebase 等操作丢失的提交。
bash
# 查看所有 HEAD 变更记录
git reflog
# 输出示例:
# a1b2c3d HEAD@{0}: reset: moving to HEAD~2
# e4f5g6h HEAD@{1}: commit: 不小心提交的错误代码
# 找回丢失的提交
git checkout e4f5g6h
# 或创建分支指向它
git branch recovered e4f5g6h
7.4 git grep ------ 在版本库中搜索
bash
# 搜索包含某字符串的文件
git grep "TODO"
# 搜索并显示行号
git grep -n "function_name"
# 指定分支搜索
git grep "console.log" main
# 统计匹配数量
git grep -c "error"
7.5 git submodule ------ 子模块管理
bash
# 添加子模块
git submodule add https://github.com/user/lib.git lib/
# 初始化子模块
git submodule init
# 更新所有子模块
git submodule update
# 更新并递归
git submodule update --init --recursive
# 查看子模块状态
git submodule status
第八部分:标签管理
标签用于标记重要的版本节点。
bash
# 查看所有标签
git tag
# 创建轻量标签
git tag v1.0
# 创建附注标签(推荐)
git tag -a v1.0 -m "正式版 v1.0"
# 为历史提交打标签
git tag -a v0.9 a1b2c3d -m "候选版本"
# 删除本地标签
git tag -d v1.0
# 推送单个标签到远程
git push origin v1.0
# 推送所有标签
git push --tags
# 删除远程标签
git push origin --delete v1.0
第九部分:其他实用命令
9.1 git help ------ 获取帮助
bash
# 列出常用命令
git help
# 查看某命令详细帮助
git help add
# 打开完整手册
git help --all
9.2 git archive ------ 导出代码快照
bash
# 导出当前 HEAD 的代码为 ZIP
git archive --format=zip HEAD > code.zip
# 导出指定标签的代码为 tar.gz
git archive --format=tar.gz --output=code.tar.gz v1.0
# 只导出指定目录
git archive HEAD:src/ --format=zip > src.zip
9.3 git shortlog ------ 汇总提交信息
bash
# 按作者汇总提交
git shortlog
# 按作者分组,简洁显示
git shortlog -sn
# 指定版本区间
git shortlog v1.0..v2.0
第十部分:完整工作流示例
10.1 新项目初始化和首次提交
bash
# 1. 创建项目目录并进入
mkdir my-project && cd my-project
# 2. 初始化 Git 仓库
git init
# 3. 配置仓库级用户信息(可选)
git config user.name "Your Name"
git config user.email "your.email@example.com"
# 4. 创建 README 文件
echo "# My Project" > README.md
# 5. 添加文件到暂存区
git add README.md
# 6. 首次提交
git commit -m "Initial commit"
# 7. 添加远程仓库
git remote add origin https://github.com/user/my-project.git
# 8. 推送到远程
git push -u origin main
10.2 日常开发工作流
bash
# 1. 拉取最新代码
git pull --rebase origin main
# 2. 创建功能分支
git checkout -b feature/new-feature
# 3. 开发并提交
git add .
git commit -m "feat: 添加新功能"
# 4. 继续开发,再次提交
git add .
git commit -m "fix: 修复 bug"
# 5. 合并主分支最新代码
git fetch origin
git rebase origin/main
# 6. 合并回主分支
git checkout main
git merge --no-ff feature/new-feature
# 7. 推送
git push origin main
# 8. 删除本地功能分支
git branch -d feature/new-feature
10.3 紧急修复流程
bash
# 1. 从主分支创建修复分支
git checkout -b hotfix/critical-bug main
# 2. 修复并提交
git add .
git commit -m "fix: 紧急修复严重 bug"
# 3. 合并回主分支
git checkout main
git merge --no-ff hotfix/critical-bug
# 4. 打标签
git tag -a v1.0.1 -m "紧急修复版本"
# 5. 推送代码和标签
git push origin main
git push origin v1.0.1
# 6. 删除修复分支
git branch -d hotfix/critical-bug
10.4 误操作恢复流程
bash
# 场景1:误删文件但未提交
git restore deleted-file.txt
# 场景2:误提交到错误分支
git reset HEAD~1
git stash
git checkout correct-branch
git stash pop
git add .
git commit -m "正确的提交"
# 场景3:误 reset --hard 丢了提交
git reflog
# 找到丢失的 commit hash
git reset --hard <lost-commit-hash>
# 场景4:误推送了错误代码
git revert HEAD
git push origin main
第十一部分:命令速查表
| 分类 | 命令 | 功能 |
|---|---|---|
| 配置 | git config --global user.name "Name" |
设置用户名 |
git config --global user.email "email" |
设置邮箱 | |
git config --list |
查看所有配置 | |
| 初始化 | git init |
初始化仓库 |
git clone <url> |
克隆远程仓库 | |
| 日常操作 | git status |
查看状态 |
git add <file> |
添加到暂存区 | |
git commit -m "msg" |
提交到本地 | |
git diff |
查看差异 | |
git log --oneline |
查看历史 | |
| 分支 | git branch |
查看分支 |
git checkout -b <name> |
创建并切换分支 | |
git merge <branch> |
合并分支 | |
git branch -d <name> |
删除分支 | |
| 远程 | git remote -v |
查看远程仓库 |
git push origin <branch> |
推送到远程 | |
git pull origin <branch> |
拉取并合并 | |
git fetch origin |
获取但不合并 | |
| 撤销 | git restore <file> |
丢弃工作区修改 |
git reset HEAD <file> |
撤出暂存区 | |
git reset --soft HEAD~1 |
撤销提交(保留修改) | |
git reset --hard HEAD~1 |
彻底删除提交 | |
git revert <commit> |
安全撤销公共提交 | |
git stash |
暂存当前修改 | |
| 高级 | git rebase -i HEAD~n |
交互式变基 |
git cherry-pick <commit> |
选择性应用提交 | |
git bisect start |
二分查找 bug | |
git reflog |
查看引用日志 | |
| 标签 | git tag -a v1.0 -m "msg" |
创建附注标签 |
git push --tags |
推送所有标签 | |
| 清理 | git clean -fd |
删除未跟踪文件 |
git gc |
垃圾回收优化 |
总结
Git 提供了超过 150 个命令,但实际日常开发中常用的约 20-30 个。掌握本文的核心命令,足以应对 95% 的开发场景。关键在于理解 Git 的四大区域模型 (工作区 → 暂存区 → 本地仓库 → 远程仓库),当需要执行某个操作时,只需判断它是作用于哪个区域、想要达到什么效果,就能自然找到对应的命令。建议多在本地练习、善用 git status 和 git diff 观察状态,遇到问题时第一反应查看 git reflog。