我需要从主分支还原非常老的合并提交。
事实是,我不希望还原操作影响从主分支上的该点所做的其他更改。
据我了解,如果我使用:
git revert -m 1 [哈希合并提交]
它将还原为合并提交的父提交,并删除以后添加的所有更改。
合并提交涉及多个文件。
除了通过逐个文件操作外,是否可以通过git中的内置命令来实现此目的?
feature/rebase-test
中获取此历史记录:* 1ff3147 - (tag: v0.4.3, origin/master, origin/HEAD, master) Add test to show URLs with port work
* a686fbf - (tag: v0.4.2) Enable setting custom RequestHandler
* f682d20 - Add php 7.4 to Travis
* 0973364 - Make code coverage script CLI runnable
* cb106fc - Add composer.phar to gitignore
* 1d89b5e - (tag: v0.4.1) Merge pull request #62 from mvdbos/fix/event-dispatcher
|\
| * 3376b9c - Revert to the legacy EventDispatcher
|/
* f761a2c - Update README badges
* b8447e6 - (tag: v0.4) Merge pull request #60 from mvdbos/feature/cleanup
|\
| * e278cde - Simplify build and clean up use statements
|/
* ac6af67 - Merge pull request #59 from mvdbos/feature/update-scrutinizer
现在假设我要删除b8447e6
(因此要删除e278cde
,这是该合并提交的一部分)。
我可以git rebase --rebase-merges --onto ac6af67 f761a2c feature/rebase-test
。从f761a2c
开始直到feature/rebase-test
的尖端都将被吸收,并将其重新设置为ac6af67
,这是我们要摆脱的合并之前的提交。就我而言,这导致了一些冲突,解决了之后,我的历史记录如下:
* d7e5919 - (HEAD -> feature/rebase-test) Add test to show URLs with port work * 0d8e15f - Enable setting custom RequestHandler * ce365b0 - Add php 7.4 to Travis * 42d6f59 - Make code coverage script CLI runnable * ad0c861 - Add composer.phar to gitignore * 3292f4c - Merge pull request #62 from mvdbos/fix/event-dispatcher |\ | * 3e2ceef - Revert to the legacy EventDispatcher |/ * ac6af67 - Merge pull request #59 from mvdbos/feature/update-scrutinizer
请注意,合并提交已消失,后续提交的结构(包括合并提交)保持原样。这是由于rebase命令的--rebase-merges
标志。
一个警告:您可能已经注意到,ac6af67
之后的所有提交都有新的哈希(它们实际上是新的提交)。这意味着我们以前的历史中存在的标记不会指向这些新的提交。虽然它们确实仍然存在,所以没有任何问题。它们只是指向一个仍包含您要删除的合并提交的历史记录。无法判断这是否会对您造成问题。