Git 命令速查手册

写在前面

本文整理了日常开发中最常用的 Git 命令,涵盖参数说明与实际示例,方便随时查阅。每个命令都力求实用,避免罗列用不到的冷门参数。


一、基础操作

1.1 git init — 初始化仓库

1
2
3
4
5
# 在当前目录初始化
git init

# 初始化到指定目录
git init my-project

1.2 git clone — 克隆远程仓库

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 克隆到当前目录下的同名文件夹
git clone https://github.com/user/repo.git

# 克隆到指定目录名
git clone https://github.com/user/repo.git my-folder

# 克隆指定分支
git clone -b main https://github.com/user/repo.git

# 浅克隆(只取最近一次提交,大仓库速度快)
git clone --depth=1 https://github.com/user/repo.git

1.3 git add — 添加到暂存区

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 添加指定文件
git add README.md

# 添加多个文件
git add file1.md file2.md

# 添加当前目录下所有变更
git add .

# 添加所有变更(包括已删除的文件)
git add -A

# 交互式添加(按块选择要暂存的内容)
git add -p

1.4 git commit — 提交

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 不带参数会打开编辑器让你写提交信息
git commit

# -m 直接指定提交信息(message)
git commit -m "feat: 添加用户登录功能"

# -a 提交所有已跟踪文件的修改(跳过 git add)
git commit -a -m "fix: 修复空指针异常"

# --amend 修改上一次提交(未推送到远程时使用)
git commit --amend -m "feat: 添加用户登录和注册功能"

# --allow-empty 空提交(用于触发 CI 或占位)
git commit --allow-empty -m "chore: 触发部署"

1.5 git status — 查看状态

1
2
3
4
5
6
7
8
# 查看工作区和暂存区状态
git status

# 简短输出(一行一个文件)
git status -s

# 显示被忽略的文件
git status --ignored

状态标记说明:

标记 含义
?? 未跟踪的新文件
A 新添加到暂存区
M 已修改
D 已删除
R 已重命名
!! 被忽略的文件

左侧为暂存区状态,右侧为工作区状态。例如 MM 表示暂存区和工作区都有修改。

1.6 git log — 查看提交历史

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 查看完整提交历史
git log

# 单行显示
git log --oneline

# 显示最近 5 条
git log --oneline -5

# 图形化显示分支合并历史
git log --oneline --graph --all

# 显示每次提交的文件变更统计
git log --stat

# 显示指定文件的提交历史
git log -- path/to/file

# 按作者筛选
git log --author="张三"

# 按时间筛选
git log --since="2026-01-01" --until="2026-03-31"

# 按提交信息搜索
git log --grep="修复"

二、分支管理

2.1 git branch — 分支操作

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 查看所有本地分支
git branch

# 查看所有分支(含远程)
git branch -a

# 创建新分支(不切换)
git branch feature/login

# 删除已合并的分支
git branch -d feature/login

# 强制删除分支(无论是否合并)
git branch -D feature/login

# 重命名当前分支
git branch -m new-branch-name

# 重命名指定分支
git branch -m old-name new-name

2.2 git checkout / switch — 切换分支

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 切换到已有分支
git checkout main

# 创建并切换到新分支
git checkout -b feature/login

# 切换到上一个分支
git checkout -

# Git 2.23+ 推荐用 switch 替代
git switch main
git switch -c feature/login    # 创建并切换
git switch -                   # 切换到上一个分支

2.3 git merge — 合并分支

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 将 feature 分支合并到当前分支
git merge feature/login

# 合并时不使用快进(保留分支历史)
git merge --no-ff feature/login

# 只合并指定文件
git merge feature/login -- path/to/file

# 取消正在进行的合并
git merge --abort

2.4 git rebase — 变基

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 将当前分支变基到 main
git rebase main

# 交互式变基(修改最近 3 次提交)
git rebase -i HEAD~3

# 取消正在进行的变基
git rebase --abort

# 变基遇到冲突解决后继续
git rebase --continue

merge vs rebase:merge 保留完整分支历史,rebase 产生线性历史更整洁。已推送到远程的分支不要 rebase。


三、远程协作

3.1 git remote — 远程仓库管理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 查看远程仓库名
git remote

# 查看远程仓库详细信息(URL)
git remote -v

# 添加远程仓库
git remote add origin https://github.com/user/repo.git

# 修改远程仓库地址
git remote set-url origin https://github.com/user/new-repo.git

# 删除远程仓库
git remote remove origin

3.2 git fetch — 获取远程更新

1
2
3
4
5
6
7
8
# 获取所有远程分支的更新(不合并)
git fetch origin

# 获取指定分支
git fetch origin main

# 获取所有远程仓库的更新
git fetch --all

3.3 git pull — 拉取并合并

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 拉取当前分支的远程更新(使用默认远程和分支)
git pull

# 拉取指定远程分支的更新并合并
git pull origin main

# 使用 rebase 方式拉取(避免产生合并提交)
git pull --rebase origin main

# 拉取所有远程分支
git pull --all

3.4 git push — 推送到远程

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 推送到当前分支的跟踪远程(使用默认配置)
git push

# 推送当前分支到指定远程分支
git push origin main

# 首次推送并建立跟踪关系
git push -u origin feature/login

# 推送所有本地分支
git push --all origin

# 推送标签
git push origin v1.0.0

# 推送所有标签
git push --tags

# 删除远程分支
git push origin --delete feature/login

四、撤销与回退

4.1 git reset — 回退提交

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 回退到上一个提交(默认 --mixed 模式)
git reset HEAD~1

