将主分支的频繁合并历史压缩为一个

时间:2018-10-08 06:30:15

标签: git git-merge git-squash

例如,我刚刚将master分支合并到我的feature分支。然后有人向大师推了些新东西。所以我再次合并以跟上。然后有人再次推动...我又合并了。如何压缩之前的合并,以便将两个合并操作合并为一个?

我该如何转动:

o---o---A---B---C---D---E
         \       \   \   \
          F---G---H---I---J

对此:

o---o---A---B---C---D---E
         \               \
          F---G-----------J'

其中J和J'包含完全相同的代码。

2 个答案:

答案 0 :(得分:1)

如果自G以来仅对功能进行合并提交,则可以将分支重置为该提交(使用--hard来重置工作副本文件),然后重做合并:

git checkout feature
git reset --hard G
git merge master

您还可以使用git rebase master代替git merge master,以便您的分支仅包含提交F'G',是从master上的E分支出来的。

答案 1 :(得分:1)

此方法通过将以前解决的更改重播到合并提交中,从而避免了重新解决合并冲突的需要。

GET /_search
{
    "query": {
        "match_phrase" : {
            "message" : "green elephant"
        }
    }
}

我们首先删除旧的合并以创建修剪后的功能分支,然后从母版创建干净的功能分支,使用git checkout feature git diff master > feature.patch git reset --hard G git branch --move trimmed_feature git checkout -b feature master git merge --strategy ours trimmed_feature --no-edit git apply feature.patch --index git commit --amend --message "Merge branch 'master' into feature" git branch -D trimmed_feature 合并到修剪后的功能分支中,以忽略更改,然后重新应用先前解决的功能从补丁中更改。