如何将压扁的提交从 master 传播到 develop 和 feature 分支
How to propagate squashed commit from master to develop and feature branches
我使用 git rebase 将 master 中的初始提交压缩为一个提交,生成一个新的压缩提交,但在开发分支上,提交保持原样。如何在 master to develop 和其他功能分支中用新的压缩提交替换旧提交?
当前状态
I--A--B :Master
\ C--D :Develop
压缩后
I--S :Master
\ A--B--C--D :Develop
我想要的
I--S :Master
\ C--D :Develop
git rebase Master Develop
此命令将 A
、B
、C
和 D
应用到 S
。因为 A
和 B
的变化已经包含在 S
中,所以被跳过。只有 C
和 D
会被重新应用。 Develop
的历史将是:
I--S--C'--D' :Develop
而Master
的历史不变:
I--S :Master
rebase 过程中可能会遇到冲突。如果发生任何情况,
- 运行
git status
查找冲突文件;
- 编辑文件,直到它们具有正确的内容;
- 运行
git add <files>
;
- 运行
git rebase --continue
.
我对 git rebase --onto A B C
的理解,在 bash:
commits=$(git rev-list --reverse B..C)
# if C is not a branch name, it leads to detached HEAD state.
git checkout C
git reset A --hard
for c in $commits;do
git cherry-pick $c
done
A
、B
、C
为 commit-ish。这只是一个粗略的模拟。某些提交可能会被跳过,例如合并提交和更改已被其他提交预先包含的提交。
我使用 git rebase 将 master 中的初始提交压缩为一个提交,生成一个新的压缩提交,但在开发分支上,提交保持原样。如何在 master to develop 和其他功能分支中用新的压缩提交替换旧提交?
当前状态
I--A--B :Master
\ C--D :Develop
压缩后
I--S :Master
\ A--B--C--D :Develop
我想要的
I--S :Master
\ C--D :Develop
git rebase Master Develop
此命令将 A
、B
、C
和 D
应用到 S
。因为 A
和 B
的变化已经包含在 S
中,所以被跳过。只有 C
和 D
会被重新应用。 Develop
的历史将是:
I--S--C'--D' :Develop
而Master
的历史不变:
I--S :Master
rebase 过程中可能会遇到冲突。如果发生任何情况,
- 运行
git status
查找冲突文件; - 编辑文件,直到它们具有正确的内容;
- 运行
git add <files>
; - 运行
git rebase --continue
.
我对 git rebase --onto A B C
的理解,在 bash:
commits=$(git rev-list --reverse B..C)
# if C is not a branch name, it leads to detached HEAD state.
git checkout C
git reset A --hard
for c in $commits;do
git cherry-pick $c
done
A
、B
、C
为 commit-ish。这只是一个粗略的模拟。某些提交可能会被跳过,例如合并提交和更改已被其他提交预先包含的提交。