为什么最近 git rebase -i squash 导致头部分离

jos*_*eph 5 git git-interactive-rebase git-detached-head

为什么 git rebase -i 最近会导致头部分离?它曾经用交互式变基的结果来更新我当前的分支。如何获得交互式变基以停止进入分离的 HEAD?

在从远程存储库拉取之前,我总是使用 git rebase -i 来压缩我的提交,以简化处理 git pull 中的任何合并冲突。我不必解决可能多个提交的冲突,而只需解决一个提交。

我使用的示例命令

# git rebase -i <tip of public branch> <my latest commit>
git rebase -i 380647533da 82f5ee67bed
Run Code Online (Sandbox Code Playgroud)

在 vim 中编辑 rebase 交互后:

pick 3ec7c211c49 version1
s 82f5ee67bed some significant refactoring
Run Code Online (Sandbox Code Playgroud)

编辑并保存提交后的输出:

[detached HEAD ea50304796c] version1
 Date: Thu Jun 6 17:04:36 2019 -0400
 14 files changed, 213 insertions(+), 52 deletions(-)
 create mode 100644     some file
 create mode 100644     some file
 create mode 100644     some file
Successfully rebased and updated detached HEAD.
Run Code Online (Sandbox Code Playgroud)

这与类似的 git rebase -idevelop HEAD 导致分离头不同 ,因为提问者想知道如何解决该 ONE 实例的问题。答案是git checkout -b branchName。在这个问题中,我想知道为什么它最近开始发生在我身上以及如何为所有未来的实例解决它。

这与类似的帖子git rebase -i with squash 不同,无法分离 HEAD,因为那里的错误消息是could not detach HEAD

tor*_*rek 7

显示的语法git rebase指南:

git rebase [-i | --interactive] [<options>] [--exec ] [--onto <newbase>] [<upstream> [<branch>]] git rebase [-i | --interactive] [<options>] [--exec <cmd>] [--onto <newbase>] --root [<branch>] git rebase --continue | --skip | --abort | --quit | --edit-todo | --show-current-patch

所以你的命令:

git rebase -i 380647533da 82f5ee67bed
Run Code Online (Sandbox Code Playgroud)

正在提供380647533da和。<upstream>82f5ee67bed<branch>

描述部分的第一段说:

如果指定了 <branch>,git rebasegit checkout <branch>将在执行其他操作之前自动执行。否则它保留在当前分支上。

所以,你的git rebase相当于:

git checkout 82f5ee67bed
git rebase 380647533da
Run Code Online (Sandbox Code Playgroud)

第一个命令导致分离的 HEAD。当变基完成时,分离的 HEAD 仍然保持这种状态。