如何传播从master到开发和功能分支的压缩提交

问题描述 投票:0回答:1

我使用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 squash git-squash
1个回答
0
投票
git rebase Master Develop

此命令将ABCD应用于S。因为AB的变化已经被包含在S中,所以它们被忽略了。只有CD将被重新申请。 Develop的历史将是:

I--S--C'--D'      :Develop

Master的历史没有变化:

I--S              :Master

您可能会在rebase期间遇到冲突。如果有的话,

  1. 运行git status查找冲突的文件;
  2. 编辑文件,直到他们有正确的内容;
  3. 运行git add <files>;
  4. 运行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

ABCcommit-ish。这只是一个粗略的模拟。某些提交可能会被跳过,例如merge-commit和commit,其更改已事先由其他提交包含在内。

© www.soinside.com 2019 - 2024. All rights reserved.