gpt4 book ai didi

Git:如何修改旧 merge (在一系列 merge 中)?

转载 作者:太空狗 更新时间:2023-10-29 13:42:50 25 4
gpt4 key购买 nike

我的情况看起来像这样:

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

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

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

我最初的方法是对 dev br 上的修复进行另一次提交,然后进行 rebase 并将其压缩为 F。但是,这使我解决了 C-G merge 和L-H 再次 merge ,这相当复杂,我不想这样做。

下一次尝试,我基本上检查了 F,进行了更改,然后在上面挑选了 G。这做出了正确的更改,我不必解决太多问题。但是,现在 git 不认为这是一个 merge (因为我猜它是精心挑选的,尽管我确实提供了 -m 命令)。有没有办法不丢失 merge 信息?

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

我该怎么做才能不发疯?我确信必须有一种正确的方法来做到这一点。

最佳答案

I'll give it until tomorrow to see if anyone knows any sweet git tricks.

好的:给你一个“Git 技巧”。
根据您的描述,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
  • 添加 merge 信息(不重做任何 merge ,使用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 in the comments 需要 git stash 以允许 merge 继续进行)

关于Git:如何修改旧 merge (在一系列 merge 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39219179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com