3

为什么 git rebase -i with squashes 最近会导致头部分离?它曾经用交互式 rebase 的结果更新我当前的分支。如何获得交互式 rebase 以停止去分离的 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 development HEAD 导致分离头不同 ,因为提问者想知道如何解决该 ONE 实例的问题。答案是git checkout -b branchName。在这个问题中,我想知道为什么它最近开始发生在我身上,以及如何为所有 FUTURE 实例解决它。

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

4

2 回答 2

5

节目的语法指南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>

描述部分的第一段说:

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

所以,你git rebase相当于:

git checkout 82f5ee67bed
git rebase 380647533da

第一个命令导致分离的 HEAD。当 rebase 完成时,分离的 HEAD 保持不变。

于 2019-06-07T22:17:05.280 回答
2

我在做:

git rebase -i 380647533da 82f5ee67bed

当我应该做我一直做的事情时:

git rebase -i 380647533da
于 2019-06-24T12:16:26.737 回答