我使用 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
答案 0 :(得分:0)
git rebase Master Develop
此命令将A
,B
,C
和D
应用于S
上。由于A
和B
的更改已包含在S
中,因此将跳过它们。将仅重新应用C
和D
。 Develop
的历史记录将为:
I--S--C'--D' :Develop
Master
的历史记录未更改:
I--S :Master
在重新设置基准期间,您可能会遇到冲突。
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。这只是一个粗略的模拟。可能会跳过某些提交,例如合并提交和其他更改已预先包含其更改的提交。