基础的 commit、push、pull 只是 Git 的皮毛。要高效协作和处理复杂场景,需要掌握进阶命令。
一、rebase:变基
rebase 把当前分支的提交"挪"到另一个分支顶端,让历史更线性。
# feature 分支基于过时的 main
git checkout feature
git rebase main # 把 feature 的提交重放到最新 main 上
对比 merge:merge 会产生合并提交,历史是网状的;rebase 让历史线性整洁。
黄金法则:不要 rebase 已经推到公共分支的提交,否则会给同事造成地狱。rebase 只用于本地未共享的提交。
二、解决 rebase 冲突
git rebase main
# 冲突时:
# 1. 手动解决冲突文件
# 2. git add .
# 3. git rebase --continue
# 或放弃:git rebase --abort
三、cherry-pick:摘樱桃
把某个特定提交应用到当前分支,不需要整个分支合并。
git cherry-pick abc123 # 把提交 abc123 摘过来
场景:在 main 修了个 bug,想把这个修复同时应用到 release 分支。
四、stash:暂存
工作做到一半要切分支,又不想提交半成品?
git stash # 暂存当前改动
git checkout other # 切走办事
git checkout original
git stash pop # 恢复改动
五、reflog:救命稻草
误删分支、reset 错了?reflog 记录所有操作,能找回:
git reflog # 看所有 HEAD 移动记录
# 找到误删前的 commit
git reset --hard abc123 # 回到那个点
六、reset vs revert
git reset --hard:删除提交(危险,重写历史)git revert:新建反向提交(安全,保留历史)- 公共分支用 revert,本地用 reset
七、团队工作流
常见的 Git Flow:
- main:生产分支,只合并稳定的
- develop:开发集成分支
- feature/*:功能分支,完成后合并回 develop
- hotfix/*:紧急修复,合并到 main 和 develop
八、小结
Git 进阶命令是处理复杂场景的利器。rebase 整洁历史、cherry-pick 精准移植、stash 灵活暂存、reflog 终极后悔药。多在实际项目中用,熟能生巧。