如何将压缩的提交从master传播到开发和特征分支

时间:2019-03-11 08:49:42

标签: git rebase squash git-squash

我使用 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

1 个答案:

答案 0 :(得分:0)

git rebase Master Develop

此命令将ABCD应用于S上。由于AB的更改已包含在S中,因此将跳过它们。将仅重新应用CDDevelop的历史记录将为:

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

Master的历史记录未更改:

I--S              :Master

在重新设置基准期间,您可能会遇到冲突。

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

ABCcommit-ish。这只是一个粗略的模拟。可能会跳过某些提交,例如合并提交和其他更改已预先包含其更改的提交。