我将一个分支合并到另一个分支,但现在我想恢复我刚刚推送到 repo 的合并,因此我执行了以下操作:
git revert -m 1 <log hash>
但这会打开给我带来问题的 VIM 提交消息编辑器。当 VIM 编辑器打开时,它告诉我放置提交信息,所以我所做的是
i
键插入RM000: Reverting merge
:x
然而,当我推送我的更改时,我收到一个提交消息正则表达式错误,因为我们有一个关于提交消息应该如何的约定,所以当我i
在第一步中输入并在第二步中编写我的提交消息时,它没有接受我的提交消息正确。
我的问题是,如何在不弹出 VIM 的情况下执行提交消息?即在我使用后我git revert -m 1 <log hash>
想做git commit -m "RM:000 Reverted"
但一旦我使用git revert
它会自动打开 VIM 编辑器。
嗯...评论对话可能已经为用户提供了解决方案,但问题没有得到回答,对话提出了更多问题,所以这里有一些事情:
首先,如果你想在命令行上输入提交信息进行还原,你可以说
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
从分支历史记录中删除合并。这具有在共享分支后重新定位分支的所有后果,因此请参阅git rebase
“从上游重新定位恢复”下的文档(或搜索有关强制推送的问题,因为其中许多会说明这一点)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句