2

每次我认为我是一个 Git 向导时,都会发生一些全新而奇怪的事情让我回到原来的位置......

我正在一个交互式 rebase 中压缩两个提交,突然间,来自 Git 的输出开始像覆盖自己一样,并且多个 Git Bash 提示出现在混乱中,好像命令认为它们在实际完成之前就已经完成(可惜忘记截图了)。我的回购现在似乎已经损坏,因为我陷入了REBASE-i模式并且无法中止。下面是一些屏幕截图,希望能帮助解决更多的 Git-wizardry-than-I 问题(git s是 的别名git 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并删除了 todo 文件的所有行,但 rebase 继续失败。
  6. 最后我跑了git rebase --continue,它让我脱离了REBASE-i模式,让我在非常慌乱的状态下继续我的生活......

版本信息:
- 适用于 Windows 的 Git:2.18.0
-Windows:Windows 10 Pro 1803

在此处输入图像描述 在此处输入图像描述

在此处输入图像描述

4

2 回答 2

1

好吧,这显然是一个错误,并且与 rebase 的--autostash(可能通过git configrebase.autoStash设置启用)有关。要获得更多细节和调试,您可能需要提供您的特定 Git 版本。1 使 autostash 本身触发的原因是:

  1. git commit --squash head这样我就可以用之前的提交来压缩我的最新更改。
  2. git rebase...

(我假设第 1 步实际上是git merge --squash HEAD。在 Windows 上,你可以HEAD全小写,虽然我认为这是一个坏习惯,因为它可能会在未来突然停止工作,并且在其他一些系统上不起作用。如果你不喜欢打字四个大写字母,考虑@用作 的简写HEAD,它在任何地方都可以使用,至少从 Git 1.8 开始。)

如果没有git commit介于两者之间,则git merge --squash一切都未提交,因为--squash总是打开--no-commit。这使得 rebase 处于无法启动的位置,除了能够git rebase运行git stash(从 1.8.4 开始)。

根据下面的评论,前面的内容是错误的,我现在完全不确定为什么 autostash 代码(必须)正在运行并感到困惑。

但是,要进行自动存储,git rebase实际上必须运行git stash,并且在 Git 版本 2.0.1 / 2.1.0 之前存在各种错误(我认为严重到足以避免使用自动存储),并且最近修复了更多错误在 2.10 和 2.13 中。

(我自己仍然不使用 autostash。我宁愿被提醒我需要在变基之前提交或存储,一般来说,我想在这一点上提交。)

取消链接错误几乎可以肯定是特定于 Windows 的,并且可能只是附带问题。清空 TODO ( ) 的问题,或者至少是一个git rebase --edit-todo问题,据说在 Git 2.0.1 / 2.1.0 中得到了修复!请参阅发行说明


1这在我看来就像是一个 Windows 版本,我不会拥有它,尽管也许这个错误也可以在其他系统上触发。不过,我可能没有时间自己深入研究它。

于 2018-08-23T18:16:05.507 回答
0

好吧,我能够REBASE通过运行退出模式git rebase --continue所以我不确定发生了什么。我会等待将此标记为已接受的答案,以防有人想对发生的事情进行更好的解释。

有关其他信息,请参阅@torek 的回答/评论,尽管它在技术上并未提供解决方案。

于 2018-08-23T17:25:42.167 回答