Git 从历史创建新的提交

Git 从历史创建新的提交,git,version-control,Git,Version Control,假设有人用一些废话更新了远程来源,我想忽略它。我的回购协议看起来像 A-B-C-D 遥控器是 A-B-C-D-E-F 我基本上想放弃E&F,但保留历史,所以希望结果会是这样 /-----\ A-B-C-D-E-F-G 如果不在顶部重放E&F,我看不到如何重置或恢复。如果不保留E&F的更改,我看不出如何合并。G&D基本上应该完全相同。那么,您想撤消E和F中的更改,但在历史记录中保留E和F吗?使用带有-n(无提交)选项的git revert: 为什么我需要两个revert命令同时使

假设有人用一些废话更新了远程来源,我想忽略它。我的回购协议看起来像

A-B-C-D
遥控器是

A-B-C-D-E-F
我基本上想放弃E&F,但保留历史,所以希望结果会是这样

      /-----\
A-B-C-D-E-F-G

如果不在顶部重放E&F,我看不到如何重置或恢复。如果不保留E&F的更改,我看不出如何合并。G&D基本上应该完全相同。

那么,您想撤消E和F中的更改,但在历史记录中保留E和F吗?使用带有
-n
(无提交)选项的
git revert


为什么我需要两个revert命令同时使用F和E?我通过测试回购操作了它,并在一些怪物合并后愉快地恢复了。是否有一种简单的方法可以接受所有目标更改?
git revert
一次只恢复一次提交;我的印象是你想在一次回复提交中回复两次提交。我可以跳过F直接转到E吗?本质上,它只是将头部重置为以前的状态,因此使用
-n
标志,我可以向上编辑,创建一条新的提交消息并继续?E&F仍将在历史记录中,但在
revert-n$E
之后,它们的更改将在合并中恢复?它不会将磁头重置为以前的状态(这就是
git reset
所做的)
git revert
实际上创建了一个新的提交,该提交将撤消给定的提交。如果您恢复E,您将只恢复E中引入的更改,而不是E和F中引入的更改。(可能这在您的特定情况下会起作用——我不知道提交历史的所有细节——但一般来说,它可能不会。)
$ git revert -n $F
$ git revert -n $E
# Fix conflicts, check to make sure the reverts look good, etc.
$ git commit