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 add 后 git commit |
| 撤销 git add | git 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 最常用的命令,按功能分类整理以便快速查阅。建议打印出来放在手边,随时参考。