通过合并提交恢复修改,并在之后重新合并。

问题描述 投票:0回答:1

我在 X 分支工作,从 Y 分支接收交付,而 Y 分支是由其他开发人员维护的,我将 Y 分支合并到 X 分支,但需要将 Y 分支的一些错误提交恢复到'KKK'文件中,并在他们修复其他变化时继续工作。这就导致我在 X 分支中对文件 'KKK' [我通常从不碰它]进行了还原提交,这意味着 'KKK' 在我的分支中被还原为 'Version A' ,而在 Y 分支中继续工作。

当 "KKK "在 "Version I "时变得更成熟时,我又把Y分支合并到X分支,这次我希望 "KKK "能更新到 "Version I"。但git却在合并时自动将我的还原提交为 "版本A",而忽略了 "版本I"。文件仍然在 "版本A"。为什么会出现这种情况?是不是我的工作方式出了问题?

我感觉这与 "快进合并 "有关,但我不确定。我试着在这里将其可视化。

先谢谢你。

git merge revert
1个回答
1
投票

当你还原一些东西时,它意味着 "我不想要这个变化。曾经" (因为它已经坏了)。

当合并分支时,Git(或任何DVCS)只会合并 新变化 的新提交。你所还原的变更已经被合并了,所以它不会被重新合并(否则还原的整个意义就会是徒劳的--SCM怎么知道哪些是真正的还原,哪些不是?

从视觉上看。

A-B-M-C'--X-... <- branch a
   /     /
C-D-----E--..   <- branch b

通过提交 C 变革与承诺 C' 还原上述提交的变更。承诺 MX 都是合并。当你第一次调用合并来创建提交 M 百变 CD 被包括在内。当您第二次运行合并进行提交时 X的变化,只有 E 合并了,因为所有其他分支的变化 b 已有分支 a.

现在,如何将初始和后续的变化转化为分支。a? 重新恢复提交,换句话说,就是执行 git revert C' 合并前的分支 b 再次。这样一来,分支 a 在应用任何新的更改之前,再次包含原来的更改(例如提交 E).

© www.soinside.com 2019 - 2024. All rights reserved.