微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

错误:指定了主线但提交不是合并;致命:恢复失败

如何解决错误:指定了主线但提交不是合并;致命:恢复失败

我想恢复已恢复的拉取请求,即 4 次提交 6283c90f665a5a09ed26805ed1bc

但是当我使用命令 git revert -m 1 6283c90 时,我遇到了以下错误

error: mainline was specified but commit 6283c90bd35598635fe1d4f96d3a5a8c6ed91206 is not a merge.
fatal: revert Failed

git 日志图如下所示:

* 6283c90 (HEAD -> main,origin/main,origin/HEAD) Revert "Merge pull request #1 from kgarg8/checkpoint-patch"
* f665a5a Revert "Merge pull request #2 from kgarg8/entmax-patch"
* 09ed268 Revert "Merge pull request #3 from kgarg8/decoding"
* 05ed1bc Revert "Merge pull request #4 from kgarg8/decoding"
*   2a8519e Merge pull request #4 from kgarg8/decoding
|\  
| * e170320 (origin/decoding) Fix bugs in decoding
* |   63f0f4c Merge pull request #3 from kgarg8/decoding
|\ \  
| |/  
| * f5ce256 Add temperature,top_k,top_p sampling
* |   168685e Merge pull request #2 from kgarg8/entmax-patch
|\ \  
| |/  
| * 6a44c22 (origin/entmax-patch) Add entmax support
* |   7f61831 Merge pull request #1 from kgarg8/checkpoint-patch
|\ \  
| |/  
| * ea0a7db (origin/checkpoint-patch) Checkpoint load for cpu
|/  
* 4c2d50c Update Seq2Seq_agent.py
... continues

任何帮助将不胜感激。

解决方法

人们必须了解 git revertgit reset

revert 是当您尝试在顶部添加另一个提交时,该提交具有与上次提交相反的确切差异。在您的情况下,相当于所有前 4 次提交的压缩(即 --squash)。

当您的 repo 未配置为合并策略时,这样做是有问题的:rebase + ff-only。根据您展示的历史记录,实际问题是您的项目使用的合并策略。

不过,如果你想实现还原,你会做 (more) :

$ git revert --no-commit <SHA-1 (previous)>
$ git revert --no-commit <SHA-1 (previous - 1)>
$ git revert --no-commit <SHA-1 (previous - 2)>
$ git revert --no-commit <SHA-1 (previous - 3)>
$ git commit -m "your message message"
$ git push

reset 是使内容处于 SHA-1(提交 = 指针),因为它是 4 次提交前。大多数时候人们都在寻找 revert-ing,他们实际上指的是 reset。不确定你的情况。好处在于治理。如果你不能改变历史,如果你的用户不允许push --forcepush with force),那么你可能需要使用revert作为你项目的治理模型,想要以确保人们不会隐藏错误,或从历史中删除(错误地)某些内容。否则,reset 是返回的默认方式,尤其是在本地 fork 上工作时(一个常见的例子是 reset 不允许在团队中使用,适用于 DevOps 团队 - 用于配置管理存储库) .

$ git reset --hard <SHA-1 (previous - 3)>
$ git push --force

其中 <SHA-1 (previous - 3)> 对您来说可能是 05ed1bc,因此实际提交 SHA-1。

UPDATE:(注意)当使用 reset 时,之前的(向前)提交不会被删除,而是保持孤立状态。它们会保留在历史记录中,直到调用 gc(垃圾收集)。它们基本上保留在树中(就像在不同的分支上 - 但没有分支。将其视为 TREE 数据结构 - 计算机科学)。如果有人想对其进行分析,您可以检索该提交。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。