Git还原合并VIM编辑器

时间:2018-02-14 13:12:02

标签: git

我将一个分支合并到另一个分支但是现在我想恢复我刚刚推送到repo的合并,所以我做了以下内容:

git revert -m 1 <log hash>

但是这会打开VIM提交消息编辑器,这会给我带来问题。当VIM编辑器打开时,它告诉我发出提交消息,所以我做的是

  1. i键插入
  2. 写了这样的提交消息 - &gt; RM000: Reverting merge
  3. 退出:x
  4. 然而,当我推送我的更改时,我得到一个提交消息正则表达式错误,因为当我在第一步中输入i并在第二步中写入提交消息时,我们有一个如何提交消息的约定,它没有正确地提交我的提交消息。

    我的问题是,如何在不弹出VIM的情况下执行提交消息?即在我使用git revert -m 1 <log hash>之后我想git commit -m "RM:000 Reverted",但是一旦我使用git revert,它就会自动打开VIM编辑器。

1 个答案:

答案 0 :(得分:3)

嗯...评论对话可能已经向用户提供了一个解决方案,但问题没有得到解答,对话提出了更多问题,所以这里有一些事情:

首先,如果要在命令行上输入revert的提交消息,可以说

git revert -n -m 1 <hash>
git commit -m "RM:000 Reverted"

添加-n选项告诉revert不要自动提交。 意味着如果您一次还原多个提交,撤消更改将合并到索引中,因此当您手动提交时,它们将被压缩在一起。也许这就是你想要的,也许不是;在这种情况下,它只是一次提交,所以没关系。

也就是说,您可能想要更熟悉vi编辑器,或者更改您的git配置以使用您更舒适的编辑器。您可以设置core.editor配置值或环境变量GIT_EDITOR,以指定git在需要向您显示编辑器时运行的命令。

最后,正如评论中所指出的,撤消已推送的合并是一件非常困难的事情;每种解决方案都有负面影响。

您可以恢复提交,就像您尝试的那样。这在许多方面都很好,但它让git认为该分支已被合并和解释,即使它的更改已被撤消。所以如果你以后想要它,你必须做两件事之一:

1)您可以“恢复还原”

2)你可以在合并之前在分支上做rebase -f;这导致分支从git不会认为“已经被考虑”的新提交中重建。

您可以在众多文章和SO答案中阅读有关这些技术的更多信息。

另一个选项是使用git reset从分支历史记录中删除合并。这具有在共享分支后重新分配分支的所有后果,因此请参阅“从上游rebase恢复”下的git rebase文档(或搜索有关强制推送的问题,因为许多人会将其拼写出来)。< / p>