Git 常用命令速查手册:从日常提交到分支协作
1. 前言
Git 是日常开发中使用频率最高的工具之一,但命令多、参数杂,很多人只记得add、commit、push三板斧。本文把实际工作中最常用的 Git 命令按场景整理成一份速查手册,覆盖仓库初始化、日常提交、分支管理、远程协作、撤销回退、查看历史等高频操作,方便随时查阅。
2. 配置与初始化
2.1 全局配置
首次使用 Git 需要配置用户名和邮箱,提交记录会带上这些信息:
# 配置全局用户名和邮箱gitconfig--globaluser.name"Your Name"gitconfig--globaluser.email"you@example.com"# 查看当前配置gitconfig--list# 设置默认分支名为 maingitconfig--globalinit.defaultBranch main2.2 创建与克隆仓库
# 在当前目录初始化一个 Git 仓库gitinit# 克隆远程仓库到本地gitclone https://github.com/user/repo.git# 克隆到指定目录gitclone https://github.com/user/repo.git my-project# 只克隆最近一次提交(适合大仓库)gitclone--depth1https://github.com/user/repo.git3. 日常提交三板斧
这是使用频率最高的流程:修改文件 → 暂存 → 提交。
# 查看工作区状态gitstatus# 查看具体改动内容gitdiff# 暂存单个文件gitaddfile.txt# 暂存所有改动gitadd.# 提交并填写说明gitcommit-m"feat: 新增用户登录接口"# 跳过暂存区,直接提交已跟踪文件的改动gitcommit-am"fix: 修复空指针异常"提交信息建议遵循约定式提交(Conventional Commits)规范,常见前缀:
| 前缀 | 含义 |
|---|---|
feat | 新增功能 |
fix | 修复缺陷 |
docs | 文档变更 |
refactor | 重构(不改变功能) |
test | 测试相关 |
chore | 构建、依赖等杂项 |
4. 分支管理
分支是 Git 最核心的能力,多人协作几乎都围绕分支展开。
# 查看本地分支gitbranch# 查看所有分支(含远程)gitbranch-a# 创建并切换到新分支gitswitch-cfeature/login# 切换分支(旧写法)gitcheckout feature/login# 删除已合并的本地分支gitbranch-dfeature/login# 强制删除未合并的分支gitbranch-Dfeature/login# 重命名当前分支gitbranch-mnew-name提示:Git 2.23 之后推荐使用
git switch切换分支、git restore恢复文件,语义比git checkout更清晰。
5. 远程协作
# 查看远程仓库地址gitremote-v# 添加远程仓库gitremoteaddorigin https://github.com/user/repo.git# 拉取远程更新并合并gitpull# 拉取时使用变基,保持提交历史线性gitpull--rebase# 推送本地分支到远程gitpush-uorigin feature/login# 推送所有标签gitpush--tags# 删除远程分支gitpush origin--deletefeature/login6. 撤销与回退
这是最容易出问题的部分,务必区分清楚各命令的作用范围。
# 撤销工作区某个文件的修改(未暂存)gitrestore file.txt# 取消暂存(保留工作区改动)gitrestore--stagedfile.txt# 修改最近一次提交的说明gitcommit--amend-m"新的提交说明"# 回退到某个提交,保留改动到工作区gitreset--softHEAD~1# 回退到某个提交,改动进入暂存区gitreset--mixedHEAD~1# 回退到某个提交,丢弃所有改动(慎用)gitreset--hardHEAD~1# 生成一个反向提交来撤销某次提交(已推送时更安全)gitrevert<commit-hash>注意:
git reset --hard会丢弃未提交的改动,执行前请确认。已经推送到远程的提交,优先使用git revert而不是reset。
7. 查看历史与排查
# 查看提交历史gitlog# 单行简洁显示gitlog--oneline--graph--all# 查看某个文件的修改历史gitlog-pfile.txt# 查看某次提交的具体内容gitshow<commit-hash># 查看某行代码是谁改的gitblame file.txt# 搜索提交信息中包含关键字的提交gitlog--grep="登录"8. 暂存与临时保存
切换分支时手头改动没写完,可以用stash临时保存:
# 保存当前改动gitstash# 保存并添加说明gitstash push-m"登录功能开发中"# 查看暂存列表gitstash list# 恢复最近一次暂存并删除记录gitstash pop# 恢复指定暂存(保留记录)gitstash apply stash@{0}# 删除某条暂存记录gitstash drop stash@{0}9. 测试岗位高频命令
测试同学使用 Git 的场景与开发略有不同:更多是拉取最新代码、切换分支验证、查看改动范围、临时保存现场,以及定位「这个 bug 是哪次提交引入的」。下面按测试日常场景逐一整理。
9.1 拉取与切换:验证最新代码
# 拉取最新代码(测试前先同步,避免测到旧版本)gitpull--rebase# 查看当前所在分支,确认测的是哪个版本gitbranch# 切换到待测分支gitswitch feature/login# 查看所有分支(含远程),确认分支是否已推送gitbranch-a# 只拉取远程更新,不自动合并(先看清再决定)gitfetch origin9.2 查看改动范围:确认这次改了什么
测试最关心「本次提交改动了哪些文件」,可据此圈定回归范围:
# 查看最近几次提交的概览gitlog--oneline-10# 查看某次提交改了哪些文件gitshow--stat<commit-hash># 查看两个版本之间的差异文件列表gitdiff--name-only v1.0.0 v1.1.0# 查看两个分支之间的差异文件gitdiff--name-only main feature/login# 查看工作区未提交的改动gitstatusgitdiff9.3 定位问题:这个 bug 是哪次提交引入的
# 查看某个文件的逐行修改记录与责任人gitblame src/service/UserService.java# 查看某个文件的历史提交gitlog-p-- src/service/UserService.java# 按关键字搜索提交(如需求号、bug 号)gitlog--grep="BUG-1024"# 二分查找引入问题的提交(配合可执行的验证脚本)gitbisect startgitbisect bad# 当前版本有问题gitbisect good v1.0.0# 这个版本是好的# 之后按提示反复标记 good/bad,定位到具体提交gitbisect reset9.4 临时保存与现场保护
测试环境经常需要临时切分支复现问题,手头改动可以先存起来:
# 保存当前改动gitstash push-m"复现 BUG-1024 的临时改动"# 查看暂存列表gitstash list# 恢复并删除记录gitstash pop9.5 打标签:标记提测版本
提测时给版本打 tag,方便后续回溯和对比:
# 创建带说明的标签gittag-av1.2.0-m"提测版本 v1.2.0"# 推送标签到远程gitpush origin v1.2.0# 查看所有标签gittag-l9.6 测试岗位常用命令速查
| 场景 | 命令 |
|---|---|
| 测试前同步最新代码 | git pull --rebase |
| 确认当前分支 | git branch |
| 切换待测分支 | git switch <branch> |
| 看最近提交 | git log --oneline -10 |
| 看某次提交改了哪些文件 | git show --stat <hash> |
| 看两版本差异文件 | git diff --name-only v1.0 v1.1 |
| 定位某行代码责任人 | git blame <file> |
| 按 Bug 号搜提交 | git log --grep="BUG-1024" |
| 二分定位问题提交 | git bisect start |
| 标记提测版本 | git tag -a v1.2.0 -m "提测版本" |
提示:测试同学一般不需要
reset --hard、push -f这类破坏性操作;如果确实要回退,优先用git revert生成反向提交,避免影响他人。
10. 常见问题速查
| 场景 | 命令 |
|---|---|
| 提交信息写错了 | git commit --amend |
| 想撤销已推送的提交 | git revert <hash> |
| 误删分支想找回 | git reflog找到 hash 后git branch name <hash> |
| 冲突后放弃合并 | git merge --abort |
| 冲突后放弃变基 | git rebase --abort |
| 查看某文件某次改动 | git log -p -- file.txt |
11. 小结
Git 命令看似繁多,实际按场景归类后并不难记:日常提交用add/commit/push,分支协作用switch/merge/rebase,出问题先看status和log,回退前想清楚用reset还是revert。建议把本文当作速查表收藏,遇到具体场景时按需检索即可。测试岗位可重点关注第 9 节,围绕「同步代码、圈定改动范围、定位问题提交、标记提测版本」四件事展开,即可覆盖大部分日常需求。