Git: 如何修改旧合并(在一系列合并中)?
Git: how to amend an old merge (in a series of merges)?
我的情况是这样的:
(branch 1) A -- B -- C
\
(dev br) E -- F -- G -- H
/ /
(branch 2) I -- J -- K -- L
一切正常。不幸的是,我发现我需要对 F 进行更改(post 在 J 和 E 之间提交),所以我试图完成以下操作:
(branch 1) A -- B -- C
\
(dev br) E -- F' -- G -- H
/ /
(branch 2) I -- J -- K -- L
我最初的方法是再次提交 dev br
上的修复并进行变基并将其压缩为 F。但是,这使我解决了 C-G 合并和 L-H 合并的所有合并冲突再次,这是相当复杂的,我不想做。
下一次尝试,我基本上检查了 F,进行了更改,然后在上面挑选了 G。这做出了正确的更改,我不必解决太多问题。但是,现在 git 不认为这是合并(因为我猜它是精心挑选的,尽管我提供了 -m 命令)。有没有办法不丢失合并信息?
我也用 rebase 尝试过,运行 它作为 git rebase --onto F' C G
,但这也让我经历了所有以前的提交(A-C,但实际上还有更多)并解决了他们再次发生冲突。
我该怎么做才不会发疯?我敢肯定一定有一个正确的方法来做到这一点。
I'll give it until tomorrow to see if anyone knows any sweet git tricks.
好的:给你一个"Git trick"。
根据您的描述,cherry-pick 是最有前途的方法。
"However, now Git doesn't think that this is a merge".
但它可以。
将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
的合并,同时保留 cherry-pick 的结果完好无损。
您可能需要为 H
重复该操作,您就完成了。
(OP Catsunami mentioned below 需要 git stash
才能允许合并继续进行)
我的情况是这样的:
(branch 1) A -- B -- C
\
(dev br) E -- F -- G -- H
/ /
(branch 2) I -- J -- K -- L
一切正常。不幸的是,我发现我需要对 F 进行更改(post 在 J 和 E 之间提交),所以我试图完成以下操作:
(branch 1) A -- B -- C
\
(dev br) E -- F' -- G -- H
/ /
(branch 2) I -- J -- K -- L
我最初的方法是再次提交 dev br
上的修复并进行变基并将其压缩为 F。但是,这使我解决了 C-G 合并和 L-H 合并的所有合并冲突再次,这是相当复杂的,我不想做。
下一次尝试,我基本上检查了 F,进行了更改,然后在上面挑选了 G。这做出了正确的更改,我不必解决太多问题。但是,现在 git 不认为这是合并(因为我猜它是精心挑选的,尽管我提供了 -m 命令)。有没有办法不丢失合并信息?
我也用 rebase 尝试过,运行 它作为 git rebase --onto F' C G
,但这也让我经历了所有以前的提交(A-C,但实际上还有更多)并解决了他们再次发生冲突。
我该怎么做才不会发疯?我敢肯定一定有一个正确的方法来做到这一点。
I'll give it until tomorrow to see if anyone knows any sweet git tricks.
好的:给你一个"Git trick"。
根据您的描述,cherry-pick 是最有前途的方法。
"However, now Git doesn't think that this is a merge".
但它可以。
将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
的合并,同时保留 cherry-pick 的结果完好无损。
您可能需要为 H
重复该操作,您就完成了。
(OP Catsunami mentioned below git stash
才能允许合并继续进行)