我的团队也遇到了类似的问题。实际上,我已经有一个相对简单的解决方案了,但我只是在研究防止这种情况发生的方法(目前还没有解决方案)时找到了这个主题。
以下是我修复它的方式,假设在与主分支进行“糟糕”的合并之前,子分支(“develop”)已经更新(提交 M1):
问题状态
... <-- Work after revert that needs merged to develop
|
R <-- Revert Bad Merge
|
A <-- Commits after merge,
| / but before revert
... </ and needs merged to develop
|
M2 <-"bad" merge
... ____/ |
| / |
M1 |
| \____ |
... \...
develop master
步骤1
git checkout master
git pull
git checkout develop
git pull
git merge A
第一步后的状态:
... <-- Work after revert that needs merged to develop
M3 |
| \____ R <-- Revert Bad Merge
| \ |
| A <-- Commits after merge,
| | / but before revert
| ... </ and needs merged to develop
| |
| M2 <-"bad" merge
... ____/ |
| / |
M1 |
| \____ |
... \...
develop master
第二步 - 重要部分!
# Use "ours" strategy to merge revert commit to develop.
# This doesn't change any files in develop.
# It simplly tells git that we've already accounted for that change.
git merge R -s ours
第二步后的状态
M4
| \____ ... <-- Work after revert that needs merged to develop
M3 \ |
| \____ R <-- Revert Bad Merge
| \ |
| A <-- Commits after merge,
| | / but before revert
| ... </ and needs merged to develop
| |
| M2 <-"bad" merge
... ____/ |
| / |
M1 |
| \____ |
... \...
develop master
第三步
git merge master
第三步后的状态
M5
| \_____
M4 \
| \____ ... <-- Work after revert that needs merged to develop
M3 \ |
| \____ R <-- Revert Bad Merge
| \ |
| A <-- Commits after merge,
| | / but before revert
| ... </ and needs merged to develop
| |
| M2 <-"bad" merge
... ____/ |
| / |
M1 |
| \____ |
... \...
develop master
现在,
develop
已经更新到最新的
master
版本,无需解决重复或无意义的合并冲突。未来的合并也将像平常一样进行。
master
到其先前状态(而不是还原)是否不可行? - user456814master
重置到合并之前的状态并强制推送,会发生什么?这将要求每个人再次同步,但它会保留你的历史记录。 - CharlesB