为什么最近,git rebase -i壁球导致头部分离

时间:2019-06-07 22:02:24

标签: git git-detached-head git-interactive-rebase

为什么git最近用南瓜将-i变基,导致头部分离?它过去使用交互式变基的结果来更新我的当前分支。如何获得交互式变基,以停止使用分离的HEAD?

我一直使用git rebase -i压缩提交,然后再从远程存储库中提取,以简化处理git pull中的任何合并冲突。不必解决潜在的多个提交冲突,而只需解决一个提交。

我使用的示例命令

# git rebase -i <tip of public branch> <my latest commit>
git rebase -i 380647533da 82f5ee67bed

在vim中编辑了rebase交互后:

pick 3ec7c211c49 version1
s 82f5ee67bed some significant refactoring

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

[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.

这与类似的帖子不同 git rebase -i develop HEAD leads to Detached Head 因为请求者想知道如何解决该ONE实例的问题。答案是git checkout -b branchName。在这个问题中,我想知道为什么它最近开始在我身上发生,以及如何解决所有FUTURE实例的问题。

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

2 个答案:

答案 0 :(得分:2)

syntax guide for 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

提供380647533da作为<upstream>,提供82f5ee67bed作为<branch>

说明部分的第一段说:

  

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

因此,您的git rebase等效于:

git checkout 82f5ee67bed
git rebase 380647533da

第一个命令导致分离的HEAD。重新建立基础后,分离的HEAD仍会保留这种方式。

答案 1 :(得分:1)

我在做:

git rebase -i 380647533da 82f5ee67bed

当我应该一直做的事时:

git rebase -i 380647533da