在重新设置--abort期间“ git stash存储需要一个<commit>参数”

时间:2018-08-23 17:02:54

标签: git git-rebase git-stash git-interactive-rebase

每次我认为我都是Git向导时,都会发生一些全新的怪异事情,使我回到原位...

我当时正在压缩交互式基础中的两次提交,突然之间,Git的输出开始像覆盖自己一样,并且混乱中出现了多个Git Bash提示,好像命令认为它们在完成之前就已经完成了。实际上是(不幸的是,我忘记了截图)。现在,我的存储库似乎已损坏,因为我处于REBASE-i模式,无法中止。以下是一些屏幕快照,这些屏幕快照有望帮助我解决更多问题(git sgit status的别名)。我以前从没看过Cannot store消息,而且我不明白rebase可能如何生成该消息。我总是可以删除该存储库并制作一个新的克隆,但是我认为在将毛巾扔到这里之前,我会呼吁SO ...

编辑:
这是导致此问题的我采取的步骤:

  1. git commit --squash head,以便我可以使用上一次提交来压缩最新更改。
  2. git rebase -i --autosquash head^^以使用已设置的squash命令启动交互式变基。
  3. 重新设置正常进行,但随后开始显示上述奇怪的输出。它开始抱怨无法取消链接.pack文件,如果我想再试一次。我以前看过那条消息;通常情况下,它只会一直询问您重试一次,因此我以 Ctrl + C 退出了。
  4. 那时,我无法git rebase --abort,并显示以下错误消息。
  5. 我尝试了git rebase --edit-todo并删除了待办事项文件的所有行,但是重新设置仍然失败。
  6. 最后,我运行了git rebase --continue,这使我退出了REBASE-i模式,这使我能够在非常慌乱的状态下继续生活...

版本信息:
 -Windows版Git:2.18.0
 -Windows:Windows 10 Pro 1803

enter image description here enter image description here

enter image description here

2 个答案:

答案 0 :(得分:1)

好吧,这显然是一个错误,与rebase的--autostash有关(可能是通过git config的{​​{1}}设置启用的)。要获取更多详细信息并进行调试,您可能需要提供特定的Git版本。 1 自动隐藏本身触发的原因是:

  
      
  1. rebase.autoStash,以便我可以使用上一次提交来压缩最新更改。
  2.   
  3. git commit --squash head ...
  4.   

(我假设第1步实际上是git rebase。在Windows上,您可以 用小写字母写git merge --squash HEAD,尽管我认为这是一个坏习惯,因为它可能会如果您不喜欢输入四个大写字母,请考虑使用HEAD作为@的简写,该符号在任何地方都可以使用,至少自Git起1.8。)

中间没有HEAD时,git commit保持未提交状态,因为git merge --squash始终打开--squash。除了使--no-commit运行git rebase(自1.8.4起)的能力之外,这使重新定位处于无法启动的位置。

根据下面的注释,以上所述是错误的,我现在不确定为什么自动存储代码必须运行并感到困惑。

执行自动存储,git stash实际上必须运行git rebase,并且存在各种错误(我认为其中一个严重程度足以避免使用自动存储)在此之前,直到Git 2.0.1 / 2.1.0版,更多错误已在2.10和2.13中修复。

(我自己仍然不使用自动存储。我只想提醒我,在重新定基础之前需要提交或存储,一般而言,我现在想 commit 。)< / p>

几乎可以肯定,解除链接错误是特定于Windows的,并且可能只是侧面问题。清空TODO(git stash)的问题,至少是 a ,已在Git 2.0.1 / 2.1.0中修复!参见release notes


1 在我看来,这是Windows版本,虽然没有在其他系统上触发,但我没有。尽管如此,我可能自己也没有时间去研究它。

答案 1 :(得分:0)

通过运行REBASE,我能够退出git rebase --continue模式,,所以我不确定发生了什么。如果有人希望更好地解释发生的情况,我将等待将此标记为可接受的答案。

请参阅@torek的答案/评论,以获得其他一些信息,尽管从技术上讲它没有提供解决方案。