@TOC
Git 从入门到进阶:常用命令与高级用法全解析
Git 是目前最流行的分布式版本控制系统,广泛应用于软件开发中的代码管理、团队协作与持续集成。掌握 Git 不仅是程序员的基本功,更是高效协作和代码质量保障的关键。
本文将带你系统梳理 Git 的常用操作,深入讲解 高级功能与技巧,并提供 最佳实践建议,帮助你从“会用”迈向“精通”。
一、Git 常用用法(日常开发必备)
1. 初始化仓库
git init # 初始化一个新的本地 Git 仓库
git clone
git clone
💡 提示:git clone 会自动创建指向远程仓库的默认别名 origin。
2. 配置用户信息
# 全局配置(所有项目生效)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# 仅当前项目配置(优先级更高)
git config user.name "Project Name"
建议:确保邮箱与 GitHub/GitLab 账号一致,以便提交记录正确关联。
3. 查看状态与历史
git status # 查看工作区、暂存区状态(红色=未暂存,绿色=已暂存)
git status -s # 简洁模式(A=新增,M=修改,D=删除)
git log # 查看完整提交历史
git log --oneline # 每条提交显示为一行(含简短哈希和消息)
git log --graph # 图形化展示分支合并历史
git log --author="John" # 查看某人提交记录
git log --grep="fix" # 搜索提交信息中包含关键词的提交
git log -p
4. 添加与提交
git add
git add . # 添加当前目录所有变更(包括新文件和修改)
git add -u # 只添加已被跟踪的修改/删除文件(不包括新文件)
git add -A # 添加所有变更(等同于 git add . + git add -u)
git commit -m "描述性信息" # 提交到本地仓库,-m 后接提交说明
📝 提交信息规范建议:
使用动词开头(如 fix, add, update, refactor)
简洁明确,说明“做了什么”和“为什么”
示例:fix: prevent crash when user input is empty
5. 推送与拉取
git push origin main # 推送本地 main 分支到远程 origin
git push -u origin feature/login # 第一次推送时设置上游分支(后续可用 git push 直接推送)
git pull origin main # 拉取远程更新并自动合并(等价于 git fetch + git merge)
git fetch # 获取远程更新但不合并,可先查看差异再决定是否合并
⚠️ 注意:git pull 可能触发自动合并,若存在冲突需手动解决。
6. 分支操作
git branch # 列出所有本地分支(* 表示当前分支)
git branch
git checkout
git switch
git checkout -b
git merge
git branch -d
推荐工作流:使用 feature/*、bugfix/*、release/* 等命名空间管理分支。
7. 撤销与恢复操作
git restore
git restore --staged
git reset HEAD~1 # 撤销最后一次提交,保留更改在工作区
git reset --hard HEAD~1 # 彻底删除最后一次提交及所有更改(⚠️ 慎用!不可逆)
git commit --amend # 修改最后一次提交(可修改信息或添加遗漏文件)
# 注意:会改变提交哈希,不要用于已推送的提交!
场景示例:
忘记添加文件?git add forgotten.txt && git commit --amed
提交信息写错?git commit --amend -m "new message"
二、Git 高级用法(提升效率与掌控力)
1. 变基(Rebase):打造线性历史
git rebase main # 将当前分支的提交“变基”到 main 分支之上
git rebase -i HEAD~3 # 交互式变基,编辑/合并/重排最近3次提交
✅ 优点:
提交历史更整洁、线性,便于阅读
避免不必要的合并提交
⚠️ 重要警告:
永远不要在公共分支上使用 rebase(如 main、develop)
已推送的提交若被 rebase,会导致协作混乱
🛠️ 推荐场景:在功能分支开发完成后,合并前使用 git rebase main 同步最新代码。
2. 储藏(Stashing):临时保存工作进度
git stash # 临时保存工作区和暂存区的修改
git stash save "描述信息" # 添加备注(推荐做法)
git stash list # 查看所有储藏
git stash pop # 恢复最近一次储藏并删除
git stash apply # 恢复储藏但保留记录
git stash drop stash@{
0} # 删除指定储藏
git stash clear # 清空所有储藏
💼 使用场景:
正在开发中,需要切换分支处理紧急 bug
临时保存未完成代码,拉取最新代码后再恢复
3. 标签管理(Tagging):标记发布版本
git tag v1.0 # 创建轻量标签
git tag -a v1.0 -m "Release 1.0" # 创建带注释的标签(推荐)
git tag -d v1.0 # 删除本地标签
git push origin v1.0 # 推送单个标签
git push origin --tags # 推送所有本地标签
git push origin :refs/tags/v1.0 # 删除远程标签
建议:使用语义化版本号(SemVer),如 v1.2.3。
4. 检出特定版本
git checkout
git checkout -b hotfix/bug123
git checkout HEAD~2 # 回退两个提交
⚠️ 注意:“分离头指针”状态下提交不会属于任何分支,应及时创建分支保存。
5. 查看差异(Diff)
git diff # 工作区 vs 暂存区
git diff --staged # 暂存区 vs 最近一次提交
git diff HEAD # 工作区 vs 最近提交
git diff
git diff
实用技巧:结合 --color-words 查看单词级差异:
git diff --color-words
6. 修复提交(Amend)—— 精修你的提交
git commit --amend # 修改最后一次提交
git commit --amend --no-edit # 仅添加文件,不修改提交信息
典型用途:
补充遗漏的文件
修正提交信息拼写错误
合并小修小改为一个有意义的提交
警告:已推送的提交不要 amend,否则需强制推送(git push --force),影响团队协作。
7. 远程分支管理
git remote -v # 查看远程仓库地址
git remote add upstream
git push origin
git push origin --delete
git fetch --prune # 获取远程更新并清理已删除的远程分支引用
git branch -r # 查看所有远程分支
🔄 同步 fork 仓库:
git fetch upstream
git rebase upstream/main
git push origin main
8. 子模块(Submodule)—— 管理依赖项目
git submodule add
git submodule update --init --recursive # 初始化并更新所有子模块(克隆后执行)
git submodule foreach git pull # 批量更新所有子模块
⚠️ 注意事项:
子模块会记录特定提交,需手动更新
推荐替代方案:使用包管理器(如 npm、Maven)或 Git Subtree
9. 高级日志查询
git log --since="2 weeks ago" --until="1 week ago"
git log --oneline --graph --all # 查看所有分支的图形化历史
git log --pretty=format:"%h - %an, %ar : %s" # 自定义输出格式
git blame
git blame -L 10,20
git blame 是排查问题和了解代码背景的利器。
10. 二分查找(Bisect)—— 快速定位引入 Bug 的提交
git bisect start
git bisect bad # 当前版本有 bug
git bisect good v1.0 # 指定一个已知良好的版本
# Git 自动检出中间提交,你测试后标记:
git bisect good # 当前版本正常
git bisect bad # 当前版本仍有 bug
# 找到罪魁祸首后退出
git bisect reset
效率对比:传统方式可能需测试 N 次,bisect 仅需 log₂(N) 次。
11. Reflog(引用日志)—— Git 的“后悔药”
git reflog # 查看 HEAD 的操作历史(包括 reset、checkout、commit 等)
git reflog show main # 查看 main 分支的操作历史
git reset
n}> # 恢复到某个历史状态
git checkout
git branch recovery-branch # 创建分支保存
适用场景:
误删分支
reset --hard 后丢失提交
“我刚才在哪?” —— reflog 告诉你
reflog 默认保留 90 天,是恢复丢失工作的终极武器。
三、最佳实践与建议
实践
说明
✅ 小步提交
每次提交只做一件事,保持原子性,便于回滚和审查
✅ 清晰提交信息
使用规范格式(如 Conventional Commits),说明“做了什么”和“为什么”
✅ 频繁同步
定期 git fetch 或 git pull,避免长时间脱离主干导致大冲突
✅ 分支策略
使用 main/develop + feature/* + hotfix/* 的分支模型(如 Git Flow)
✅ 代码审查
通过 Pull Request / Merge Request 进行同行评审(Peer Review)
✅ .gitignore
合理配置忽略文件(日志、编译产物、本地配置等),避免误提交
✅ 使用 SSH 密钥
避免重复输入账号密码,提升安全性和便利性
✅ 定期清理
删除已合并的本地/远程分支,保持仓库整洁
四、常见问题与避坑指南
问题
解决方案
error: failed to push some refs
先 git pull 合并远程变更
merge conflict
手动编辑冲突文件,标记 <<<<<<<, =======, >>>>>>>,解决后 git add 并提交
fatal: not a git repository
确保在项目根目录执行,或运行 git init
Your branch is behind
执行 git pull 更新本地
cannot lock ref
执行 git fetch --prune 清理过期引用
五、总结
技能等级
掌握内容
入门
init, clone, add, commit, push, pull, status, log
熟练
branch, merge, stash, tag, diff, reset, checkout
进阶
rebase, bisect, reflog, submodule, blame, advanced log
精通
自定义 Git 配置、别名、钩子(hooks)、脚本自动化
最终建议:
多练习:创建测试仓库尝试各种操作
善用帮助:git help
学会“救”自己:reflog 和 reset 是你的朋友
遵循团队规范:统一分支命名、提交格式、工作流
扩展阅读推荐:
官方文档:git-scm.com/book/zh/v2
《Pro Git》第二版(免费在线)
Conventional Commits 规范
Git GUI 工具:VS Code 内置 Git、Sourcetree、GitKraken
掌握 Git,就是掌握了现代软件开发的“时间机器”与“协作引擎”。善用它,让你的开发更高效、更从容!