1864 字
9 分钟
Git 常用命令速查手册
配置
# 设置用户名和邮箱(必做)git config --global user.name "Your Name"git config --global user.email "you@example.com"
# 设置默认分支名git config --global init.defaultBranch main
# 设置别名git config --global alias.co checkoutgit config --global alias.br branchgit config --global alias.st statusgit config --global alias.lg "log --oneline --graph --all"
# 查看所有配置git config --list仓库操作
# 初始化仓库git init
# 克隆仓库git clone https://github.com/user/repo.gitgit clone git@github.com:user/repo.git
# 克隆指定分支git clone -b dev https://github.com/user/repo.git暂存与提交
# 查看文件状态git statusgit status -s # 简短格式
# 暂存文件git add file.txt # 暂存单个文件git add src/ # 暂存整个目录git add -A # 暂存所有变更(新增+修改+删除)git add -u # 暂存修改和删除,不含新增git add -p # 交互式选择暂存
# 撤销暂存git restore --staged file.txt
# 提交git commit -m "feat: 添加登录页"git commit -am "fix: 修复样式问题" # 暂存已跟踪文件并提交(跳过 git add)git commit --amend -m "新的提交信息" # 修改最近一次提交信息git commit --amend --no-edit # 追加到最近一次提交,不修改信息提交信息规范
常用前缀:feat(新功能)、fix(修复)、docs(文档)、refactor(重构)、style(格式)、test(测试)、chore(杂项)。
git commit -m "feat: 添加用户注册"git commit -m "fix: 修复空密码登录 500 错误"git commit -m "refactor: 提取 token 工具函数"分支操作
# 查看分支git branch # 本地分支git branch -r # 远程分支git branch -a # 所有分支git branch -v # 分支最后一次提交
# 创建分支git branch feature-logingit checkout -b feature-login # 创建并切换git switch -c feature-login # 同上(Git 2.23+)
# 切换分支git checkout maingit switch main # 推荐
# 删除分支git branch -d feature-login # 安全删除(已合并)git branch -D feature-login # 强制删除(未合并也删)
# 删除远程分支git push origin --delete feature-login
# 重命名分支git branch -m old-name new-name合并与变基
# 合并分支(保留完整历史)git merge feature-login
# 合并并压缩提交git merge --squash feature-login
# 变基(线性历史,更干净)git rebase main # 在 feature 分支上执行,把当前分支接到 main 最新提交上
# 交互式变基(用来整理提交历史)git rebase -i HEAD~3 # 整理最近 3 个提交
# 变基时遇到冲突git rebase --continue # 解决冲突后继续git rebase --skip # 跳过当前提交git rebase --abort # 取消整个变基
# 合并冲突时git merge --abort # 取消合并远程仓库
# 查看远程仓库git remote -v
# 添加远程仓库git remote add origin https://github.com/user/repo.git
# 修改远程地址git remote set-url origin git@github.com:user/repo.git
# 删除远程仓库git remote remove origin拉取与推送
# 拉取代码git pull # = git fetch + git mergegit pull --rebase # = git fetch + git rebase(推荐,保持历史线性)
# 仅获取远程更新(不合并)git fetchgit fetch --prune # 同时清理本地已删除的远程分支引用
# 推送git push origin maingit push -u origin main # 首次推送并建立追踪关系git push --force-with-lease # 安全强制推送(检查远程是否有新提交)git push --force # 危险!强制推送,覆盖远程查看历史
# 提交日志git loggit log --oneline # 一行一条git log --oneline --graph --all # 图形化分支历史git log --author="John" # 按作者过滤git log --since="2026-01-01" # 按时间过滤git log -p file.txt # 查看某文件的变更历史git log -3 # 最近 3 条
# 查看某次提交详情git show HEADgit show abc1234git show abc1234 --stat # 只看变更文件列表
# 查看谁改了什么git blame file.txtgit blame -L 10,30 file.txt # 只看 10-30 行比较差异
# 工作区 vs 暂存区git diff
# 暂存区 vs 最新提交git diff --stagedgit diff --cached # 同上
# 工作区 vs 最新提交git diff HEAD
# 比较两个分支git diff main..feature-logingit diff main...feature-login # feature 分支独有改动(三点语法)
# 比较两个提交git diff abc1234 def5678撤销变更
# 丢弃工作区改动git restore file.txtgit checkout -- file.txt # 旧写法
# 丢弃所有工作区改动git restore .
# 撤销暂存git restore --staged file.txt
# 回退提交(保留工作区改动)git reset --soft HEAD~1 # 撤销 commit,改动回到暂存区git reset HEAD~1 # 默认 --mixed:撤销 commit,改动回到工作区git reset --hard HEAD~1 # 撤销 commit,丢弃所有改动(危险!)
# 安全撤销——创建新提交来抵消旧提交git revert abc1234git revert HEAD # 撤销最近一次提交储藏
临时保存未完成的改动,切换分支处理紧急任务。
git stash # 储藏当前改动git stash save "WIP: 修复认证 bug"git stash list # 查看储藏列表git stash pop # 恢复最近一次储藏并删除记录git stash pop stash@{1} # 恢复指定储藏git stash apply # 恢复储藏但不删除记录git stash drop stash@{0} # 删除指定储藏git stash clear # 清空所有储藏标签
# 创建标签git tag v1.0.0 # 轻量标签git tag -a v1.0.0 -m "发布 v1.0.0" # 附注标签(推荐)
# 为历史提交打标签git tag -a v0.9.0 abc1234 -m "预发布版本"
# 查看标签git taggit tag -l "v1.*" # 通配符过滤git show v1.0.0
# 推送标签git push origin v1.0.0 # 推送单个标签git push origin --tags # 推送所有标签
# 删除标签git tag -d v1.0.0 # 删除本地git push origin --delete v1.0.0 # 删除远程摘樱桃
将特定提交应用到当前分支。
# 单个提交git cherry-pick abc1234
# 多个提交git cherry-pick abc1234 def5678
# 连续范围(范围不包含 start 的提交)git cherry-pick abc1234..def5678
# 遇到冲突git cherry-pick --continuegit cherry-pick --abort应急救火
# 查看所有操作记录(救命命令)git reflog
# 回到某个 reflog 记录的状态git reset --hard HEAD@{2}
# 找回误删的分支git checkout -b recovered-branch HEAD@{5}
# 修改最近一次提交的作者git commit --amend --author="Name <email>"
# 撤销某次 commit 而不丢失之后的改动git revert <bad-commit>
# 查看某个文件在某个提交时的内容git show abc1234:path/to/file.txt工作流速查
# === 日常开发 ===git pull --rebase # 拉取最新代码git switch -c feat/new-thing # 创建功能分支# ... 写代码 ...git add -Agit commit -m "feat: 完成功能开发"git push -u origin feat/new-thing # 推送并创建 PR
# === 合并到 main ===git switch maingit pull --rebasegit merge feat/new-thinggit push origin main
# === 合并后清理 ===git branch -d feat/new-thing # 删除本地分支git push origin --delete feat/new-thing # 删除远程分支git fetch --prune # 清理本地远程分支引用
# === 从 PR 拉取代码到本地测试 ===git fetch origin pull/<PR-ID>/head:pr-<PR-ID>git switch pr-<PR-ID>常见场景
场景一:提交到错误分支
改动写在了 feature-a,但应该属于 feature-b:
git stash # 储藏改动git switch feature-bgit stash pop # 恢复改动git add -A && git commit -m "feat: 完成功能"场景二:误提交了不该提交的文件
git reset --soft HEAD~1 # 撤销 commit,改动回到暂存区git restore --staged bad-file.txt # 取消暂存该文件git commit -m "修正提交"场景三:推送被拒绝(远程有新提交)
git pull --rebase # 拉取并变基# 解决冲突(如果有)git push origin main场景四:合并多个提交为一个
git rebase -i HEAD~3 # 编辑最近 3 个提交# 编辑器中:保留第一个 pick,其余改为 squash(s) 或 fixup(f)# 保存退出,编辑合并后的提交信息git push --force-with-lease # 注意:rebase 后需强制推送 Git 常用命令速查手册
https://blog.syomega.top/posts/git-common-commands/