合并到 master 忽略对 master 的错误提交
Merge to master ignoring a bad commit on master
我手上的东西一团糟,但我相信会有解决办法。
我们曾经有一个开发人员会为每个软件保留一个单独的分支 'version' 这很糟糕,因为必须在每个分支上挑选错误修复。对于有问题的回购协议,有 6 个并发分支。
实际上,每个分支上都发生了各种错误修复。所以每个分支都有完全不同的东西。那个开发人员现在已经离开了,我想将所有分支合并回 master。我做了以下操作(为清楚起见,说明了两个功能分支):
M0 - M1 - M2 - - - - - - - - - - M3* - M4 - M5 - M6
\ \ / /
\ fB - fB - fB - fB - - - - - - - - - - /
fA - fA - fA - fA - - - - - - - - - - - - -
这看起来不错,但有一个主要问题。在提交 'M3*' 存储库中的每个 文件时,文件权限已更改。文件没有发生任何功能更改。
这个提交比功能分支中的提交发生得更近,所以当我合并时,这是被选择的版本。
以上不良已全部推送到远程
我想合并所有更改(包括M2和M4中的更改)但忽略M3中的更改*。
我该怎么做?
一种既不重写本地历史也不重写远程历史的简单方法是 revert 提交 M3
它不会以任何方式删除或更改 M3
,只是创建一个新的提交(我们称之为 M7
),其中包含 M3
带来的完全相反的更改:
git revert M3
M0 - M1 - M2 - - - - - - - - - - M3* - M4 - M5 - M6 - M7
\ \ / /
\ fB - fB - fB - fB - - - - - - - - - - /
fA - fA - fA - fA - - - - - - - - - - - - -
我手上的东西一团糟,但我相信会有解决办法。
我们曾经有一个开发人员会为每个软件保留一个单独的分支 'version' 这很糟糕,因为必须在每个分支上挑选错误修复。对于有问题的回购协议,有 6 个并发分支。
实际上,每个分支上都发生了各种错误修复。所以每个分支都有完全不同的东西。那个开发人员现在已经离开了,我想将所有分支合并回 master。我做了以下操作(为清楚起见,说明了两个功能分支):
M0 - M1 - M2 - - - - - - - - - - M3* - M4 - M5 - M6
\ \ / /
\ fB - fB - fB - fB - - - - - - - - - - /
fA - fA - fA - fA - - - - - - - - - - - - -
这看起来不错,但有一个主要问题。在提交 'M3*' 存储库中的每个 文件时,文件权限已更改。文件没有发生任何功能更改。 这个提交比功能分支中的提交发生得更近,所以当我合并时,这是被选择的版本。
以上不良已全部推送到远程
我想合并所有更改(包括M2和M4中的更改)但忽略M3中的更改*。
我该怎么做?
一种既不重写本地历史也不重写远程历史的简单方法是 revert 提交 M3
它不会以任何方式删除或更改 M3
,只是创建一个新的提交(我们称之为 M7
),其中包含 M3
带来的完全相反的更改:
git revert M3
M0 - M1 - M2 - - - - - - - - - - M3* - M4 - M5 - M6 - M7
\ \ / /
\ fB - fB - fB - fB - - - - - - - - - - /
fA - fA - fA - fA - - - - - - - - - - - - -