# 软回退:保留修改在暂存区(撤销 commit,不撤销 add)
git reset --soft HEAD~1
git reset --mixed HEAD~1

# 硬回退:丢弃所有修改(谨慎使用)
git reset --hard HEAD~1

# 回退到指定提交
git reset --soft abc1234

HEAD~1 表示上一个提交,HEAD~3 表示往上三个提交。

4.2 git revert — 撤销提交(生成新提交)

1
2
3
4
5
6
7
8
9
# 撤销指定提交(会生成一个新的撤销提交)
git revert abc1234

# 撤销最近一次提交
git revert HEAD

# 撤销多个提交(不自动提交,最后一起提交)
git revert --no-commit HEAD~3..HEAD
git commit -m "revert: 撤销最近三次提交"

reset vs revert:reset 是"回退历史",适合未推送的提交;revert 是"新增一个撤销提交",适合已推送的提交,不影响他人。

4.3 git checkout — 恢复文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 恢复工作区指定文件(丢弃未暂存的修改)
git checkout -- file.md

# Git 2.23+ 推荐用 restore 替代
git restore file.md

# 从暂存区恢复文件到工作区
git restore --staged file.md

# 恢复某个文件到指定提交的版本
git restore --source=abc1234 file.md

4.4 git stash — 暂存工作区

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 暂存当前修改
git stash

# 暂存时附加说明
git stash save "开发到一半的功能"

# 暂存时包含未跟踪的文件
git stash -u

# 查看暂存列表
git stash list

# 恢复最近一次暂存
git stash pop

# 恢复指定暂存(不删除记录)
git stash apply stash@{1}

# 删除指定暂存
git stash drop stash@{0}

# 清空所有暂存
git stash clear

五、标签与发布

5.1 git tag — 标签管理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 查看所有标签
git tag

# 创建轻量标签
git tag v1.0.0

# 创建附注标签(推荐,包含作者、日期、说明)
git tag -a v1.0.0 -m "正式版本 1.0.0"

# 给指定提交打标签
git tag -a v0.9.0 abc1234 -m "补打标签"

# 查看标签详情
git show v1.0.0

# 删除本地标签
git tag -d v1.0.0

# 删除远程标签
git push origin --delete v1.0.0

六、查看与搜索

6.1 git diff — 查看差异

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 查看工作区与暂存区的差异
git diff

# 查看暂存区与最新提交的差异
git diff --staged

# 查看两个提交之间的差异
git diff abc1234 def5678

# 查看指定文件的差异
git diff -- path/to/file

# 只显示变更的文件名
git diff --name-only

# 显示差异统计(增删行数)
git diff --stat

6.2 git blame — 查看文件每行的修改者

1
2
3
4
5
6
7
8
# 查看文件每行的最后修改者和提交
git blame README.md

# 指定行范围(第 10 到 30 行)
git blame -L 10,30 README.md

# 只显示邮箱
git blame -e README.md

6.3 git grep — 在仓库中搜索

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 在所有已跟踪文件中搜索关键词
git grep "TODO"

# 显示行号
git grep -n "TODO"

# 只显示文件名
git grep -l "TODO"

# 在指定提交中搜索
git grep "TODO" abc1234

七、实用技巧

7.1 git cherry-pick — 摘取提交

1
2
3
4
5
6
7
8
# 将指定提交应用到当前分支
git cherry-pick abc1234

# 摘取多个提交
git cherry-pick abc1234 def5678

# 摘取提交但不自动提交(方便修改后再提交)
git cherry-pick -n abc1234

7.2 git bisect — 二分查找问题提交

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 开始二分查找
git bisect start

# 标记当前提交有问题
git bisect bad

# 标记某个正常的提交
git bisect good v1.0.0

# Git 会自动切换到中间提交,测试后标记
git bisect good   # 或 git bisect bad

# 找到问题提交后结束查找
git bisect reset

7.3 git reflog — 查看所有操作记录

1
2
3
4
5
6
7
8
# 查看所有操作记录(包括已删除的提交和分支切换)
git reflog

# 查看指定分支的操作记录
git reflog show feature/login

# 恢复误删的提交
git checkout abc1234

reflog 记录了 HEAD 的每一次移动,是误操作的救命稻草。

7.4 git worktree — 多分支同时工作

1
2
3
4
5
6
7
8
# 创建工作树(在同一仓库下同时工作在多个分支)
git worktree add ../hotfix-branch hotfix/urgent

# 查看所有工作树
git worktree list

# 删除工作树
git worktree remove ../hotfix-branch

7.5 常用配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 设置用户名和邮箱
git config --global user.name "张三"
git config --global user.email "zhangsan@example.com"

# 设置默认分支名为 main
git config --global init.defaultBranch main

# 设置默认编辑器
git config --global core.editor "code --wait"

# 设置别名
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.lg "log --oneline --graph --all"

# 查看所有配置
git config --list

# 存储凭据(避免每次输入密码)
git config --global credential.helper manager

八、提交信息规范

推荐使用 Conventional Commits 格式:

1
2
3
<type>(<scope>): <subject>

<body>

常用 type:

类型 说明
feat 新功能
fix 修复 Bug
docs 文档变更
style 代码格式(不影响逻辑)
refactor 重构(不是新功能也不是修复)
perf 性能优化
test 增加或修改测试
chore 构建工具或辅助工具变更
ci CI/CD 配置变更

示例:

1
2
3
git commit -m "feat(auth): 添加 OAuth2 第三方登录"
git commit -m "fix(api): 修复分页查询越界问题"
git commit -m "docs: 更新 API 接口文档"