Git 命令参数完全详解,一份系统性、可查阅的 Git 命令参考手册,按使用场景分类,每个命令列出最常用的参数及其作用
By Mige - 九月 23, 2026
Git 命令参数完全详解
这是一份系统性、可查阅的 Git 命令参考手册,按使用场景分类,每个命令列出最常用的参数及其作用。
一、配置命令
1.1 git config
配置 Git 行为的核心命令,分三个层级:| 层级 | 作用域 | 配置文件位置 | 命令 |
| --system | 系统所有用户 | /etc/gitconfig | git config --system |
| --global | 当前用户所有仓库 | ~/.gitconfig | git config --global |
| --local | 当前仓库(默认) | .git/config | git config --local |
常用参数:
用户信息(首次使用必须设置)
git config --global user.name "Your Name"
git config --global user.email "your@email.com"
编辑器
git config --global core.editor "code --wait" # VS Code
git config --global core.editor "vim" # Vim
git config --global core.editor "nano" # Nano
换行符处理
git config --global core.autocrlf input # macOS/Linux
git config --global core.autocrlf true # Windows
别名(大幅提升效率)
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.last "log -1 HEAD"
git config --global alias.lg "log --oneline --graph --all --decorate"
git config --global alias.undo "reset --soft HEAD~1"
颜色显示
git config --global color.ui auto
git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto
查看配置
git config --list # 查看所有配置
git config --list --global # 查看全局配置
git config user.name # 查看单个配置
git config --list --show-origin # 查看配置来源
1.2 git help
获取命令帮助:
git help <command> # 打开浏览器查看帮助
git <command> --help # 同上
git <command> -h # 简洁帮助(推荐,终端直接显示)
二、创建与初始化
2.1 git init
初始化一个新的 Git 仓库:
git init # 在当前目录初始化
git init my-project # 创建目录并初始化
git init --bare repo.git # 创建裸仓库(服务器端用)
git init --template=<dir> # 使用模板目录
参数详解:
· --bare:创建裸仓库,没有工作目录,用于远程仓库
· --template:指定模板目录,包含初始文件(如 hooks)
· --initial-branch=<name>:指定初始分支名(默认 main或 master)
· -q, --quiet:静默模式,只输出错误信息
2.2 git clone
克隆远程仓库到本地:
git clone <url> # 克隆到当前目录
git clone <url> <directory> # 克隆到指定目录
git clone --depth 1 <url> # 浅克隆(只克隆最新版本)
git clone --branch <branch> <url> # 克隆指定分支
git clone --recursive <url> # 克隆包含子模块
参数详解:
· --depth <n>:浅克隆,只克隆最近 n 次提交,大幅减少下载量
· --branch <name>:克隆后切换到指定分支
· --recursive:同时初始化所有子模块
· --single-branch:只克隆指定分支的历史
· --shallow-since=<date>:克隆指定日期之后的提交
· --shallow-exclude=<revision>:排除指定版本之后的提交
· --no-checkout:克隆但不检出工作文件
· --bare:克隆为裸仓库
· --mirror:镜像克隆(包含所有 refs)
· -v, --verbose:显示详细信息
三、基本操作
3.1 git add
将工作区的修改添加到暂存区:
git add <file> # 添加单个文件
git add . # 添加当前目录所有文件
git add -A # 添加所有修改(包括删除)
git add *.py # 添加所有 Python 文件
git add src/ # 添加 src 目录
参数详解:
· -A, --all:添加所有修改、删除、新增的文件
· .:添加当前目录下的所有修改(不包括上级目录)
· -p, --patch:交互式选择每个修改块(hunk),精细控制
· -u, --update:只添加已跟踪文件的修改,不添加新文件
· -n, --dry-run:模拟运行,显示哪些文件会被添加
· -v, --verbose:显示详细信息
· -i, --interactive:交互式模式· --ignore-removal:忽略已删除的文件· --chmod=(+x|-x):设置可执行权限
git add -p 交互示例:
Stage this hunk [y,n,q,a,d,s,e,?]?
y - 暂存此块
n - 不暂存此块
q - 退出,不暂存后续块
a - 暂存此块及之后所有块
d - 不暂存此块及之后所有块
s - 将当前块拆分为更小的块
e - 手动编辑当前块
? - 显示帮助
3.2 git commit
将暂存区的修改提交到本地仓库:
git commit -m "提交信息" # 带提交信息
git commit -a -m "提交信息" # 跳过 git add,提交所有已跟踪文件的修改
git commit --amend # 修改上一次提交
git commit --amend -m "新信息" # 修改上一次提交的信息
参数详解:
· -m, --message=<msg>:提交信息
· -a, --all:自动暂存已跟踪的文件并提交
· --amend:修改上一次提交(不创建新提交)
· --no-edit:使用上一次的提交信息(与 --amend 配合)
· --allow-empty:允许空提交· --allow-empty-message:允许空提交信息
· --author=<author>:指定作者
· --date=<date>:指定日期
· -s, --signoff:添加 Signed-off-by 行
· -S, --gpg-sign[=<keyid>]:GPG 签名提交
· -v, --verbose:在编辑器中显示 diff· -q, --quiet:静默模式
· --reset-author:重置作者信息(与 --amend 配合)
3.3 git status
查看工作区和暂存区的状态:
git status # 标准输出
git status -s # 简短输出
git status -b # 显示分支信息
git status --ignored # 显示被忽略的文件
参数详解:
· -s, --short:简短格式,每行一个文件
· -b, --branch:显示分支和跟踪信息
· --ignored:显示被 .gitignore 忽略的文件
· -u, --untracked-files=<mode>:控制未跟踪文件的显示
· normal(默认):显示未跟踪的目录
· all:显示所有未跟踪的文件
· no:不显示未跟踪的文件
· --porcelain:机器可读的格式(用于脚本)
· -z:NUL 分隔(用于脚本)
简短输出格式说明:
M file.txt # 已修改(工作区)
MM file.txt # 已修改(工作区和暂存区)
A file.txt # 新增
D file.txt # 删除
R file.txt # 重命名
C file.txt # 复制
?? file.txt # 未跟踪
!! file.txt # 被忽略
3.4 git diff
查看文件差异:
git diff # 工作区 vs 暂存区
git diff --staged # 暂存区 vs 上一次提交
git diff HEAD # 工作区 vs 上一次提交
git diff <commit1> <commit2> # 两个提交之间的差异
git diff <branch1> <branch2> # 两个分支之间的差异
git diff --stat # 只显示统计数据参数详解:
· --staged, --cached:比较暂存区和上一次提交
· --stat:显示统计信息(修改了多少文件,多少行)
· --name-only:只显示修改的文件名
· --name-status:显示文件名和修改类型
· -w, --ignore-all-space:忽略空白差异
· -b, --ignore-space-change:忽略空白数量变化
· --ignore-blank-lines:忽略空行变化
· --word-diff:单词级别差异
· --color-words:彩色单词差异
· --check:检查是否有空白错误
· -U<n>, --unified=<n>:上下文行数(默认 3)
· --no-index:比较两个非 Git 文件
· --cached:比较暂存区和 HEAD
· --diff-filter=[ACDMRTUXB]:按修改类型过滤 · A:新增
· C:复制
· D:删除
· M:修改
· R:重命名
3.5 git log
查看提交历史:
git log # 完整历史
git log --oneline # 简洁格式(每行一个提交)
git log --graph # 图形化显示分支
git log -5 # 最近 5 条
git log --author="name" # 按作者筛选
git log --since="2024-01-01" # 按时间筛选
git log --grep="fix" # 按提交信息筛选
git log <file> # 查看某个文件的历史
git log -p # 显示每次提交的 diff
参数详解:
· --oneline:每行显示一个提交(哈希 + 信息)
· --graph:ASCII 图形显示分支合并历史
· --all:显示所有分支的历史
· -n <number>:限制显示的提交数量
· --since=<date>, --after=<date>:显示指定日期之后的提交
· --until=<date>, --before=<date>:显示指定日期之前的提交
· --author=<pattern>:按作者筛选
· --committer=<pattern>:按提交者筛选
· --grep=<pattern>:按提交信息筛选
· -p, --patch:显示每次提交的差异内容
· --stat:显示每次提交的统计信息
· --name-only:只显示修改的文件名
· --name-status:显示文件名和修改类型
· --abbrev-commit:缩短提交哈希
· --relative-date:相对时间显示
· --pretty=<format>:自定义输出格式
· oneline:一行显示
· short:标准格式
· medium:中等格式
· full:完整格式
· fuller:更完整格式
· format:"%h %s":自定义格式
· --format=<format>:自定义格式字符串 · %H:完整提交哈希
· %h:简短提交哈希
· %an:作者名
· %ae:作者邮箱
· %ad:作者日期
· %s:提交信息
· %d:引用名称
· %D:完整引用名称
· --no-merges:不显示合并提交
· --merges:只显示合并提交
· --first-parent:只显示第一个父提交(忽略合并分支的细节)
· --left-right:标记提交属于哪一侧(用于比较)
· --cherry-pick:标记被 cherry-pick 的提交
· -S<string>:搜索代码中字符串的变更
· -G<regex>:搜索代码中正则表达式的变更· -L <start>,<end>:<file>:查看文件某段代码的历史
四、分支管理
4.1 git branch
管理分支:
查看分支
git branch # 查看本地分支(* 表示当前分支)
git branch -r # 查看远程分支
git branch -a # 查看所有分支(本地 + 远程)
git branch -v # 查看分支及最后一次提交
创建分支
git branch <branch-name> # 创建分支(不切换)
git branch <branch-name> <commit> # 从指定提交创建分支
删除分支
git branch -d <branch-name> # 删除已合并的分支
git branch -D <branch-name> # 强制删除(即使未合并)
重命名分支
git branch -m <old> <new> # 重命名分支
git branch -M <old> <new> # 强制重命名
其他
git branch --merged # 查看已合并到当前分支的分支
git branch --no-merged # 查看未合并的分支
git branch --contains <commit> # 查看包含指定提交的分支
git branch -u <remote/branch> # 设置上游分支
参数详解:
· -d, --delete:删除分支(安全模式,检查是否已合并)
· -D:强制删除(不检查合并状态)
· -m, --move:重命名/移动分支
· -M:强制重命名
· -r, --remotes:列出远程分支
· -a, --all:列出所有分支
· -v, --verbose:显示更多信息
· --merged:只显示已合并到当前分支的分支
· --no-merged:只显示未合并的分支
· --contains <commit>:显示包含指定提交的分支
· --no-contains <commit>:显示不包含指定提交的分支
· -u, --set-upstream-to=<upstream>:设置上游分支
· --unset-upstream:取消上游分支设置
· --sort=<key>:排序方式(-committerdate 按提交时间倒序)
· --format=<format>:自定义输出格式
· --list:列出分支(默认行为)
· -c, --copy:复制分支
· -C:强制复制
4.2 git checkout
切换分支或恢复文件(Git 2.23+ 推荐用 git switch 和 git restore):
切换分支
git checkout <branch-name> # 切换到已有分支
git checkout -b <branch-name> # 创建并切换到新分支
git checkout -b <new> <remote/branch> # 基于远程分支创建本地分支
恢复文件
git checkout -- <file> # 撤销工作区的修改
git checkout <commit> -- <file> # 从指定提交恢复文件
切换到特定提交
git checkout <commit-hash> # 切换到历史提交(分离头指针)
参数详解:
· -b <branch>:创建并切换到新分支
· -B <branch>:创建或重置分支并切换
· -t, --track:设置跟踪远程分支
· --no-track:不设置跟踪
· -f, --force:强制切换(丢弃未提交的修改)
· -m, --merge:三路合并当前分支和目标分支
· --conflict=<style>:冲突标记风格(diff3 等)
· -p, --patch:交互式恢复文件块
· --ours:使用当前分支版本解决冲突
· --theirs:使用目标分支版本解决冲突
· --ignore-skip-worktree-bits:忽略 skip-worktree 位
· -q, --quiet:静默模式· --progress:显示进度
4.3 git switch
Git 2.23+ 新增,专门用于切换分支(替代 git checkout 的分支切换功能):
git switch <branch-name> # 切换到已有分支
git switch -c <branch-name> # 创建并切换到新分支
git switch -C <branch-name> # 创建或重置分支并切换
git switch - # 切换到上一个分支
git switch --detach <commit> # 切换到分离头指针状态
参数详解:
· -c, --create <branch>:创建并切换到新分支
· -C, --force-create <branch>:创建或强制重置分支并切换
· -d, --detach:切换到分离头指针状态
· -f, --force:强制切换· -m, --merge:合并当前修改
· --track:设置跟踪远程分支
· --no-track:不设置跟踪
· --guess:自动匹配远程分支
· --ignore-other-worktrees:忽略其他工作树· -q, --quiet:静默模式
4.4 git restore
Git 2.23+ 新增,专门用于恢复文件(替代 git checkout 的文件恢复功能):
git restore <file> # 撤销工作区的修改
git restore --staged <file> # 从暂存区移除(取消 git add)
git restore --source=<commit> <file> # 从指定提交恢复文件
git restore . # 恢复所有文件
参数详解:
· -s, --source=<tree>:从指定提交/分支恢复· -S, --staged:恢复暂存区(取消 git add)
· -W, --worktree:恢复工作区(默认)
· -p, --patch:交互式恢复
· --ours:使用当前分支版本
· --theirs:使用合并分支版本
· -m, --merge:合并模式
· --conflict=<style>:冲突标记风格
· --ignore-unmerged:忽略未合并的文件
· --overlay:覆盖模式
· -q, --quiet:静默模式4.5 git merge
合并分支:
git merge <branch-name> # 将指定分支合并到当前分支
git merge --no-ff <branch> # 禁用快进合并(保留分支历史)
git merge --squash <branch> # 压缩合并(将所有提交合并为一个)
git merge --abort # 取消合并
git merge --continue # 解决冲突后继续合并
参数详解:
· --no-ff:禁用快进合并,强制创建合并提交
· --ff-only:只允许快进合并,否则失败
· --squash:压缩合并,不保留分支提交历史
· --abort:取消当前合并,恢复到合并前状态
· --continue:解决冲突后继续合并
· --no-commit:合并但不自动提交
· --edit, -e:编辑合并信息
· --no-edit:使用自动生成的合并信息
· --ff:允许快进合并(默认)
· --log:在合并信息中包含分支提交摘要
· --no-log:不包含分支提交摘要
· --stat:显示差异统计
· -n, --no-stat:不显示差异统计
· --squash:压缩合并
· --strategy=<strategy>:合并策略
· recursive:默认,递归合并
· resolve:简单的三路合并
· octopus:多分支合并
· ours:保留当前分支版本
· subtree:子树合并
· --strategy-option=<option>:合并策略选项
· ours:自动选择当前分支版本
· theirs:自动选择目标分支版本
· patience:耐心算法(更好的代码行匹配)
· diff-algorithm=patience:差异算法
· ignore-space-change:忽略空白变化 · renormalize:规范化换行符
· -X <option>:传递给合并策略的选项
4.6 git rebase
变基操作(重新应用提交到另一个基础):
git rebase <branch> # 将当前分支变基到目标分支
git rebase -i HEAD~3 # 交互式变基,修改最近 3 次提交
git rebase --continue # 解决冲突后继续
git rebase --skip # 跳过当前提交
git rebase --abort # 取消变基
参数详解:
· -i, --interactive:交互式模式· --continue:解决冲突后继续
· --skip:跳过当前提交
· --abort:取消变基
· --onto <newbase>:变基到新的基础
· -p, --preserve-merges:保留合并提交
· -r, --rebase-merges:重新创建合并提交
· -s, --strategy=<strategy>:合并策略
· -X, --strategy-option=<option>:策略选项
· --autosquash:自动压缩 fixup/squash 提交
· --no-autosquash:禁用自动压缩
· --autostash:自动暂存未提交的修改
· --no-autostash:禁用自动暂存
· -f, --force-rebase:强制变基
· --whitespace=<option>:空白处理· --committer-date-is-author-date:保持作者日期
· --ignore-date:使用当前时间
交互式变基命令:
pick = 使用此提交
reword = 使用此提交,但修改提交信息
edit = 使用此提交,但停下来修改
squash = 合并到上一个提交
fixup = 合并到上一个提交,丢弃提交信息
exec = 运行 shell 命令
break = 在此处停止
drop = 删除此提交4.7 git cherry-pick
将指定提交应用到当前分支:
git cherry-pick <commit-hash> # 应用单个提交
git cherry-pick <hash1> <hash2> # 应用多个提交
git cherry-pick <hash>..<hash> # 应用一段连续的提交
git cherry-pick --continue # 解决冲突后继续
git cherry-pick --abort # 取消
参数详解:
· -n, --no-commit:应用但不提交
· -e, --edit:编辑提交信息
· -x:在提交信息中添加来源引用
· -s, --signoff:添加 Signed-off-by
· -m, --mainline <parent-number>:指定主父提交(合并提交时使用)
· --ff:快进模式
· --continue:解决冲突后继续
· --skip:跳过当前提交
· --abort:取消操作
· -q, --quiet:静默模式
五、远程操作
5.1 git remote
管理远程仓库:
git remote -v # 查看远程仓库
git remote add <name> <url> # 添加远程仓库
git remote remove <name> # 删除远程仓库
git remote rename <old> <new> # 重命名远程仓库
git remote set-url <name> <url> # 修改远程仓库地址
git remote show <name> # 查看远程仓库详细信息
git remote prune <name> # 清理已删除的远程分支引用
参数详解:
· -v, --verbose:显示详细信息(URL)
· --add:添加多个 URL
· --delete:删除 URL
· --push:操作 push URL
· --fetch:操作 fetch URL
· --all:操作所有远程仓库
· -m, --mirror:镜像模式
5.2 git fetch
从远程仓库获取数据(不自动合并):
git fetch # 获取所有远程仓库的更新
git fetch origin # 获取 origin 的更新
git fetch origin main # 获取 origin 的 main 分支
git fetch --all # 获取所有远程仓库
git fetch --prune # 获取并清理已删除的远程分支
参数详解:
· --all:获取所有远程仓库
· --prune:删除本地已不存在的远程分支引用
· -p, --prune:同上
· --depth=<depth>:限制获取的提交深度
· --unshallow:将浅克隆转换为完整克隆
· --tags:获取所有标签
· --no-tags:不获取标签
· -f, --force:强制获取
· -k, --keep:保留下载的包
· --multiple:同时从多个远程仓库获取
· -j, --jobs=<n>:并行获取的作业数
· -q, --quiet:静默模式
· -v, --verbose:详细模式
5.3 git pull
获取远程更新并合并到当前分支:
git pull # 获取并合并(相当于 fetch + merge)
git pull --rebase # 获取并变基(相当于 fetch + rebase)
git pull origin main # 获取并合并指定分支
git pull --ff-only # 只允许快进合并
参数详解:
· --rebase:使用变基代替合并
· --no-rebase:使用合并(默认)
· --ff-only:只允许快进合并
· --squash:压缩合并
· --autostash:自动暂存未提交的修改
· --no-autostash:禁用自动暂存
· -v, --verbose:详细模式
· -q, --quiet:静默模式
· --depth=<depth>:限制获取深度
· --unshallow:转换为完整克隆
· --all:获取所有远程分支
· -f, --force:强制覆盖本地分支
· --strategy=<strategy>:合并策略
· --strategy-option=<option>:策略选项
5.4 git push
将本地提交推送到远程仓库:
git push # 推送到默认远程仓库
git push origin main # 推送到指定远程和分支
git push --all # 推送所有分支
git push --tags # 推送所有标签
git push -u origin main # 推送并设置上游分支
git push --force # 强制推送(危险!)
git push --force-with-lease # 安全强制推送(推荐)
git push origin --delete <branch> # 删除远程分支
参数详解:
· -u, --set-upstream:设置上游分支跟踪
· --all:推送所有分支
· --tags:推送所有标签
· --follow-tags:推送提交时同时推送相关标签
· -f, --force:强制推送(覆盖远程历史)
· --force-with-lease:安全强制推送(检查远程是否有新提交)
· --delete:删除远程分支或标签
· -d, --delete:同上
· --dry-run:模拟运行,显示将要推送的内容
· --no-verify:跳过 pre-push hook
· -v, --verbose:详细模式
· -q, --quiet:静默模式
· --atomic:原子推送(所有或全不)
· --prune:删除远程不存在的本地分支引用
· --mirror:镜像推送(完全同步)
· -n, --dry-run:模拟运行
· --push-option=<option>:传递选项到服务器
· --receive-pack=<path>:指定接收包路径
· --exec=<path>:指定 git-receive-pack 路径
· --signed:GPG 签名推送
· --no-signed:不签名
六、撤销与恢复
6.1 git reset
重置当前分支到指定状态:
三种模式
git reset --soft HEAD~1 # 撤销提交,保留工作区和暂存区
git reset --mixed HEAD~1 # 撤销提交和暂存区,保留工作区(默认)
git reset --hard HEAD~1 # 撤销提交、暂存区、工作区(危险!)
取消暂存
git reset HEAD <file> # 取消 git add(同 git restore --staged)
回退到指定提交
git reset --hard <commit-hash> # 回退到指定提交
参数详解:
· --soft:只移动 HEAD,保持暂存区和工作区不变
· --mixed(默认):移动 HEAD 并重置暂存区,工作区不变
· --hard:移动 HEAD 并重置暂存区和工作区(不可恢复!)
· --merge:重置并合并
· --keep:保留工作区未提交的修改
· -p, --patch:交互式重置
· -q, --quiet:静默模式
· --pathspec-from-file=<file>:从文件读取路径· --no-refresh:不刷新索引
6.2 git revert
创建一个新的提交来撤销指定提交(安全,不修改历史):
git revert HEAD # 撤销上一次提交
git revert HEAD~3 # 撤销最近 3 次提交
git revert <commit-hash> # 撤销指定提交
git revert --no-commit <commit> # 撤销但不自动提交
git revert --continue # 解决冲突后继续
git revert --abort # 取消撤销
参数详解:
· -n, --no-commit:应用撤销但不自动提交
· -e, --edit:编辑提交信息
· --no-edit:使用默认提交信息
· -s, --signoff:添加 Signed-off-by
· -m, --mainline <parent-number>:撤销合并提交时指定主父提交
· --strategy=<strategy>:合并策略
· --strategy-option=<option>:策略选项
· --rerere-autoupdate:自动使用记录的冲突解决方案
· --continue:解决冲突后继续
· --skip:跳过当前提交
· --abort:取消操作
· -q, --quiet:静默模式
6.3 git stash
暂存未提交的修改:
git stash # 暂存当前修改
git stash save "message" # 暂存并添加描述
git stash list # 查看暂存列表
git stash pop # 恢复最近一次暂存并删除
git stash apply # 恢复最近一次暂存但不删除
git stash apply stash@{2} # 恢复指定暂存
git stash drop stash@{0} # 删除指定暂存
git stash clear # 清空所有暂存
git stash show # 查看暂存的修改内容
git stash branch<name> # 从暂存创建分支
参数详解:
· save:暂存并添加描述信息
· push:暂存(可指定文件)
· pop:恢复并删除暂存
· apply:恢复但不删除暂存
· list:列出所有暂存
· show:显示暂存的修改内容
· drop:删除指定暂存
· clear:清空所有暂存
· branch:从暂存创建分支
· -p, --patch:交互式暂存
· -k, --keep-index:暂存工作区但保留暂存区
· -u, --include-untracked:包含未跟踪的文件
· -a, --all:包含所有文件(包括忽略的)
· -m, --message=<message>:添加描述信息
· --index:恢复时也恢复暂存区状态
6.4 git clean
清理未跟踪的文件:
git clean -n # 模拟运行,显示要删除的文件
git clean -f # 删除未跟踪的文件
git clean -fd # 删除未跟踪的文件和目录
git clean -fx # 删除未跟踪的文件(包括被忽略的)
参数详解:
· -n, --dry-run:模拟运行,不实际删除
· -f, --force:强制删除
· -d:删除未跟踪的目录
· -x:删除被 .gitignore 忽略的文件
· -X:只删除被忽略的文件
· -i, --interactive:交互式模式
· -q, --quiet:静默模式· -e, --exclude=<pattern>:排除匹配的文件
七、标签管理
7.1 git tag
管理标签:
创建标签
git tag <tag-name> # 创建轻量标签
git tag -a <tag-name> -m "message" # 创建附注标签
git tag -a <tag-name> <commit-hash> # 为指定提交创建标签
查看标签
git tag # 列出所有标签
git tag -l "v1.*" # 搜索标签
git show <tag-name> # 查看标签详情
操作标签
git tag -d <tag-name> # 删除本地标签
git push origin <tag-name> # 推送指定标签
git push origin --tags # 推送所有标签
git push origin --delete <tag-name> # 删除远程标签
参数详解:
· -a, --annotate:创建附注标签
· -m, --message=<msg>:标签信息
· -d, --delete:删除标签
· -l, --list:列出标签
· -n<num>:显示标签信息行数
· -s, --sign:GPG 签名标签
· -u, --local-user=<key-id>:指定 GPG 密钥
· -f, --force:强制创建/移动标签
· --contains <commit>:显示包含指定提交的标签
· --merged:显示已合并的标签
· --no-merged:显示未合并的标签
· --points-at <object>:显示指向指定对象的标签
· --sort=<key>:排序方式
· --format=<format>:自定义输出格式
· --column:列式显示
八、调试与检查
8.1 git bisect
二分查找引入 Bug 的提交:
git bisect start # 开始二分查找
git bisect bad # 标记当前提交为有 Bug
git bisect good <commit> # 标记已知的好提交
git bisect good # 标记当前提交为好
git bisect bad # 标记当前提交为坏
git bisect reset # 结束二分查找
git bisect run <script> # 自动运行测试脚本
参数详解:
· start:开始二分查找
· bad:标记坏提交
· good:标记好提交
· skip:跳过当前提交
· reset:结束并重置
· visualize:可视化当前状态
· run:自动运行脚本
· --no-checkout:不检出提交
· --term-new:自定义"新"术语
· --term-old:自定义"旧"术语
8.2 git blame
查看文件每行最后的修改者:
git blame <file> # 查看文件每行的提交信息
git blame -L10,20 <file> # 查看指定行范围
git blame -w <file> # 忽略空白修改
git blame -e <file> # 显示邮箱而不是用户名
参数详解:
· -L <start>,<end>:指定行范围
· -l:显示完整提交哈希
· -s:隐藏作者名和时间戳
· -e, --show-email:显示邮箱
· -w, --ignore-whitespace:忽略空白修改
· -M:检测代码移动· -C:检测代码复制
· -CCC:检测跨文件复制
· --since=<date>:只显示指定日期之后的修改
· --date=<format>:日期格式
· -n:显示行号
· -p, --porcelain:机器可读格式8.3 git shortlog
按作者汇总提交信息:
git shortlog # 按作者汇总提交
git shortlog -sn # 只显示提交数量git shortlog -sn --all # 所有分支
git shortlog -e # 显示邮箱
参数详解:
· -s, --summary:只显示提交数量
· -n, --numbered:按提交数量排序
· -e, --email:显示邮箱
· --all:所有分支
· --no-merges:不显示合并提交
· -w<width>:限制行宽
· --group=<type>:分组方式(author/committer)
· --format=<format>:提交信息格式
8.4 git stash list相关
git stash list --stat # 显示暂存的统计信息
git stash list -p # 显示暂存的差异内容
git stash show -p stash@{0} # 显示指定暂存的差异
九、高级命令
9.1 git worktree
管理多个工作树(同时检出多个分支):
git worktree add <path> <branch> # 在新目录检出分支
git worktree list # 列出所有工作树
git worktree remove <path> # 删除工作树
git worktree prune # 清理已删除的工作树
参数详解:
· add:添加工作树
· list:列出工作树
· remove:删除工作树
· prune:清理已删除的工作树
· lock:锁定工作树
· unlock:解锁工作树
· -b, --branch <branch>:创建新分支
· -B, --force-create<branch>:强制创建分支
· --detach:分离头指针
· -f, --force:强制添加
· --checkout:检出分支(默认)
9.2 git submodule
管理子模块:
git submodule add <url> <path> # 添加子模块
git submodule init # 初始化子模块
git submodule update # 更新子模块
git submodule foreach<command> # 在每个子模块执行命令
git submodule status # 查看子模块状态
参数详解:
· add:添加子模块
· init:初始化子模块
· update:更新子模块到指定提交
· status:查看子模块状态
· foreach:在每个子模块执行命令
· sync:同步子模块远程 URL
· deinit:反初始化子模块
· summary:显示子模块提交摘要
· --recursive:递归操作子模块
· --remote:更新到远程最新提交
· --init:初始化未初始化的子模块
· --depth:限制克隆深度
· --force:强制操作
· -b, --branch:指定分支
9.3 git archive
创建项目归档文件:
git archive --format=zip HEAD > archive.zip
git archive --format=tar HEAD | gzip > archive.tar.gz
git archive -o latest.zip HEAD
git archive --prefix=project/ HEAD
参数详解:
· --format=<fmt>:归档格式(tar, zip, tar.gz)
· -o, --output=<file>:输出文件
· --prefix=<prefix>:添加目录前缀
· --add-file=<file>:添加额外文件
· -l, --list:列出支持的格式
· -v, --verbose:详细模式
· --remote=<repo>:从远程仓库创建归档
9.4 git gc
垃圾回收,优化仓库:
git gc # 执行垃圾回收
git gc --aggressive # 激进优化(更慢但更彻底)
git gc --prune=now # 立即清理不可达对象
参数详解:
· --aggressive:激进优化
· --auto:自动执行
· --prune=<date>:清理早于指定日期的对象
· --no-prune:不清理
· --quiet:静默模式
· --force:强制执行
十、常用组合命令速查
放弃所有本地修改
git reset --hard HEAD
git clean -fd
修改最近一次提交
git commit --amend -m "新信息"
将多个提交合并为一个
git rebase -i HEAD~3
将某个分支的一个提交应用到当前分支
git cherry-pick <commit-hash>
查看某个文件的修改历史
git log -p --follow -- <file>
查找谁修改了某行代码
git blame -L 10,20 <file>
暂存当前工作git stash
git stash pop
撤销已推送的提交
git revert HEAD
git push
安全强制推送
git push --force-with-lease
删除已合并的本地分支
git branch --merged | grep -v "*|main|master" | xargs -n 1 git branch -d
更新所有子模块
git submodule update --init --recursive --remote
统计代码量
git log --author="name" --pretty=tformat: --numstat | awk '{add += $1; subs += $2; loc += $1 - $2} END {printf "added: %s, removed: %s, total: %s\n", add, subs, loc}'
查看分支图
git log --oneline --graph --all --decorate
查找大文件
git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | awk '/^blob/ {print $NF, $(NF-1)}' | sort -rn -k2 | head -10
十一、参数速查表| 参数类型 | 常见参数 | 说明 |
| 通用 | -h, --help | 显示帮助信息 |
| 通用 | -q, --quiet | 静默模式 |
| 通用 | -v, --verbose | 详细模式 |
| 通用 | --version | 显示版本号 |
| 通用 | --exec-path | 显示 Git 执行路径 |
| 通用 | --git-dir=<path> | 指定 .git 目录 |
| 通用 | --work-tree=<path> | 指定工作目录 |
| 通用 | -C <path> | 切换到指定目录后执行 |
| 通用 | -c<name>=<value> | 设置临时配置 |
| 输出 | --oneline | 一行显示 |
| 输出 | --format=<format> | 自定义格式 |
| 输出 | --stat | 显示统计信息 |
| 输出 | --name-only | 只显示文件名 |
| 输出 | --name-status | 显示文件名和状态 |
| 输出 | -p, --patch | 显示差异内容 |
| 输出 | --graph | 图形化显示 |
| 输出 | --abbrev-commit | 缩短提交哈希 |
| 输出 | --no-color | 禁用颜色 |
| 输出 | -z | NUL 分隔输出 |
| 筛选 | --author=<pattern> | 按作者筛选 |
| 筛选 | --committer=<pattern> | 按提交者筛选 |
| 筛选 | --grep=<pattern> | 按提交信息筛选 |
| 筛选 | --since=<date> | 指定起始日期 |
| 筛选 | --until=<date> | 指定截止日期 |
| 筛选 | --merges | 只显示合并提交 |
| 筛选 | --no-merges | 不显示合并提交 |
| 筛选 | --first-parent | 只显示第一父提交 |
| 筛选 | -S<string> | 按代码变更搜索 |
| 筛选 | -G<regex> | 按正则搜索代码变更 |
| 安全 | --force | 强制操作 |
| 安全 | --force-with-lease | 安全强制推送 |
| 安全 | -n, --dry-run | 模拟运行 |
| 安全 | --no-verify | 跳过钩子 |
十二、学习建议
核心命令(必须掌握):config, init, clone, add, commit, status, diff, log, branch, checkout, merge, push, pull, remote
进阶命令(日常使用):stash, rebase, reset, revert, cherry-pick, tag, blame, shortlog
高级命令(按需学习):bisect, worktree, submodule, archive, gc
建议用 git <command> -h 快速查看参数,用 git help <command> 查看完整文档。
这是一份系统性、可查阅的 Git 命令参考手册,按使用场景分类,每个命令列出最常用的参数及其作用。
一、配置命令
1.1 git config
配置 Git 行为的核心命令,分三个层级:| 层级 | 作用域 | 配置文件位置 | 命令 |
| --system | 系统所有用户 | /etc/gitconfig | git config --system |
| --global | 当前用户所有仓库 | ~/.gitconfig | git config --global |
| --local | 当前仓库(默认) | .git/config | git config --local |
常用参数:
用户信息(首次使用必须设置)
git config --global user.name "Your Name"
git config --global user.email "your@email.com"
编辑器
git config --global core.editor "code --wait" # VS Code
git config --global core.editor "vim" # Vim
git config --global core.editor "nano" # Nano
换行符处理
git config --global core.autocrlf input # macOS/Linux
git config --global core.autocrlf true # Windows
别名(大幅提升效率)
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.last "log -1 HEAD"
git config --global alias.lg "log --oneline --graph --all --decorate"
git config --global alias.undo "reset --soft HEAD~1"
颜色显示
git config --global color.ui auto
git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto
查看配置
git config --list # 查看所有配置
git config --list --global # 查看全局配置
git config user.name # 查看单个配置
git config --list --show-origin # 查看配置来源
1.2 git help
获取命令帮助:
git help <command> # 打开浏览器查看帮助
git <command> --help # 同上
git <command> -h # 简洁帮助(推荐,终端直接显示)
二、创建与初始化
2.1 git init
初始化一个新的 Git 仓库:
git init # 在当前目录初始化
git init my-project # 创建目录并初始化
git init --bare repo.git # 创建裸仓库(服务器端用)
git init --template=<dir> # 使用模板目录
参数详解:
· --bare:创建裸仓库,没有工作目录,用于远程仓库
· --template:指定模板目录,包含初始文件(如 hooks)
· --initial-branch=<name>:指定初始分支名(默认 main或 master)
· -q, --quiet:静默模式,只输出错误信息
2.2 git clone
克隆远程仓库到本地:
git clone <url> # 克隆到当前目录
git clone <url> <directory> # 克隆到指定目录
git clone --depth 1 <url> # 浅克隆(只克隆最新版本)
git clone --branch <branch> <url> # 克隆指定分支
git clone --recursive <url> # 克隆包含子模块
参数详解:
· --depth <n>:浅克隆,只克隆最近 n 次提交,大幅减少下载量
· --branch <name>:克隆后切换到指定分支
· --recursive:同时初始化所有子模块
· --single-branch:只克隆指定分支的历史
· --shallow-since=<date>:克隆指定日期之后的提交
· --shallow-exclude=<revision>:排除指定版本之后的提交
· --no-checkout:克隆但不检出工作文件
· --bare:克隆为裸仓库
· --mirror:镜像克隆(包含所有 refs)
· -v, --verbose:显示详细信息
三、基本操作
3.1 git add
将工作区的修改添加到暂存区:
git add <file> # 添加单个文件
git add . # 添加当前目录所有文件
git add -A # 添加所有修改(包括删除)
git add *.py # 添加所有 Python 文件
git add src/ # 添加 src 目录
参数详解:
· -A, --all:添加所有修改、删除、新增的文件
· .:添加当前目录下的所有修改(不包括上级目录)
· -p, --patch:交互式选择每个修改块(hunk),精细控制
· -u, --update:只添加已跟踪文件的修改,不添加新文件
· -n, --dry-run:模拟运行,显示哪些文件会被添加
· -v, --verbose:显示详细信息
· -i, --interactive:交互式模式· --ignore-removal:忽略已删除的文件· --chmod=(+x|-x):设置可执行权限
git add -p 交互示例:
Stage this hunk [y,n,q,a,d,s,e,?]?
y - 暂存此块
n - 不暂存此块
q - 退出,不暂存后续块
a - 暂存此块及之后所有块
d - 不暂存此块及之后所有块
s - 将当前块拆分为更小的块
e - 手动编辑当前块
? - 显示帮助
3.2 git commit
将暂存区的修改提交到本地仓库:
git commit -m "提交信息" # 带提交信息
git commit -a -m "提交信息" # 跳过 git add,提交所有已跟踪文件的修改
git commit --amend # 修改上一次提交
git commit --amend -m "新信息" # 修改上一次提交的信息
参数详解:
· -m, --message=<msg>:提交信息
· -a, --all:自动暂存已跟踪的文件并提交
· --amend:修改上一次提交(不创建新提交)
· --no-edit:使用上一次的提交信息(与 --amend 配合)
· --allow-empty:允许空提交· --allow-empty-message:允许空提交信息
· --author=<author>:指定作者
· --date=<date>:指定日期
· -s, --signoff:添加 Signed-off-by 行
· -S, --gpg-sign[=<keyid>]:GPG 签名提交
· -v, --verbose:在编辑器中显示 diff· -q, --quiet:静默模式
· --reset-author:重置作者信息(与 --amend 配合)
3.3 git status
查看工作区和暂存区的状态:
git status # 标准输出
git status -s # 简短输出
git status -b # 显示分支信息
git status --ignored # 显示被忽略的文件
参数详解:
· -s, --short:简短格式,每行一个文件
· -b, --branch:显示分支和跟踪信息
· --ignored:显示被 .gitignore 忽略的文件
· -u, --untracked-files=<mode>:控制未跟踪文件的显示
· normal(默认):显示未跟踪的目录
· all:显示所有未跟踪的文件
· no:不显示未跟踪的文件
· --porcelain:机器可读的格式(用于脚本)
· -z:NUL 分隔(用于脚本)
简短输出格式说明:
M file.txt # 已修改(工作区)
MM file.txt # 已修改(工作区和暂存区)
A file.txt # 新增
D file.txt # 删除
R file.txt # 重命名
C file.txt # 复制
?? file.txt # 未跟踪
!! file.txt # 被忽略
3.4 git diff
查看文件差异:
git diff # 工作区 vs 暂存区
git diff --staged # 暂存区 vs 上一次提交
git diff HEAD # 工作区 vs 上一次提交
git diff <commit1> <commit2> # 两个提交之间的差异
git diff <branch1> <branch2> # 两个分支之间的差异
git diff --stat # 只显示统计数据参数详解:
· --staged, --cached:比较暂存区和上一次提交
· --stat:显示统计信息(修改了多少文件,多少行)
· --name-only:只显示修改的文件名
· --name-status:显示文件名和修改类型
· -w, --ignore-all-space:忽略空白差异
· -b, --ignore-space-change:忽略空白数量变化
· --ignore-blank-lines:忽略空行变化
· --word-diff:单词级别差异
· --color-words:彩色单词差异
· --check:检查是否有空白错误
· -U<n>, --unified=<n>:上下文行数(默认 3)
· --no-index:比较两个非 Git 文件
· --cached:比较暂存区和 HEAD
· --diff-filter=[ACDMRTUXB]:按修改类型过滤 · A:新增
· C:复制
· D:删除
· M:修改
· R:重命名
3.5 git log
查看提交历史:
git log # 完整历史
git log --oneline # 简洁格式(每行一个提交)
git log --graph # 图形化显示分支
git log -5 # 最近 5 条
git log --author="name" # 按作者筛选
git log --since="2024-01-01" # 按时间筛选
git log --grep="fix" # 按提交信息筛选
git log <file> # 查看某个文件的历史
git log -p # 显示每次提交的 diff
参数详解:
· --oneline:每行显示一个提交(哈希 + 信息)
· --graph:ASCII 图形显示分支合并历史
· --all:显示所有分支的历史
· -n <number>:限制显示的提交数量
· --since=<date>, --after=<date>:显示指定日期之后的提交
· --until=<date>, --before=<date>:显示指定日期之前的提交
· --author=<pattern>:按作者筛选
· --committer=<pattern>:按提交者筛选
· --grep=<pattern>:按提交信息筛选
· -p, --patch:显示每次提交的差异内容
· --stat:显示每次提交的统计信息
· --name-only:只显示修改的文件名
· --name-status:显示文件名和修改类型
· --abbrev-commit:缩短提交哈希
· --relative-date:相对时间显示
· --pretty=<format>:自定义输出格式
· oneline:一行显示
· short:标准格式
· medium:中等格式
· full:完整格式
· fuller:更完整格式
· format:"%h %s":自定义格式
· --format=<format>:自定义格式字符串 · %H:完整提交哈希
· %h:简短提交哈希
· %an:作者名
· %ae:作者邮箱
· %ad:作者日期
· %s:提交信息
· %d:引用名称
· %D:完整引用名称
· --no-merges:不显示合并提交
· --merges:只显示合并提交
· --first-parent:只显示第一个父提交(忽略合并分支的细节)
· --left-right:标记提交属于哪一侧(用于比较)
· --cherry-pick:标记被 cherry-pick 的提交
· -S<string>:搜索代码中字符串的变更
· -G<regex>:搜索代码中正则表达式的变更· -L <start>,<end>:<file>:查看文件某段代码的历史
四、分支管理
4.1 git branch
管理分支:
查看分支
git branch # 查看本地分支(* 表示当前分支)
git branch -r # 查看远程分支
git branch -a # 查看所有分支(本地 + 远程)
git branch -v # 查看分支及最后一次提交
创建分支
git branch <branch-name> # 创建分支(不切换)
git branch <branch-name> <commit> # 从指定提交创建分支
删除分支
git branch -d <branch-name> # 删除已合并的分支
git branch -D <branch-name> # 强制删除(即使未合并)
重命名分支
git branch -m <old> <new> # 重命名分支
git branch -M <old> <new> # 强制重命名
其他
git branch --merged # 查看已合并到当前分支的分支
git branch --no-merged # 查看未合并的分支
git branch --contains <commit> # 查看包含指定提交的分支
git branch -u <remote/branch> # 设置上游分支
参数详解:
· -d, --delete:删除分支(安全模式,检查是否已合并)
· -D:强制删除(不检查合并状态)
· -m, --move:重命名/移动分支
· -M:强制重命名
· -r, --remotes:列出远程分支
· -a, --all:列出所有分支
· -v, --verbose:显示更多信息
· --merged:只显示已合并到当前分支的分支
· --no-merged:只显示未合并的分支
· --contains <commit>:显示包含指定提交的分支
· --no-contains <commit>:显示不包含指定提交的分支
· -u, --set-upstream-to=<upstream>:设置上游分支
· --unset-upstream:取消上游分支设置
· --sort=<key>:排序方式(-committerdate 按提交时间倒序)
· --format=<format>:自定义输出格式
· --list:列出分支(默认行为)
· -c, --copy:复制分支
· -C:强制复制
4.2 git checkout
切换分支或恢复文件(Git 2.23+ 推荐用 git switch 和 git restore):
切换分支
git checkout <branch-name> # 切换到已有分支
git checkout -b <branch-name> # 创建并切换到新分支
git checkout -b <new> <remote/branch> # 基于远程分支创建本地分支
恢复文件
git checkout -- <file> # 撤销工作区的修改
git checkout <commit> -- <file> # 从指定提交恢复文件
切换到特定提交
git checkout <commit-hash> # 切换到历史提交(分离头指针)
参数详解:
· -b <branch>:创建并切换到新分支
· -B <branch>:创建或重置分支并切换
· -t, --track:设置跟踪远程分支
· --no-track:不设置跟踪
· -f, --force:强制切换(丢弃未提交的修改)
· -m, --merge:三路合并当前分支和目标分支
· --conflict=<style>:冲突标记风格(diff3 等)
· -p, --patch:交互式恢复文件块
· --ours:使用当前分支版本解决冲突
· --theirs:使用目标分支版本解决冲突
· --ignore-skip-worktree-bits:忽略 skip-worktree 位
· -q, --quiet:静默模式· --progress:显示进度
4.3 git switch
Git 2.23+ 新增,专门用于切换分支(替代 git checkout 的分支切换功能):
git switch <branch-name> # 切换到已有分支
git switch -c <branch-name> # 创建并切换到新分支
git switch -C <branch-name> # 创建或重置分支并切换
git switch - # 切换到上一个分支
git switch --detach <commit> # 切换到分离头指针状态
参数详解:
· -c, --create <branch>:创建并切换到新分支
· -C, --force-create <branch>:创建或强制重置分支并切换
· -d, --detach:切换到分离头指针状态
· -f, --force:强制切换· -m, --merge:合并当前修改
· --track:设置跟踪远程分支
· --no-track:不设置跟踪
· --guess:自动匹配远程分支
· --ignore-other-worktrees:忽略其他工作树· -q, --quiet:静默模式
4.4 git restore
Git 2.23+ 新增,专门用于恢复文件(替代 git checkout 的文件恢复功能):
git restore <file> # 撤销工作区的修改
git restore --staged <file> # 从暂存区移除(取消 git add)
git restore --source=<commit> <file> # 从指定提交恢复文件
git restore . # 恢复所有文件
参数详解:
· -s, --source=<tree>:从指定提交/分支恢复· -S, --staged:恢复暂存区(取消 git add)
· -W, --worktree:恢复工作区(默认)
· -p, --patch:交互式恢复
· --ours:使用当前分支版本
· --theirs:使用合并分支版本
· -m, --merge:合并模式
· --conflict=<style>:冲突标记风格
· --ignore-unmerged:忽略未合并的文件
· --overlay:覆盖模式
· -q, --quiet:静默模式4.5 git merge
合并分支:
git merge <branch-name> # 将指定分支合并到当前分支
git merge --no-ff <branch> # 禁用快进合并(保留分支历史)
git merge --squash <branch> # 压缩合并(将所有提交合并为一个)
git merge --abort # 取消合并
git merge --continue # 解决冲突后继续合并
参数详解:
· --no-ff:禁用快进合并,强制创建合并提交
· --ff-only:只允许快进合并,否则失败
· --squash:压缩合并,不保留分支提交历史
· --abort:取消当前合并,恢复到合并前状态
· --continue:解决冲突后继续合并
· --no-commit:合并但不自动提交
· --edit, -e:编辑合并信息
· --no-edit:使用自动生成的合并信息
· --ff:允许快进合并(默认)
· --log:在合并信息中包含分支提交摘要
· --no-log:不包含分支提交摘要
· --stat:显示差异统计
· -n, --no-stat:不显示差异统计
· --squash:压缩合并
· --strategy=<strategy>:合并策略
· recursive:默认,递归合并
· resolve:简单的三路合并
· octopus:多分支合并
· ours:保留当前分支版本
· subtree:子树合并
· --strategy-option=<option>:合并策略选项
· ours:自动选择当前分支版本
· theirs:自动选择目标分支版本
· patience:耐心算法(更好的代码行匹配)
· diff-algorithm=patience:差异算法
· ignore-space-change:忽略空白变化 · renormalize:规范化换行符
· -X <option>:传递给合并策略的选项
4.6 git rebase
变基操作(重新应用提交到另一个基础):
git rebase <branch> # 将当前分支变基到目标分支
git rebase -i HEAD~3 # 交互式变基,修改最近 3 次提交
git rebase --continue # 解决冲突后继续
git rebase --skip # 跳过当前提交
git rebase --abort # 取消变基
参数详解:
· -i, --interactive:交互式模式· --continue:解决冲突后继续
· --skip:跳过当前提交
· --abort:取消变基
· --onto <newbase>:变基到新的基础
· -p, --preserve-merges:保留合并提交
· -r, --rebase-merges:重新创建合并提交
· -s, --strategy=<strategy>:合并策略
· -X, --strategy-option=<option>:策略选项
· --autosquash:自动压缩 fixup/squash 提交
· --no-autosquash:禁用自动压缩
· --autostash:自动暂存未提交的修改
· --no-autostash:禁用自动暂存
· -f, --force-rebase:强制变基
· --whitespace=<option>:空白处理· --committer-date-is-author-date:保持作者日期
· --ignore-date:使用当前时间
交互式变基命令:
pick = 使用此提交
reword = 使用此提交,但修改提交信息
edit = 使用此提交,但停下来修改
squash = 合并到上一个提交
fixup = 合并到上一个提交,丢弃提交信息
exec = 运行 shell 命令
break = 在此处停止
drop = 删除此提交4.7 git cherry-pick
将指定提交应用到当前分支:
git cherry-pick <commit-hash> # 应用单个提交
git cherry-pick <hash1> <hash2> # 应用多个提交
git cherry-pick <hash>..<hash> # 应用一段连续的提交
git cherry-pick --continue # 解决冲突后继续
git cherry-pick --abort # 取消
参数详解:
· -n, --no-commit:应用但不提交
· -e, --edit:编辑提交信息
· -x:在提交信息中添加来源引用
· -s, --signoff:添加 Signed-off-by
· -m, --mainline <parent-number>:指定主父提交(合并提交时使用)
· --ff:快进模式
· --continue:解决冲突后继续
· --skip:跳过当前提交
· --abort:取消操作
· -q, --quiet:静默模式
五、远程操作
5.1 git remote
管理远程仓库:
git remote -v # 查看远程仓库
git remote add <name> <url> # 添加远程仓库
git remote remove <name> # 删除远程仓库
git remote rename <old> <new> # 重命名远程仓库
git remote set-url <name> <url> # 修改远程仓库地址
git remote show <name> # 查看远程仓库详细信息
git remote prune <name> # 清理已删除的远程分支引用
参数详解:
· -v, --verbose:显示详细信息(URL)
· --add:添加多个 URL
· --delete:删除 URL
· --push:操作 push URL
· --fetch:操作 fetch URL
· --all:操作所有远程仓库
· -m, --mirror:镜像模式
5.2 git fetch
从远程仓库获取数据(不自动合并):
git fetch # 获取所有远程仓库的更新
git fetch origin # 获取 origin 的更新
git fetch origin main # 获取 origin 的 main 分支
git fetch --all # 获取所有远程仓库
git fetch --prune # 获取并清理已删除的远程分支
参数详解:
· --all:获取所有远程仓库
· --prune:删除本地已不存在的远程分支引用
· -p, --prune:同上
· --depth=<depth>:限制获取的提交深度
· --unshallow:将浅克隆转换为完整克隆
· --tags:获取所有标签
· --no-tags:不获取标签
· -f, --force:强制获取
· -k, --keep:保留下载的包
· --multiple:同时从多个远程仓库获取
· -j, --jobs=<n>:并行获取的作业数
· -q, --quiet:静默模式
· -v, --verbose:详细模式
5.3 git pull
获取远程更新并合并到当前分支:
git pull # 获取并合并(相当于 fetch + merge)
git pull --rebase # 获取并变基(相当于 fetch + rebase)
git pull origin main # 获取并合并指定分支
git pull --ff-only # 只允许快进合并
参数详解:
· --rebase:使用变基代替合并
· --no-rebase:使用合并(默认)
· --ff-only:只允许快进合并
· --squash:压缩合并
· --autostash:自动暂存未提交的修改
· --no-autostash:禁用自动暂存
· -v, --verbose:详细模式
· -q, --quiet:静默模式
· --depth=<depth>:限制获取深度
· --unshallow:转换为完整克隆
· --all:获取所有远程分支
· -f, --force:强制覆盖本地分支
· --strategy=<strategy>:合并策略
· --strategy-option=<option>:策略选项
5.4 git push
将本地提交推送到远程仓库:
git push # 推送到默认远程仓库
git push origin main # 推送到指定远程和分支
git push --all # 推送所有分支
git push --tags # 推送所有标签
git push -u origin main # 推送并设置上游分支
git push --force # 强制推送(危险!)
git push --force-with-lease # 安全强制推送(推荐)
git push origin --delete <branch> # 删除远程分支
参数详解:
· -u, --set-upstream:设置上游分支跟踪
· --all:推送所有分支
· --tags:推送所有标签
· --follow-tags:推送提交时同时推送相关标签
· -f, --force:强制推送(覆盖远程历史)
· --force-with-lease:安全强制推送(检查远程是否有新提交)
· --delete:删除远程分支或标签
· -d, --delete:同上
· --dry-run:模拟运行,显示将要推送的内容
· --no-verify:跳过 pre-push hook
· -v, --verbose:详细模式
· -q, --quiet:静默模式
· --atomic:原子推送(所有或全不)
· --prune:删除远程不存在的本地分支引用
· --mirror:镜像推送(完全同步)
· -n, --dry-run:模拟运行
· --push-option=<option>:传递选项到服务器
· --receive-pack=<path>:指定接收包路径
· --exec=<path>:指定 git-receive-pack 路径
· --signed:GPG 签名推送
· --no-signed:不签名
六、撤销与恢复
6.1 git reset
重置当前分支到指定状态:
三种模式
git reset --soft HEAD~1 # 撤销提交,保留工作区和暂存区
git reset --mixed HEAD~1 # 撤销提交和暂存区,保留工作区(默认)
git reset --hard HEAD~1 # 撤销提交、暂存区、工作区(危险!)
取消暂存
git reset HEAD <file> # 取消 git add(同 git restore --staged)
回退到指定提交
git reset --hard <commit-hash> # 回退到指定提交
参数详解:
· --soft:只移动 HEAD,保持暂存区和工作区不变
· --mixed(默认):移动 HEAD 并重置暂存区,工作区不变
· --hard:移动 HEAD 并重置暂存区和工作区(不可恢复!)
· --merge:重置并合并
· --keep:保留工作区未提交的修改
· -p, --patch:交互式重置
· -q, --quiet:静默模式
· --pathspec-from-file=<file>:从文件读取路径· --no-refresh:不刷新索引
6.2 git revert
创建一个新的提交来撤销指定提交(安全,不修改历史):
git revert HEAD # 撤销上一次提交
git revert HEAD~3 # 撤销最近 3 次提交
git revert <commit-hash> # 撤销指定提交
git revert --no-commit <commit> # 撤销但不自动提交
git revert --continue # 解决冲突后继续
git revert --abort # 取消撤销
参数详解:
· -n, --no-commit:应用撤销但不自动提交
· -e, --edit:编辑提交信息
· --no-edit:使用默认提交信息
· -s, --signoff:添加 Signed-off-by
· -m, --mainline <parent-number>:撤销合并提交时指定主父提交
· --strategy=<strategy>:合并策略
· --strategy-option=<option>:策略选项
· --rerere-autoupdate:自动使用记录的冲突解决方案
· --continue:解决冲突后继续
· --skip:跳过当前提交
· --abort:取消操作
· -q, --quiet:静默模式
6.3 git stash
暂存未提交的修改:
git stash # 暂存当前修改
git stash save "message" # 暂存并添加描述
git stash list # 查看暂存列表
git stash pop # 恢复最近一次暂存并删除
git stash apply # 恢复最近一次暂存但不删除
git stash apply stash@{2} # 恢复指定暂存
git stash drop stash@{0} # 删除指定暂存
git stash clear # 清空所有暂存
git stash show # 查看暂存的修改内容
git stash branch<name> # 从暂存创建分支
参数详解:
· save:暂存并添加描述信息
· push:暂存(可指定文件)
· pop:恢复并删除暂存
· apply:恢复但不删除暂存
· list:列出所有暂存
· show:显示暂存的修改内容
· drop:删除指定暂存
· clear:清空所有暂存
· branch:从暂存创建分支
· -p, --patch:交互式暂存
· -k, --keep-index:暂存工作区但保留暂存区
· -u, --include-untracked:包含未跟踪的文件
· -a, --all:包含所有文件(包括忽略的)
· -m, --message=<message>:添加描述信息
· --index:恢复时也恢复暂存区状态
6.4 git clean
清理未跟踪的文件:
git clean -n # 模拟运行,显示要删除的文件
git clean -f # 删除未跟踪的文件
git clean -fd # 删除未跟踪的文件和目录
git clean -fx # 删除未跟踪的文件(包括被忽略的)
参数详解:
· -n, --dry-run:模拟运行,不实际删除
· -f, --force:强制删除
· -d:删除未跟踪的目录
· -x:删除被 .gitignore 忽略的文件
· -X:只删除被忽略的文件
· -i, --interactive:交互式模式
· -q, --quiet:静默模式· -e, --exclude=<pattern>:排除匹配的文件
七、标签管理
7.1 git tag
管理标签:
创建标签
git tag <tag-name> # 创建轻量标签
git tag -a <tag-name> -m "message" # 创建附注标签
git tag -a <tag-name> <commit-hash> # 为指定提交创建标签
查看标签
git tag # 列出所有标签
git tag -l "v1.*" # 搜索标签
git show <tag-name> # 查看标签详情
操作标签
git tag -d <tag-name> # 删除本地标签
git push origin <tag-name> # 推送指定标签
git push origin --tags # 推送所有标签
git push origin --delete <tag-name> # 删除远程标签
参数详解:
· -a, --annotate:创建附注标签
· -m, --message=<msg>:标签信息
· -d, --delete:删除标签
· -l, --list:列出标签
· -n<num>:显示标签信息行数
· -s, --sign:GPG 签名标签
· -u, --local-user=<key-id>:指定 GPG 密钥
· -f, --force:强制创建/移动标签
· --contains <commit>:显示包含指定提交的标签
· --merged:显示已合并的标签
· --no-merged:显示未合并的标签
· --points-at <object>:显示指向指定对象的标签
· --sort=<key>:排序方式
· --format=<format>:自定义输出格式
· --column:列式显示
八、调试与检查
8.1 git bisect
二分查找引入 Bug 的提交:
git bisect start # 开始二分查找
git bisect bad # 标记当前提交为有 Bug
git bisect good <commit> # 标记已知的好提交
git bisect good # 标记当前提交为好
git bisect bad # 标记当前提交为坏
git bisect reset # 结束二分查找
git bisect run <script> # 自动运行测试脚本
参数详解:
· start:开始二分查找
· bad:标记坏提交
· good:标记好提交
· skip:跳过当前提交
· reset:结束并重置
· visualize:可视化当前状态
· run:自动运行脚本
· --no-checkout:不检出提交
· --term-new:自定义"新"术语
· --term-old:自定义"旧"术语
8.2 git blame
查看文件每行最后的修改者:
git blame <file> # 查看文件每行的提交信息
git blame -L10,20 <file> # 查看指定行范围
git blame -w <file> # 忽略空白修改
git blame -e <file> # 显示邮箱而不是用户名
参数详解:
· -L <start>,<end>:指定行范围
· -l:显示完整提交哈希
· -s:隐藏作者名和时间戳
· -e, --show-email:显示邮箱
· -w, --ignore-whitespace:忽略空白修改
· -M:检测代码移动· -C:检测代码复制
· -CCC:检测跨文件复制
· --since=<date>:只显示指定日期之后的修改
· --date=<format>:日期格式
· -n:显示行号
· -p, --porcelain:机器可读格式8.3 git shortlog
按作者汇总提交信息:
git shortlog # 按作者汇总提交
git shortlog -sn # 只显示提交数量git shortlog -sn --all # 所有分支
git shortlog -e # 显示邮箱
参数详解:
· -s, --summary:只显示提交数量
· -n, --numbered:按提交数量排序
· -e, --email:显示邮箱
· --all:所有分支
· --no-merges:不显示合并提交
· -w<width>:限制行宽
· --group=<type>:分组方式(author/committer)
· --format=<format>:提交信息格式
8.4 git stash list相关
git stash list --stat # 显示暂存的统计信息
git stash list -p # 显示暂存的差异内容
git stash show -p stash@{0} # 显示指定暂存的差异
九、高级命令
9.1 git worktree
管理多个工作树(同时检出多个分支):
git worktree add <path> <branch> # 在新目录检出分支
git worktree list # 列出所有工作树
git worktree remove <path> # 删除工作树
git worktree prune # 清理已删除的工作树
参数详解:
· add:添加工作树
· list:列出工作树
· remove:删除工作树
· prune:清理已删除的工作树
· lock:锁定工作树
· unlock:解锁工作树
· -b, --branch <branch>:创建新分支
· -B, --force-create<branch>:强制创建分支
· --detach:分离头指针
· -f, --force:强制添加
· --checkout:检出分支(默认)
9.2 git submodule
管理子模块:
git submodule add <url> <path> # 添加子模块
git submodule init # 初始化子模块
git submodule update # 更新子模块
git submodule foreach<command> # 在每个子模块执行命令
git submodule status # 查看子模块状态
参数详解:
· add:添加子模块
· init:初始化子模块
· update:更新子模块到指定提交
· status:查看子模块状态
· foreach:在每个子模块执行命令
· sync:同步子模块远程 URL
· deinit:反初始化子模块
· summary:显示子模块提交摘要
· --recursive:递归操作子模块
· --remote:更新到远程最新提交
· --init:初始化未初始化的子模块
· --depth:限制克隆深度
· --force:强制操作
· -b, --branch:指定分支
9.3 git archive
创建项目归档文件:
git archive --format=zip HEAD > archive.zip
git archive --format=tar HEAD | gzip > archive.tar.gz
git archive -o latest.zip HEAD
git archive --prefix=project/ HEAD
参数详解:
· --format=<fmt>:归档格式(tar, zip, tar.gz)
· -o, --output=<file>:输出文件
· --prefix=<prefix>:添加目录前缀
· --add-file=<file>:添加额外文件
· -l, --list:列出支持的格式
· -v, --verbose:详细模式
· --remote=<repo>:从远程仓库创建归档
9.4 git gc
垃圾回收,优化仓库:
git gc # 执行垃圾回收
git gc --aggressive # 激进优化(更慢但更彻底)
git gc --prune=now # 立即清理不可达对象
参数详解:
· --aggressive:激进优化
· --auto:自动执行
· --prune=<date>:清理早于指定日期的对象
· --no-prune:不清理
· --quiet:静默模式
· --force:强制执行
十、常用组合命令速查
放弃所有本地修改
git reset --hard HEAD
git clean -fd
修改最近一次提交
git commit --amend -m "新信息"
将多个提交合并为一个
git rebase -i HEAD~3
将某个分支的一个提交应用到当前分支
git cherry-pick <commit-hash>
查看某个文件的修改历史
git log -p --follow -- <file>
查找谁修改了某行代码
git blame -L 10,20 <file>
暂存当前工作git stash
git stash pop
撤销已推送的提交
git revert HEAD
git push
安全强制推送
git push --force-with-lease
删除已合并的本地分支
git branch --merged | grep -v "*|main|master" | xargs -n 1 git branch -d
更新所有子模块
git submodule update --init --recursive --remote
统计代码量
git log --author="name" --pretty=tformat: --numstat | awk '{add += $1; subs += $2; loc += $1 - $2} END {printf "added: %s, removed: %s, total: %s\n", add, subs, loc}'
查看分支图
git log --oneline --graph --all --decorate
查找大文件
git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | awk '/^blob/ {print $NF, $(NF-1)}' | sort -rn -k2 | head -10
十一、参数速查表| 参数类型 | 常见参数 | 说明 |
| 通用 | -h, --help | 显示帮助信息 |
| 通用 | -q, --quiet | 静默模式 |
| 通用 | -v, --verbose | 详细模式 |
| 通用 | --version | 显示版本号 |
| 通用 | --exec-path | 显示 Git 执行路径 |
| 通用 | --git-dir=<path> | 指定 .git 目录 |
| 通用 | --work-tree=<path> | 指定工作目录 |
| 通用 | -C <path> | 切换到指定目录后执行 |
| 通用 | -c<name>=<value> | 设置临时配置 |
| 输出 | --oneline | 一行显示 |
| 输出 | --format=<format> | 自定义格式 |
| 输出 | --stat | 显示统计信息 |
| 输出 | --name-only | 只显示文件名 |
| 输出 | --name-status | 显示文件名和状态 |
| 输出 | -p, --patch | 显示差异内容 |
| 输出 | --graph | 图形化显示 |
| 输出 | --abbrev-commit | 缩短提交哈希 |
| 输出 | --no-color | 禁用颜色 |
| 输出 | -z | NUL 分隔输出 |
| 筛选 | --author=<pattern> | 按作者筛选 |
| 筛选 | --committer=<pattern> | 按提交者筛选 |
| 筛选 | --grep=<pattern> | 按提交信息筛选 |
| 筛选 | --since=<date> | 指定起始日期 |
| 筛选 | --until=<date> | 指定截止日期 |
| 筛选 | --merges | 只显示合并提交 |
| 筛选 | --no-merges | 不显示合并提交 |
| 筛选 | --first-parent | 只显示第一父提交 |
| 筛选 | -S<string> | 按代码变更搜索 |
| 筛选 | -G<regex> | 按正则搜索代码变更 |
| 安全 | --force | 强制操作 |
| 安全 | --force-with-lease | 安全强制推送 |
| 安全 | -n, --dry-run | 模拟运行 |
| 安全 | --no-verify | 跳过钩子 |
十二、学习建议
核心命令(必须掌握):config, init, clone, add, commit, status, diff, log, branch, checkout, merge, push, pull, remote
进阶命令(日常使用):stash, rebase, reset, revert, cherry-pick, tag, blame, shortlog
高级命令(按需学习):bisect, worktree, submodule, archive, gc
建议用 git <command> -h 快速查看参数,用 git help <command> 查看完整文档。

0 comments