Git:如何修改旧的合并(在一系列合并中)?

时间:2016-08-30 05:12:49

标签: git merge rebase

我的情况有点像这样:

extract($_POST); // Doing this will break up your array keys into variables.

$sql   =  "INSERT INTO posts (id, title, date,body, author) VALUES (null, '". $title ."', NOW(), '".$body. "', '". $author."')";

$query =  mysqli_query($conn, $sql) or die(mysqli_error());

这一切都很好。不幸的是我发现我需要对F进行更改(在J和E之间提交后),所以我试图完成以下操作:

(branch 1) A -- B -- C
                      \
(dev br)     E -- F -- G -- H
                 /         /
(branch 2) I -- J -- K -- L

我的初始方法是使用(branch 1) A -- B -- C \ (dev br) E -- F' -- G -- H / / (branch 2) I -- J -- K -- L 上的修复程序进行另一次提交并执行rebase并将其压缩为F.但是,这使我能够再次解决CG合并和LH合并中的所有合并冲突,这是相当复杂的,我不想这样做。

接下来的尝试,我基本上检查了F,做了我的更改,然后樱桃选择了G顶部。这做了正确的改变,我没有太多解决。但是,现在git并不认为这是一个合并(因为我猜它是樱桃挑选,虽然我确实提供了-m命令)。有没有办法不丢失合并信息?

我也尝试使用rebase,运行它为dev br,但这也让我经历了所有以前的提交(A-C,但实际上还有更多)并再次解决他们的rebase冲突。

如何在不疯狂的情况下这样做?我确定必须有一个正确的方法来做到这一点。

1 个答案:

答案 0 :(得分:2)

  

直到明天我才会知道是否有人知道任何甜蜜的技巧。

好的:一个" Git技巧"对你而言 根据你的描述,樱桃挑选是最有前途的方法。

  

"但是,现在Git并不认为这是合并"。

但它可以。

F修改为F'后:

  • 在没有立即提交的情况下制作你的挑选

    git cherry-pick --no-commit -m 1 vG
    git stash
    
  • 添加合并信息(不使用ours策略重做任何合并)

    git merge -s ours -m "Gp" branch1
    git stash pop
    git commit --amend --no-edit
    

这会创建一个G'G素数或Gp),它会记录来自branch1的合并,同时保持樱桃选择的结果完好无损。

您可能需要为H重复此操作,并且您已完成。

(下面提到的OP Catsunami in the comments需要git stash以便允许合并继续进行)