我想还原还原的拉请求,即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
是指您尝试在顶部添加另一个提交,并将确切的diff作为上一个提交的倒数。在您的情况下,相当于之前4次提交的压缩(即--squash
(。
当您的回购没有配置为合并策略时,这样做是有问题的:rebase + ff-only
。根据您展示的历史,实际问题是您的项目使用的合并策略。
尽管如此,如果你想实现恢复,你可以做(更多(:
$ 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(commit=pointer(上,就像4次提交前一样。大多数时候,人们在寻找revert
,实际上他们指的是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。
UPDATE:(注意(当使用reset
时,以前的(正向(提交不会被删除,而是保持孤立。它们将保留在历史中,直到调用gc
(垃圾回收(为止。它们基本上保留在树上(就像在不同的树枝上,但没有树枝。把它想象成tree数据结构——计算机科学(。如果有人想分析它,你可以检索该提交