我正在某个项目上尝试重写倒数第二个提交来修复一个错字,方法是运行git rebase -i HEAD~3
(使用“nano”编辑器),然后将该提交的默认pick
选项更改为r
或reword
(在初始的rebase文件窗口上),并且不修改任何其他内容。我正在master
分支上做这件事,如果有用的话。
一旦我保存了这个文件,Git并没有像往常一样显示下一个rebase窗口来为那个提交选择一个新的名字,而是把它自己放进去,并通知我那个提交的一个分离的HEAD状态,从那时起,这个状态也会在git status
命令中显示,直到我输入git checkout master
。
不管我尝试多少次,同样的事情发生了。
附加说明:我之前通过运行以下命令将使用的编辑器更改为“nano”:git config --global core.editor nano
编辑:按照要求,这是当我保存TODO列表时Git给我的消息:
adrian$ git rebase -i HEAD~1
注意:检查'da 91 bbcedc 78 cb 2 ebcaa 9dc 51 f38 c8 d 0a 550195 d'。
您处于“detached HEAD”状态。您可以四处查看,进行实验性更改并提交它们,并且您可以通过执行另一次 checkout 来丢弃在此状态下所做的任何提交,而不会影响任何分支。
如果你想创建一个新的分支来保留你创建的提交,你可以(现在或以后)通过再次使用-b和checkout命令来完成。示例:
git checkout -B
HEAD is now at da91bbc. Test message
此仓库已配置为Git LFS,但在您的路径中找不到'git-lfs'。如果您不再希望使用Git LFS,请通过删除.git/hooks/post-checkout来删除此钩子。无法分离HEAD
此时运行git rebase --continue
后的输出:
没有进行重定基?
3条答案
按热度按时间y1aodyip1#
当您在待办事项文件中放置
edit
以进行交互式rebase时,通常会出现分离的HEAD消息。您一定是错误地将edit
而不是reword
放置在那里了。或者Git可能因为在输出中发现了错误而进入了这种模式(在冲突中也会进入这种模式):这个储存库是为Git LFS设定的,但是在您的路径中找不到'git-lfs'。如果您不想再使用Git LFS,请删除.git/hooks/post-checkout来移除这个拦截。could not detach HEAD
您应该先解决此错误,然后再继续。Git会告诉您该怎么做。
edit
模式允许像reword
模式一样修改提交消息,但也允许修改文件内容。因此,Git让你处于这样一种状态,你可以提交更改,然后继续使用git rebase --continue
重定基。在
edit
模式下编辑提交消息(如reword
)当您只想编辑提交消息并继续重定基时,请运行
字符串
这将打开编辑器,让您编辑提交消息。
型
离开未完成的重定基地
当我保存文件Git时,它并没有像往常一样显示下一个重定基窗口来为该提交选择一个新的名称,而是将自己放置在该提交中并通知我一个分离的HEAD状态,从那时起在
git status
命令中也会显示,直到我键入git checkout master
。这不是离开未完成重定基的正确方法,您应该使用
型
而不是.
bakd9h0s2#
我在使用
git rebase -i
时也遇到了同样的问题,输出结果完全相同,而且git完全没有说明原因。通过反复试验,我最终发现我的post-checkout钩子(repodir/.git/hooks/post-checkout)以非零状态退出。一旦我在它的末尾添加了一个
exit 0
,rebase就成功了,而没有让repo处于分离的HEAD状态。4c8rllxm3#
我在做换基壁球的时候也面临着同样的问题。我找不到这个问题的原因。
我的解决办法是复制这个主分支发生这个问题,以其他新的分支,让我们说分支“天乐”。
当我做同样的rebase步骤在新的“天堂乐”分支,它的工作正常。
然后我选择这个由变基到主分支创建的提交。