Git 常用命令速查手册

# Git 常用命令速查手册

> 一份精心整理的 Git 命令参考文档,涵盖日常开发中最常用的操作。

---

## 目录

1. [配置与初始化](#一配置与初始化)
2. [基础操作](#二基础操作)
3. [分支管理](#三分支管理)
4. [远程操作](#四远程操作)
5. [撤销与恢复](#五撤销与恢复)
6. [储藏与清理](#六储藏与清理)
7. [标签管理](#七标签管理)
8. [日志与查看](#八日志与查看)
9. [补丁操作](#九补丁操作)
10. [高级技巧](#十高级技巧)

---

## 一、配置与初始化

### 全局配置

```bash
# 设置用户名和邮箱(全局)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

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

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

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

# 查看某项配置
git config user.name
```

### 仓库初始化

```bash
# 初始化新仓库
git init

# 克隆远程仓库
git clone <repository-url>

# 克隆指定分支
git clone -b <branch-name> <repository-url>

# 克隆到指定目录
git clone <repository-url> <directory-name>
```

---

## 二、基础操作

### 查看状态

```bash
# 查看工作区状态
git status

# 简洁状态显示
git status -s
# 或
git status --short
```

### 添加文件到暂存区

```bash
# 添加指定文件
git add <file-name>

# 添加所有修改
git add .

# 添加所有修改(包括删除)
git add -A
# 或
git add --all

# 交互式添加
git add -i

# 添加部分修改(交互式选择块)
git add -p <file-name>
```

### 提交更改

```bash
# 提交暂存区的更改
git commit -m "提交信息"

# 提交并添加所有已跟踪文件的修改
git commit -am "提交信息"

# 修改最后一次提交
git commit --amend

# 修改最后一次提交并保留提交信息
git commit --amend --no-edit
```

### 查看差异

```bash
# 查看工作区与暂存区的差异
git diff

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

# 查看工作区与最新提交的差异
git diff HEAD

# 查看指定文件的差异
git diff <file-name>

# 查看两次提交之间的差异
git diff <commit1> <commit2>
```

### 删除与重命名

```bash
# 删除文件(同时从工作区和暂存区移除)
git rm <file-name>

# 仅停止跟踪,保留工作区文件
git rm --cached <file-name>

# 重命名文件
git mv <old-name> <new-name>
```

---

## 三、分支管理

### 查看分支

```bash
# 查看本地分支
git branch

# 查看远程分支
git branch -r

# 查看所有分支
git branch -a

# 查看分支详细信息(含最新提交)
git branch -v

# 查看已合并到当前分支的分支
git branch --merged

# 查看未合并到当前分支的分支
git branch --no-merged

# 根据 commit hash 查询包含该提交的分支
git branch -a --contains <commit-hash>
```

### 创建与切换分支

```bash
# 创建新分支
git branch <branch-name>

# 创建并切换到新分支
git checkout -b <branch-name>
# 或(Git 2.23+ 推荐)
git switch -c <branch-name>

# 切换到已有分支
git checkout <branch-name>
# 或
git switch <branch-name>

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

# 基于远程分支创建本地分支
git checkout -b <local-branch> origin/<remote-branch>
```

### 合并分支

```bash
# 合并指定分支到当前分支
git merge <branch-name>

# 合并并生成合并提交(即使可以快进)
git merge --no-ff <branch-name>

# 合并并压缩为一个提交
git merge --squash <branch-name>

# 中止合并
git merge --abort
```

### 变基操作

```bash
# 将当前分支变基到指定分支
git rebase <branch-name>

# 交互式变基(修改历史)
git rebase -i <commit-hash>

# 继续变基(解决冲突后)
git rebase --continue

# 跳过当前提交
git rebase --skip

# 中止变基
git rebase --abort
```

### 挑选提交

```bash
# 将指定提交应用到当前分支
git cherry-pick <commit-hash>

# 挑选多个提交
git cherry-pick <commit1> <commit2>

# 挑选并保留提交信息
git cherry-pick -x <commit-hash>
```

### 删除分支

```bash
# 删除已合并的本地分支
git branch -d <branch-name>

# 强制删除本地分支
git branch -D <branch-name>

# 删除远程分支
git push origin --delete <branch-name>
# 或
git push origin :<branch-name>
```

---

## 四、远程操作

### 远程仓库管理

```bash
# 查看远程仓库
git remote -v

# 添加远程仓库
git remote add <name> <url>

# 重命名远程仓库
git remote rename <old-name> <new-name>

# 删除远程仓库
git remote remove <name>

# 查看远程仓库详细信息
git remote show <name>

# 更新远程分支信息
git remote update
```

### 抓取与拉取

```bash
# 从远程获取最新分支信息(不合并)
git fetch origin

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

# 拉取并合并当前分支的远程更新
git pull

# 拉取并变基
git pull --rebase

# 拉取指定远程分支
git pull origin <branch-name>
```

### 推送代码

```bash
# 推送当前分支到远程
git push origin <branch-name>

# 推送并建立追踪关系
git push -u origin <branch-name>

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

# 推送标签
git push origin <tag-name>

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

# 强制推送(谨慎使用)
git push -f
# 或
git push --force

# 安全的强制推送(仅当远程没有新提交时)
git push --force-with-lease

# 将删除操作提交到远程
git push origin master -f
```

---

## 五、撤销与恢复

### 撤销工作区修改

```bash
# 丢弃某个文件的修改(工作区)
git checkout -- <file-name>

# 丢弃所有工作区修改
git checkout -- .

# 恢复文件到指定提交版本
git checkout <commit-hash> -- <file-name>

# 使用 restore 恢复文件(Git 2.23+)
git restore <file-name>

# 恢复所有文件
git restore .
```

### 撤销暂存区修改

```bash
# 将文件从暂存区撤出(保留工作区修改)
git reset HEAD <file-name>

# 撤出所有暂存区文件
git reset HEAD

# 使用 restore(Git 2.23+)
git restore --staged <file-name>
```

### 撤销提交

```bash
# 撤销上一次提交,保留修改到工作区
git reset HEAD^

# 撤销上一次提交,保留修改到暂存区
git reset --soft HEAD^

# 撤销上一次提交,丢弃所有修改(危险!)
git reset --hard HEAD^

# 回退到指定版本(保留工作区)
git reset <commit-hash>

# 回退到指定版本(丢弃所有修改)
git reset --hard <commit-hash>

# 使用 revert 创建反向提交(安全撤销)
git revert <commit-hash>

# 撤销多次提交
git revert <oldest-commit-hash>^..<newest-commit-hash>
```

### 误删恢复

```bash
# 查看所有操作记录(包括已删除的提交)
git reflog

# 复制要恢复操作的前面的 hash 值,然后执行
git reset --hard <hash>

# 恢复已删除的分支
git reflog show <branch-name>
```

### 清理未跟踪文件

```bash
# 查看将被清理的文件(干运行)
git clean -n

# 删除未跟踪的文件
git clean -f

# 删除未跟踪的文件和目录
git clean -fd

# 删除被忽略的文件
git clean -fx
```

---

## 六、储藏与清理

### 储藏修改

```bash
# 储藏当前工作区和暂存区的修改
git stash

# 储藏并添加描述
git stash save "描述信息"

# 储藏包括未跟踪的文件
git stash -u
# 或
git stash --include-untracked

# 储藏时保留暂存区状态
git stash --keep-index
```

### 查看与恢复储藏

```bash
# 查看储藏列表
git stash list

# 应用最近一次的储藏(不删除)
git stash apply

# 应用指定储藏
git stash apply stash@{n}

# 弹出最近一次的储藏(应用并删除)
git stash pop

# 弹出指定储藏
git stash pop stash@{n}

# 查看储藏的详细差异
git stash show -p

# 删除最近一次的储藏
git stash drop

# 删除指定储藏
git stash drop stash@{n}

# 清空所有储藏
git stash clear
```

---

## 七、标签管理

### 创建标签

```bash
# 创建轻量标签
git tag <tag-name>

# 创建附注标签
git tag -a <tag-name> -m "标签说明"

# 基于指定提交创建标签
git tag -a <tag-name> <commit-hash> -m "标签说明"
```

### 查看与推送标签

```bash
# 查看所有标签
git tag

# 查看标签详细信息
git show <tag-name>

# 推送标签到远程
git push origin <tag-name>

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

### 删除标签

```bash
# 删除本地标签
git tag -d <tag-name>

# 删除远程标签
git push origin --delete <tag-name>
```

---

## 八、日志与查看

### 查看提交历史

```bash
# 查看提交历史
git log

# 简洁显示(一行一个提交)
git log --oneline

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

# 查看指定文件的修改历史
git log -p <file-name>

# 查看指定作者的提交
git log --author="name"

# 查看指定时间范围的提交
git log --since="2024-01-01" --until="2024-12-31"

# 查看最近 N 次提交
git log -n 5

# 查看提交统计信息
git log --stat
```

### 查看提交详情

```bash
# 查看指定提交的详细信息
git show <commit-hash>

# 查看指定文件在指定提交的版本
git show <commit-hash>:<file-name>

# 查看文件逐行修改信息(追责)
git blame <file-name>

# 查看文件在指定行的修改信息
git blame -L 10,20 <file-name>
```

### 查看引用日志

```bash
# 查看 HEAD 的操作历史
git reflog

# 查看指定分支的引用日志
git reflog show <branch-name>
```

---

## 九、补丁操作

### 生成补丁

```bash
# 将工作区与版本库的差异做成补丁
git diff HEAD > patch.diff

# 将暂存区与版本库的差异做成补丁
git diff --cached > patch.diff

# 将指定提交的差异做成补丁
git format-patch -1 <commit-hash>

# 将多次提交做成补丁文件
git format-patch <commit-hash>^..<commit-hash>
```

### 应用补丁

```bash
# 检查 patch/diff 能否正常打入
git apply --check file.patch

# 打入 patch/diff
git apply patch.diff

# 使用 am 应用补丁(保留提交信息)
git am patch

# 如果在合入 patch 的过程中报错了
git apply --reject file.patch

# 解决冲突后继续 am
git am --continue

# 跳过当前补丁
git am --skip

# 中止补丁应用
git am --abort
```

---

## 十、高级技巧

### 停止跟踪文件

```bash
# 停止跟踪文件(本地修改不再显示为未暂存)
git update-index --assume-unchanged <文件路径>

# 恢复跟踪
git update-index --no-assume-unchanged <文件路径>

# 查看被标记为 assume-unchanged 的文件
git ls-files -v | grep "^[a-z]"
```

### 二分查找(Bisect)

```bash
# 开始二分查找
git bisect start

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

# 标记某个提交为正常
git bisect good <commit-hash>

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

# 结束二分查找
git bisect reset
```

### 子模块

```bash
# 添加子模块
git submodule add <repository-url> <path>

# 初始化子模块
git submodule init

# 更新子模块
git submodule update

# 递归克隆包含子模块的仓库
git clone --recurse-submodules <repository-url>
```

### 工作区保存

```bash
# 保存当前工作进度(包括暂存区)
git stash push -m "工作描述"

# 创建并切换到新分支,同时弹出储藏
git stash branch <branch-name> stash@{0}
```

### 搜索

```bash
# 在提交历史中搜索内容
git log -S "搜索内容"

# 在提交历史中搜索正则表达式
git log -G "正则表达式"

# 在所有文件中搜索内容
git grep "搜索内容"
```

### 归档

```bash
# 将仓库打包为 tar.gz
git archive --format=tar.gz -o archive.tar.gz HEAD

# 只打包指定目录
git archive --format=zip -o archive.zip HEAD:src/
```

---

## 附录:常用别名推荐

在 `~/.gitconfig` 中添加:

```ini
[alias]
st = status
co = checkout
br = branch
ci = commit
di = diff
lg = log --graph --oneline --all --decorate
last = log -1 HEAD
unstage = reset HEAD --
discard = checkout --
amend = commit --amend
visual = !gitk
```

---

> **提示**:使用 `git <command> --help` 或 `git help <command>` 可查看任何命令的详细文档。

---

*文档整理时间:2026-08-14*

posted @ 2026-08-14 15:06  木头人吃菜不吃饭  阅读(3)  评论(0)    收藏  举报