我的使用
bash
git checkout feature # 本地分支
git pull origin main --rebase # 目标分支
git pull origin feature --rebase
git push origin feature
git rebase
是 Git 中用于重写提交历史的强大工具,可将分支的提交移动到新的基点上,使历史更线性。以下是其核心使用方式及注意事项:
1. 基本使用:将当前分支变基到目标分支
bash
# 假设当前在 feature 分支,将 main 分支的更新作为新基底
git checkout feature
git rebase main
-
作用 :将
feature
分支的提交逐个应用到main
分支的最新提交之后。 -
冲突处理 :遇到冲突时,解决后执行:
bashgit add <解决的文件> git rebase --continue # 继续 git rebase --abort # 放弃变基,回到原始状态
2. 交互式变基(整理提交历史)
bash
git rebase -i HEAD~3 # 修改最近3次提交
- 常用操作 :
pick
:保留提交(默认)。squash
:合并到前一个提交,保留提交信息。fixup
:合并到前一个提交,丢弃当前提交信息。reword
:修改提交信息。edit
:暂停以修改提交内容。
- 流程:编辑提交列表后保存,按提示操作(如合并提交需编辑新信息)。
3. 将本地分支变基后推送到远程
bash
git push origin feature --force-with-lease
- 注意:仅对未与他人共享的分支使用强制推送,避免扰乱他人工作。
4. 常见场景
场景1:同步主分支更新到特性分支
bash
git checkout feature
git rebase main # 将 feature 的基点到 main 的最新提交
场景2:合并多个提交为单个提交
bash
git rebase -i HEAD~3
# 在编辑器中将后两次提交标记为 squash 或 fixup
场景3:修改旧提交信息
bash
git rebase -i HEAD~3
# 将对应提交的 pick 改为 reword,保存后编辑信息
5. 注意事项
- 适用场合 :
- 本地分支:未推送的提交可自由变基。
- 公共分支:避免变基已推送的历史,以免影响协作。
- 与
merge
的区别 :merge
保留分支历史,生成合并提交。rebase
创造线性历史,无额外合并节点。
- 风险控制 :
- 变基前备份分支(如创建临时分支)。
- 使用
git reflog
恢复误操作。
6. 变基后合并到主分支
bash
git checkout main
git merge feature # 快进合并(因历史线性,无冲突)
掌握 git rebase
可显著提升提交历史的清晰度,但需牢记:"本地变基,远程谨慎"。通过练习和谨慎操作,逐步熟悉其灵活性和风险。