error: mainline was specified but commit is not a merge; fatal: revert failed
error: mainline was specified but commit is not a merge; fatal: revert failed
我想还原已还原的拉取请求,即 4 次提交 6283c90
、f665a5a
、09ed268
、05ed1bc
.
但是当我使用命令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 revert
与 git reset
。
revert
是当您尝试在顶部添加另一个提交时,其精确差异与上次提交相反。在您的情况下,相当于之前所有 4 次提交的压缩(即 --squash
)。
当您的存储库未配置为合并策略时,这样做是有问题的: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 --force
(push
强制),那么你可能需要使用 revert
作为你项目的治理模型,想要以确保人们不会隐瞒错误,或(错误地)从历史中删除某些内容。否则,reset
是返回的默认方式,尤其是在处理本地分支时(团队中不允许使用 reset
的常见示例,适用于 DevOps 团队 - 用于配置管理回购) .
$ git reset --hard <SHA-1 (previous - 3)>
$ git push --force
其中 <SHA-1 (previous - 3)>
对您来说可能是 05ed1bc
,因此实际提交 SHA-1。
更新:(注意)当使用 reset
时,之前的(前向)提交不会被删除,但仍然是孤立的。它们保留在历史记录中,直到调用 gc
(垃圾收集)。它们基本上保留在树中(就像在不同的分支上 - 但没有分支。将其视为 TREE 数据结构 - 计算机科学)。如果有人想分析它,您可以检索该提交。
我想还原已还原的拉取请求,即 4 次提交 6283c90
、f665a5a
、09ed268
、05ed1bc
.
但是当我使用命令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 revert
与 git reset
。
revert
是当您尝试在顶部添加另一个提交时,其精确差异与上次提交相反。在您的情况下,相当于之前所有 4 次提交的压缩(即 --squash
)。
当您的存储库未配置为合并策略时,这样做是有问题的: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 --force
(push
强制),那么你可能需要使用 revert
作为你项目的治理模型,想要以确保人们不会隐瞒错误,或(错误地)从历史中删除某些内容。否则,reset
是返回的默认方式,尤其是在处理本地分支时(团队中不允许使用 reset
的常见示例,适用于 DevOps 团队 - 用于配置管理回购) .
$ git reset --hard <SHA-1 (previous - 3)>
$ git push --force
其中 <SHA-1 (previous - 3)>
对您来说可能是 05ed1bc
,因此实际提交 SHA-1。
更新:(注意)当使用 reset
时,之前的(前向)提交不会被删除,但仍然是孤立的。它们保留在历史记录中,直到调用 gc
(垃圾收集)。它们基本上保留在树中(就像在不同的分支上 - 但没有分支。将其视为 TREE 数据结构 - 计算机科学)。如果有人想分析它,您可以检索该提交。