还原推送的合并以删除错误推送的本地不需要的更改
Revert a pushed merge to erase local undesired changes pushed by mistake
我在带有子模块的父存储库中推送了一个合并。
假设我将我的 main
分支合并到我的 feature/Foo
分支中。
我错误地推送了合并、本地更改和本地创建的不应该推送的新文件。
例如我有:
本地更改:(未提交的更改)
- 5 个本地更改的文件
- 5 个本地新文件
合并更改:(来自 main
分支)
- 5 由合并文件更改
- 5 个由合并文件添加的新文件
现在我需要还原推送的合并。
我知道 git revert 如何还原提交,只创建一个具有相反更改的提交,因此在还原合并时,它会还原所有更改。
本地更改 + 与合并一起进行的更改被还原,因此创建了相反的更改以撤消合并提交中执行的所有 changed/created 文件。
我采用的解决方案:
所以要保留我想要的版本,这是因为只有 MERGE CHANGES 而不是本地更改带来的更改,我必须按文件归档 select/discard 我想要在还原中的 cahnges提交,这是手动检查日志并丢弃我不希望还原的更改。
这些是合并带来的,因为我只想在本地错误地还原文件 changed/added。
为什么?
因为如果我还原所有更改,我也会还原合并带来的更改,并且在我重新合并评论和我需要的更改之后,什么也不会发生,因为合并流程已经解决了。
我的意思是 main
分支更改不会再次带到 feature/Foo
分支。似乎即使在恢复后我比原始合并提前 2 次提交,合并流程在原始合并提交中得到解决(在解释图中选中“最终提交以恢复原始合并”)。
我的愿望:
了解使用 git 执行此操作的方法,而不是手动检查每个文件的日志以进行选择性还原。
理想情况下,不要以最安全的方式删除 remote branches/commits 。还原是否出现在历史记录中无关紧要。
解释图:
我认为使用从旧版本签出的一些本地文件简单地创建新提交要容易得多。无需还原合并,然后将花哨的魔法应用到此合并提交:)
它应该很简单:
git checkout commit-before-merge -- file1 file2 file3
git commit -m 'Remove accidental local changes'
描述:从合并前的提交中复制指定文件的内容。使用这些更改创建提交。这有效地“还原”了这些更改。
我在带有子模块的父存储库中推送了一个合并。
假设我将我的 main
分支合并到我的 feature/Foo
分支中。
我错误地推送了合并、本地更改和本地创建的不应该推送的新文件。
例如我有:
本地更改:(未提交的更改)
- 5 个本地更改的文件
- 5 个本地新文件
合并更改:(来自 main
分支)
- 5 由合并文件更改
- 5 个由合并文件添加的新文件
现在我需要还原推送的合并。 我知道 git revert 如何还原提交,只创建一个具有相反更改的提交,因此在还原合并时,它会还原所有更改。 本地更改 + 与合并一起进行的更改被还原,因此创建了相反的更改以撤消合并提交中执行的所有 changed/created 文件。
我采用的解决方案:
所以要保留我想要的版本,这是因为只有 MERGE CHANGES 而不是本地更改带来的更改,我必须按文件归档 select/discard 我想要在还原中的 cahnges提交,这是手动检查日志并丢弃我不希望还原的更改。 这些是合并带来的,因为我只想在本地错误地还原文件 changed/added。
为什么?
因为如果我还原所有更改,我也会还原合并带来的更改,并且在我重新合并评论和我需要的更改之后,什么也不会发生,因为合并流程已经解决了。
我的意思是 main
分支更改不会再次带到 feature/Foo
分支。似乎即使在恢复后我比原始合并提前 2 次提交,合并流程在原始合并提交中得到解决(在解释图中选中“最终提交以恢复原始合并”)。
我的愿望:
了解使用 git 执行此操作的方法,而不是手动检查每个文件的日志以进行选择性还原。 理想情况下,不要以最安全的方式删除 remote branches/commits 。还原是否出现在历史记录中无关紧要。
解释图:
我认为使用从旧版本签出的一些本地文件简单地创建新提交要容易得多。无需还原合并,然后将花哨的魔法应用到此合并提交:)
它应该很简单:
git checkout commit-before-merge -- file1 file2 file3
git commit -m 'Remove accidental local changes'
描述:从合并前的提交中复制指定文件的内容。使用这些更改创建提交。这有效地“还原”了这些更改。