跳到主要内容

Git 命令速查表

本页面汇总了 Git 最常用的命令,按功能分类整理,方便快速查阅。

配置命令

基本配置

git config --global user.name "姓名"       # 设置全局用户名
git config --global user.email "邮箱" # 设置全局邮箱
git config --global core.editor "vim" # 设置默认编辑器
git config --global init.defaultBranch main # 设置默认分支名
git config --global color.ui auto # 启用颜色输出

查看配置

git config --list                          # 查看所有配置
git config --list --show-origin # 查看配置来源
git config user.name # 查看特定配置

别名配置

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

仓库操作

git init                                   # 初始化新仓库
git clone <url> # 克隆远程仓库
git clone -b <branch> <url> # 克隆指定分支
git clone --depth 1 <url> # 浅克隆(只获取最近一次提交)
git clone --recurse-submodules <url> # 递归克隆子模块

远程仓库

git remote -v                              # 查看远程仓库
git remote add origin <url> # 添加远程仓库
git remote remove <name> # 删除远程仓库
git remote rename <old> <new> # 重命名远程仓库
git remote set-url origin <new-url> # 修改远程仓库 URL

基本操作

状态查看

git status                                 # 查看工作区状态
git status -s # 简短输出
git status --ignored # 显示被忽略的文件

添加文件

git add <file>                             # 添加指定文件
git add . # 添加当前目录所有修改
git add -A # 添加所有变更(包括删除)
git add -p # 交互式添加(逐块选择)
git add -u # 添加已跟踪文件的修改

提交更改

git commit -m "message"                    # 提交并添加说明
git commit -am "message" # 添加已跟踪文件并提交
git commit --amend # 修改最后一次提交
git commit --amend --no-edit # 追加文件到上次提交,不改信息
git commit --allow-empty # 允许空提交

查看历史

git log                                    # 查看提交历史
git log --oneline # 简洁模式(一行一条)
git log --oneline -n 10 # 最近 10 条
git log --graph --all --oneline # 图形化显示所有分支
git log --stat # 显示文件修改统计
git log -p # 显示每次提交的差异
git log --author="张三" # 按作者筛选
git log --since="2024-01-01" # 按日期筛选
git log --grep="keyword" # 按提交信息筛选
git log -S "code" # 搜索添加/删除了某代码的提交
git log -L :funcName:file.js # 查看函数的修改历史
git log --follow -- file.txt # 跟踪文件重命名历史

差异比较

git diff                                   # 工作区与暂存区的差异
git diff --staged # 暂存区与最新提交的差异
git diff HEAD # 工作区与最新提交的差异
git diff <commit1> <commit2> # 两个提交之间的差异
git diff <branch1> <branch2> # 两个分支之间的差异
git diff --stat # 只显示统计信息
git diff --name-only # 只显示文件名

分支操作

查看分支

git branch                                 # 列出本地分支
git branch -a # 列出所有分支(本地+远程)
git branch -r # 列出远程分支
git branch -v # 查看分支详情
git branch --merged # 查看已合并分支
git branch --no-merged # 查看未合并分支

创建分支

git branch <name>                          # 创建新分支
git checkout -b <name> # 创建并切换分支
git switch -c <name> # 创建并切换分支(新语法)
git branch <name> <commit> # 基于某个提交创建分支
git checkout -b <local> origin/<remote> # 基于远程分支创建本地分支

切换分支

git checkout <branch>                      # 切换分支
git switch <branch> # 切换分支(新语法)
git checkout - # 切换到上一个分支
git switch - # 切换到上一个分支(新语法)

管理分支

git branch -m <new-name>                   # 重命名当前分支
git branch -m <old> <new> # 重命名指定分支
git branch -d <branch> # 删除已合并分支
git branch -D <branch> # 强制删除分支
git push origin --delete <branch> # 删除远程分支
git branch -u origin/<branch> # 设置上游分支

合并与变基

合并

git merge <branch>                         # 合并指定分支
git merge --no-ff <branch> # 禁用快进合并
git merge --squash <branch> # 压缩合并(不创建合并提交)
git merge --abort # 取消合并

变基

git rebase <branch>                        # 变基到指定分支
git rebase -i HEAD~3 # 交互式变基(修改最近 3 次提交)
git rebase --continue # 解决冲突后继续变基
git rebase --abort # 取消变基
git rebase --skip # 跳过当前提交

Cherry-pick

git cherry-pick <commit>                   # 应用指定提交
git cherry-pick <commit1> <commit2> # 应用多个提交
git cherry-pick <commit1>..<commit2> # 应用提交范围
git cherry-pick --abort # 取消 cherry-pick
git cherry-pick --continue # 解决冲突后继续

