合并期间忽略还原的更改

时间:2013-11-18 15:07:59

标签: git git-merge git-revert

我的提交树如下所述:

--(+A)--(+B)-+-(-B)--(+E)--(master: AE)
              \
               +--(+C)--(+D)--(branch: ABCD)

某些更改已在中恢复。我们需要将来自分支的更改合并到还原还原提交。

是否存在一步法?或者在合并分支之前只有一种方法是 cherry-pick (B) master

P.S。最终必须如下所示:(ABCDE) - 订单并不重要

6 个答案:

答案 0 :(得分:1)

如果您必须将ABCDE作为提交的顺序,则需要cherry-pick C和D.这将最终得到(A) - (+ B) - ( - B) - (E ) - (C) - (D)。然后你可以git rebase,你可以删除(-B)并将C和D重新排序到E之前。

如果您这样做,那么您不想合并您的分支。 git cherry-pick创建一个具有相同更改的新提交。因此,合并时可能会导致一些问题。

http://git-scm.com/book/en/Git-Branching-Rebasing#The-Perils-of-Rebasing

如果您正在处理远程分支,则推送所有这些提交。你不应该这样做。您正在更改远程历史记录,这可能会导致其他人获得更改的问题。只需merge分支到主服务器,正确解决任何冲突,您将最终得到您正在寻找的状态的代码。有一个很好的线性git历史很好,但并不总是有必要。在日志中进行恢复提交并不是件坏事。

答案 1 :(得分:1)

我遇到了一个严重的问题,但我不能删除提交,也不能重新排序。我需要重新绑定分支ABCD才能获得正确的提交历史记录。我也想避免再次申请B.这就是我如何处理这种情况的原因。

private DoubleProperty r = new SimpleDoubleProperty(0);
private DoubleProperty g = new SimpleDoubleProperty(0);
private DoubleProperty b = new SimpleDoubleProperty(0);

circle.fillProperty().bind(Bindings.createObjectBinding(() -> Color.rgb(r.getValue().intValue(), g.getValue().intValue(), b.getValue().intValue()), r, g, b));

获得分支AB-B-BEC' D'可以很容易地合并到掌握或用于进一步发展。

答案 2 :(得分:1)

我会这样做:

git checkout branch
git merge $minusB^    # only if -B is not right after the fork point
git merge -s ours $minusB
git merge master

也就是说,在B的反转之前合并一切,然后合并B的反转,但忽略它引入的变化,最后合并其余的主。

答案 3 :(得分:0)

一些想法:

  • 你可以改变主人并跳过-B
  • 你可以放弃整个主人并将主HEAD设置为D和cherrypick E。
  • 但也许最容易的就是你提到樱桃挑选B再次掌握。

答案 4 :(得分:0)

根据提供的答案,没有一步到位的方法来达到目标​​。 我认为处理上述情况的更好方法是遵循分支方案:

--(+A)--(+B)--(-B)-+-(+E)--(master: AE)
                    \
                     +--(+B)--(+C)--(+D)--(branch: ABCD)

答案 5 :(得分:0)

--(+A)--(+B)-+-(-B)--(+E)--(master: AE)
              \
               +--(+C)--(+D)--(branch: ABCD)

如果您的网状树在上方,并且您希望在合并后使用ABCDE。您可以在(-B)处创建一个新的分支,例如“ revert -B”,然后执行git revert HEAD,因此,您将拥有与(+ B)相同的所有内容,此时,您可以安全地合并分支“ ABCD”到当前分支没有任何冲突。最后,结帐以掌握并合并分支“ revert -B”,完成。