我使用git rebase将master中的初始提交压缩为一个提交,生成一个新的压缩提交,但是在develop分支上,提交保持原样。如何用master中的新压缩提交替换旧提交以开发和其他功能分支?
当前状态
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
。我对baz中的git rebase --onto A B C
的理解:
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。这只是一个粗略的模拟。某些提交可能会被跳过,例如merge-commit和commit,其更改已事先由其他提交包含在内。