彻底搞懂git rebase(gitrebase和merge应用场景)
- git
- 2024-03-10 07:49:28
- 9476
## Git Rebase
Git Rebase 是一个命令,用于将一系列提交从一个分支转移到另一个分支,同时保留它们的提交历史。
### 特征
- 非线性历史:Rebase 允许你重新组织提交历史,创建非线性历史记录。
- 合并冲突解决:Rebase 会在转移提交时自动解决冲突。
- 保持原有顺序:Rebase 保持提交的原始顺序,即使它们已被重新排列。
- 强制性推动:Rebase 会强制更新远程分支,即使其他开发人员已经推送了提交。
### 用例
- 修复错误并保持提交的上下文
- 重新组织提交以创建更清晰的历史记录
- 在合并之前解决合并冲突
- 重新定位提交到不同的分支
### 步骤
Rebase 的步骤如下:
1. 切换到目标分支:使用 git checkout 命令切换到要重定位提交的目标分支。
2. 获取源提交:使用 git fetch 命令获取源分支上包含要转移的提交的最新提交。
3. Rebase:使用 git rebase 命令,后面跟源分支的名称,例如:
git rebase origin/main
4. 解决冲突:Rebase 会自动尝试解决转移提交时的冲突。
如果遇到冲突,需要手动解决并进行提交。
5. 强制推送:如果需要,使用 -f 选项强制推送 rebased 分支到远程仓库:
git push -f origin head
### 示例
示例 1:修复错误
假设你发现一个错误,并希望在将其合并到 main 分支之前修复它。
你可以使用以下步骤进行 rebase:
1. 切换到 bugfix 分支:
git checkout bugfix
2. 获取 main 分支上的提交:
git fetch origin
3. Rebase bugfix 分支到 main 上:
git rebase origin/main
4. 修复冲突并提交:
# 修复冲突代码...
git add .
git commit -m "Fix bug"
5. 强制推送 bugfix 分支:
git push -f origin bugfix
示例 2:重新组织提交
假设你有几个提交,你想重新组织它们以创建更清晰的历史记录。
你可以使用以下步骤进行 rebase:
1. 切换到 wip 分支:
git checkout wip
2. 获取 main 分支上的提交:
git fetch origin
3. Rebase wip 分支到 main 上,使用 -i 选项进行交互式 rebase:
git rebase -i origin/main
4. 重新排列提交顺序并保存修改:
# 交互式 rebase 菜单中...
# 移动提交 3 到提交 1 之前
m 3 1
# 合并提交 2 和 4
s 2 4
# 保存更改
w
5. 解决冲突并提交:
# 修复冲突代码...
git add .
git commit -m "Reorganize commits"
6. 强制推送 wip 分支:
git push -f origin wip