git rebase 的使用场景
git rebase 的基本概念
git rebase 是一种用于将一个分支的提交记录移动到另一个分支的基点的操作。与 git merge 不同,rebase 会重新应用提交,使得提交历史更加线性化。
git rebase 的使用场景
- 整理提交历史:将多个提交合并为一个或重新排列提交顺序。
- 同步分支:将当前分支的提交基于目标分支的最新提交重新应用。
- 避免合并提交:保持提交历史的线性,避免不必要的合并节点。
git rebase 的基本语法
git rebase <目标分支>
例如,将当前分支的提交基于 main
分支的最新提交重新应用:
git checkout feature
git rebase main
交互式 rebase
交互式 rebase 允许在重新应用提交时修改、合并或删除提交。使用 -i
参数启动交互式模式:
git rebase -i <目标分支或提交哈希>
进入交互式界面后,可以对提交进行以下操作:
pick
:保留提交。squash
:将提交合并到前一个提交中。edit
:暂停 rebase,允许修改提交。drop
:删除提交。
解决冲突
在 rebase 过程中可能会遇到冲突,需要手动解决:
- 编辑冲突文件,标记冲突已解决。
- 使用
git add <文件>
将文件标记为已解决。 - 继续 rebase 过程:
git rebase --continue
如果放弃 rebase 过程:
git rebase --abort
rebase 的注意事项
- 不要对公共分支使用 rebase:rebase 会重写提交历史,影响其他协作者的工作。
- 备份分支:在复杂的 rebase 操作前,建议创建备份分支。
- 谨慎使用 force push:rebase 后可能需要
git push --force
,但需确保不与团队协作冲突。
rebase 与 merge 的区别
- merge:保留原始提交历史,生成合并提交。
- rebase:重写提交历史,使提交线性化。
示例:合并多个提交
- 启动交互式 rebase:
git rebase -i HEAD~3
- 在编辑界面中将后两个提交标记为
squash
:
pick abc123 Commit 1
squash def456 Commit 2
squash ghi789 Commit 3
- 保存退出后,git 会提示编辑最终的提交信息。
示例:同步分支
将 feature
分支基于 main
分支的最新提交重新应用:
git checkout feature
git rebase main