我的提交树如下所述:
--(+A)--(+B)-+-(-B)--(+E)--(master: AE)
\
+--(+C)--(+D)--(branch: ABCD)
某些更改已在主中恢复。我们需要将来自分支的更改合并到主还原还原提交。
是否存在一步法?或者在合并分支之前只有一种方法是 cherry-pick (B) master ?
P.S。最终主必须如下所示:(ABCDE) - 订单并不重要
答案 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)
一些想法:
答案 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”,完成。