我最近使用 git 将本地功能分支合并到本地主分支。然后我做了一些更改并提交到主分支。现在,我想摆脱主分支上的合并造成的更改。所以我做了一个:
git revert <commit-id>
Run Code Online (Sandbox Code Playgroud)
但是,我得到了错误
错误:提交 c49aaca4acf461cc41390c1d1d3477f09e25a368 是合并,但未给出 -m 选项。致命:恢复失败
仅供参考,我还没有向服务器推送任何内容。我在网上搜索但找不到合适的解决方案。有谁知道该怎么做?谢谢。
在 Git 中,一次提交通常仅引用 1 个父提交。
但是,如果您merge遇到冲突,如果您merge使用了选项--no-ff(不快进)或者 Git 无法快进,Git 将创建一个merge commit.
合并提交是专用于通过引用作为分支尖端的 2 个提交(在本例中为 2 个父级)来链接两个分支的提交。
当您想要恢复这种类型的提交时,您需要指定哪个分支应该是剩余的分支。正如Git 文档中所述:
恢复合并提交声明您永远不会希望合并带来的树更改
您必须使用带有父号码的选项-m( ) 进行恢复。--mainline您合并的分支编号为1,合并的分支编号为2。
在您的情况下,要返回到master合并功能分支之前分支的状态,您应该使用以下命令恢复
git revert c49aaca4acf461cc41390c1d1d3477f09e25a368 -m 1
Run Code Online (Sandbox Code Playgroud)
提示:在启动之前revert,从您的分支创建一个新分支master(假设您当前正在使用该分支)
git checkout -b you-name-it
Run Code Online (Sandbox Code Playgroud)
并在这个新分支上执行revert:如果它具有预期结果,checkout则再次您的master分支并执行revert,如果没有,您的master分支仍然完好无损。