Почему недавно git rebase -i squash приводит к отстраненной голове - PullRequest
1 голос
/ 08 июня 2019

Почему git rebase -i с squashes в последнее время приводит к отсоединению головы?Раньше обновлял мою текущую ветку с результатом интерактивной перебазировки.Как получить интерактивное перебазирование, чтобы перестать переходить на отключенный HEAD?

Я всегда использовал git rebase -i, чтобы раздавить свои коммиты, прежде чем извлекать из удаленного репозитория, чтобы упростить обработку любых конфликтов слияния из git pull.Вместо того, чтобы разрешать конфликты из-за потенциально нескольких моих коммитов, мне нужно будет разрешить только один коммит.

Пример команды, которую я использую

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

После редактирования интерактивной перебазировки в vim:

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 приводит к Detached Head , потому что спрашивающий хочетзнать, КАК решить проблему для этого ОДНОГО экземпляра.ответ git checkout -b branchName.В этом вопросе я хочу узнать, ПОЧЕМУ это начало происходить со мной недавно, и КАК разрешить это для всех БУДУЩИХ экземпляров.

Это отличается от аналогичного поста git rebase -i with squash не может отсоединить HEAD потому что сообщение об ошибке там could not detach HEAD

Ответы [ 2 ]

2 голосов
/ 08 июня 2019

Руководство по синтаксису для git rebase показывает:

<em>git rebase</em> [-i | --interactive] [<options>] [--exec ] [--onto <newbase>] [<upstream> [<branch>]] <em>git rebase</em> [-i | --interactive] [<options>] [--exec <cmd>] [--onto <newbase>] --root [<branch>] <em>git rebase</em> --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.Эта отсоединенная ГОЛОВА остается такой же, когда заканчивается перебазирование.

1 голос
/ 24 июня 2019

я делал:

git rebase -i 380647533da 82f5ee67bed

Когда я должен был делать то, что я всегда делаю:

git rebase -i 380647533da
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...