【发布时间】:2021-05-18 14:07:58
【问题描述】:
我在带有子模块的父存储库中推送了一个合并。
假设我将我的main 分支合并到我的feature/Foo 分支中。
错误地我推送了合并、本地更改和本地创建的不应该推送的新文件。
例如我有:
本地更改:(未提交的更改)
- 5 个本地更改的文件
- 5 个本地新文件
合并更改:(来自main 分支)
- 5 合并文件的变化
- 5 由合并文件新增
现在我需要恢复推送的合并。 我知道 git revert 如何恢复提交,只创建具有相反更改的提交,因此在恢复合并时,它会恢复所有更改。 本地更改 + 合并带来的更改将被还原,因此创建相反的更改以撤消在合并提交中执行的所有更改/创建的文件。
我采用的解决方案:
因此,要保留我想要的版本,即仅由 MERGE CHANGES 而不是本地更改带来的更改,我必须逐个文件选择/丢弃我想要在还原提交中的更改,这是,手动检查日志并丢弃我不希望还原的更改。 这些是合并带来的,因为我只想恢复错误地在本地更改/添加的文件。
为什么?
因为如果我恢复所有更改,我也会恢复合并带来的更改,如果我重新合并该评论以及我需要的更改,则不会发生任何事情,因为合并流程已经解决。
我的意思是main 分支更改不会再次带到feature/Foo 分支。似乎即使我在还原后比原始合并提前了 2 次提交,但合并流程在原始合并提交中得到了解决(在解释图中检查“最终提交以恢复原始合并”)。
我的愿望:
了解使用 git 执行此操作的方法,而不是手动检查每个文件的日志以进行选择性还原。 理想情况下,不以最安全的方式删除远程分支/提交。如果还原出现在历史记录中,则无关紧要。
说明图:
【问题讨论】:
标签: git git-revert