git rebase 是一个充满争议的命令, 推崇者赞不绝口, 反对者避而远之;
命令方式
1 | # 在目标分支上实施 rebase |
1 | # 作为选项使用 |
配置方式
1 | # 分支级别配置 |
具体场景实战
如果线上有人发布完成, 主干分支已更新, 此时另一个待发布的分支想要 rebase master, 步骤如下:
(1) 提前拉取最新 commit, 保证本地 master 和 origin/master 同步,
并保证当前分支是需要 rebase 的目标分支:1
2git pull origin master
git checkout target_branch
(2) 执行 rebase:1
git rebase master
(3) 对每个 commit 处理冲突:1
2
3
4
5
6
7
8
9
10
11
12
13
14foreach (commit in target_branch from forked_position) {
# 需分三种情况:
# 情况一: 对于冲突文件, 完全采纳 master 分支的变更
git add <conflicted_files>
git rebase --skip
# 情况二: 对于冲突文件, target_branch 和 master 各有部分被采纳
git add <conflicted_files>
git rebase --continue
# 情况三: 对于冲突文件, 完全采纳 target_branch 分支的变更
git rebase --skip
}
(4) rebase 结束, 分三种情况:
rebase 成功, 推送变更:
1
2# 一定要加 --force, 否则提示与 orgin 分支冲突
git push --force origin target_branch中途不想再继续 rebase, 直接取消, 没有副作用, 恢复如初:
1
git rebase --abort
rebase 终止:
git rebase --quit