远程操作

git fetch                                  # 获取远程更新
git fetch --all # 获取所有远程更新
git fetch --prune # 获取并清理已删除的远程分支
git pull # 拉取并合并
git pull --rebase # 拉取并变基
git push # 推送到远程
git push -u origin <branch> # 推送并设置上游分支
git push --force # 强制推送
git push --force-with-lease # 安全强制推送
git push --all # 推送所有分支
git push --tags # 推送所有标签

撤销操作

撤销工作区修改

git checkout -- <file>                     # 撤销文件修改
git restore <file> # 撤销文件修改(新语法)
git restore . # 撤销所有修改

撤销暂存

git reset <file>                           # 取消暂存
git restore --staged <file> # 取消暂存(新语法)
git reset # 取消所有暂存

撤销提交

git reset --soft HEAD~1                    # 撤销提交,保留修改在暂存区
git reset --mixed HEAD~1 # 撤销提交,保留修改在工作区(默认)
git reset --hard HEAD~1 # 撤销提交,丢弃所有修改
git revert <commit> # 创建新提交来撤销指定提交
git revert -n <commit> # 撤销但不自动提交

恢复删除

git reflog                                 # 查看操作历史
git reset --hard HEAD@{n} # 恢复到指定操作
git checkout -- <file> # 恢复误删文件
git restore --source=HEAD <file> # 恢复文件(新语法)

储藏操作

git stash                                  # 储藏当前修改
git stash push -m "message" # 储藏并命名
git stash -u # 储藏包括未跟踪文件
git stash list # 查看储藏列表
git stash pop # 应用并删除最新储藏
git stash apply # 应用但不删除
git stash apply stash@{n} # 应用指定储藏
git stash drop stash@{n} # 删除指定储藏
git stash clear # 清除所有储藏
git stash show -p # 查看储藏内容

标签操作

git tag                                    # 列出所有标签
git tag <name> # 创建轻量标签
git tag -a <name> -m "message" # 创建附注标签
git tag <name> <commit> # 为历史提交打标签
git tag -d <name> # 删除本地标签
git push origin <tag> # 推送标签
git push origin --tags # 推送所有标签
git push origin --delete <tag> # 删除远程标签
git checkout <tag> # 检出标签(分离 HEAD)
git checkout -b <branch> <tag> # 从标签创建分支

文件操作

git rm <file>                              # 删除文件(工作区+暂存区)
git rm --cached <file> # 只从暂存区删除
git rm -r <directory> # 删除目录
git mv <old> <new> # 重命名文件
git clean -fd # 删除未跟踪的文件和目录
git clean -fdn # 预览将要删除的内容
git clean -i # 交互式清理

调试命令

Bisect(二分查找)

git bisect start                           # 开始二分查找
git bisect bad # 标记当前提交有问题
git bisect good <commit> # 标记正常提交
git bisect reset # 退出二分查找
git bisect run <script> # 自动化二分查找

Blame(追溯)

git blame <file>                           # 查看文件每行的修改信息
git blame -L 10,20 <file> # 查看指定行范围
git blame -w <file> # 忽略空白字符变化
git blame -C <file> # 检测移动/复制的代码

Grep(搜索)

git grep "pattern"                         # 搜索代码
git grep -n "pattern" # 显示行号
git grep -i "pattern" # 忽略大小写
git grep -l "pattern" # 只显示文件名
git grep -w "word" # 搜索单词
git grep -e "p1" -e "p2" # 搜索多个模式
git grep "pattern" -- "*.js" # 只搜索 js 文件

子模块

git submodule add <url>                    # 添加子模块
git submodule add <url> <path> # 添加到指定路径
git submodule init # 初始化子模块配置
git submodule update # 更新子模块
git submodule update --init --recursive # 递归初始化和更新
git submodule status # 查看子模块状态
git submodule foreach git pull # 在所有子模块执行命令
git submodule deinit <path> # 清理子模块配置

Git LFS

git lfs install                            # 初始化 Git LFS
git lfs track "*.psd" # 追踪文件类型
git lfs track # 查看追踪规则
git lfs ls-files # 列出 LFS 文件
git lfs pull # 拉取 LFS 文件
git lfs push --all origin # 推送所有 LFS 文件
git lfs migrate import --include="*.psd" # 迁移历史文件到 LFS

Worktree(多工作目录)

git worktree add <path>                    # 创建新工作树
git worktree add <path> <branch> # 检出指定分支到新工作树
git worktree add -b <new-branch> <path> # 创建新分支并检出
git worktree list # 列出所有工作树
git worktree remove <path> # 删除工作树
git worktree remove --force <path> # 强制删除(有未提交修改)
git worktree prune # 清理已删除工作树的元数据
git worktree lock <path> # 锁定工作树
git worktree unlock <path> # 解锁工作树
git worktree move <old> <new> # 移动工作树

Sparse Checkout(稀疏检出)

git sparse-checkout init                   # 初始化稀疏检出
git sparse-checkout set <dir1> <dir2> # 设置检出目录
git sparse-checkout add <dir> # 添加检出目录
git sparse-checkout list # 查看当前设置
git sparse-checkout disable # 禁用稀疏检出
git sparse-checkout reapply # 重新应用稀疏检出规则
# 克隆时启用稀疏检出
git clone --filter=blob:none --sparse <url>

自动维护

git maintenance start                      # 启用自动维护
git maintenance stop # 停止自动维护
git maintenance run # 手动运行维护
git maintenance run --schedule=hourly # 运行每小时任务
git maintenance run --schedule=daily # 运行每天任务
git maintenance run --schedule=weekly # 运行每周任务
git maintenance register # 注册仓库到维护列表
git maintenance unregister # 从维护列表移除

维护命令

git gc                                     # 垃圾回收
git gc --aggressive # 深度垃圾回收
git fsck # 检查仓库完整性
git prune # 清理不可达对象
git count-objects -vH # 查看对象存储统计
git repack # 重新打包对象

底层命令(Plumbing)

git hash-object <file>                     # 计算对象哈希值
git cat-file -t <hash> # 查看对象类型
git cat-file -p <hash> # 查看对象内容
git rev-parse HEAD # 解析引用到哈希值
git update-ref refs/heads/test <hash> # 更新引用

常用工作流

功能分支工作流

# 1. 更新主分支
git checkout main
git pull origin main

# 2. 创建功能分支
git checkout -b feature/new-feature

# 3. 开发并提交
git add .
git commit -m "feat: 添加新功能"

# 4. 保持与主分支同步
git fetch origin
git rebase origin/main

# 5. 推送到远程
git push -u origin feature/new-feature

# 6. 创建 Pull Request(在 GitHub/GitLab 上操作)

# 7. 合并后清理
git checkout main
git pull origin main
git branch -d feature/new-feature

紧急修复工作流

# 1. 从 main 创建热修复分支
git checkout main
git pull origin main
git checkout -b hotfix/urgent-fix

# 2. 修复并提交
git add .
git commit -m "fix: 修复紧急问题"

# 3. 推送并创建 PR
git push -u origin hotfix/urgent-fix

# 4. 合并到 main 后
git checkout main
git pull origin main

# 5. 合并到 develop(如果有)
git checkout develop
git merge main
git push origin develop

发布版本工作流

# 1. 创建发布分支
git checkout -b release/v1.0.0 develop

# 2. 版本准备工作
# 更新版本号、更新日志等
git add .
git commit -m "chore: 准备 v1.0.0 发布"

# 3. 合并到 main 并打标签
git checkout main
git merge --no-ff release/v1.0.0
git tag -a v1.0.0 -m "版本 1.0.0"

# 4. 推送
git push origin main --tags

# 5. 合并回 develop
git checkout develop
git merge --no-ff release/v1.0.0
git push origin develop

# 6. 清理发布分支
git branch -d release/v1.0.0
git push origin --delete release/v1.0.0

常见问题快速解决

问题解决方案
推送被拒绝git pull --rebase 然后 git push
撤销最后一次提交git reset --soft HEAD~1
撤销已推送的提交git revert HEAD
恢复误删分支git reflog 找到后 git checkout -b branch hash
合并冲突手动编辑冲突文件,git addgit commit
撤销 git addgit restore --staged <file>
撤销工作区修改git restore <file>
查看谁修改了某行git blame -L line file
找出引入 bug 的提交git bisect start 然后 git bisect bad/good

.gitignore 模板

# 依赖目录
node_modules/
vendor/
venv/
__pycache__/

# 构建输出
dist/
build/
*.exe
*.dll
*.so
*.class
target/

# IDE 和编辑器
.idea/
.vscode/
*.swp
*.swo
*.sublime-*
.DS_Store

# 日志和临时文件
*.log
logs/
tmp/
temp/
*.tmp

# 环境配置
.env
.env.local
.env.*.local
*.local

# 测试覆盖率
coverage/
.nyc_output/
htmlcov/

# 敏感文件(应使用环境变量)
secrets/
*.pem
*.key
credentials.json

小结

本速查表涵盖了 Git 最常用的命令,按功能分类整理以便快速查阅。建议打印出来放在手边,随时参考。

参考资料