Трудно сказать без подробностей.
git pull
извлекает изменения из удаленного хранилища, а затем выполняет слияние. Его можно настроить на перебазирование вместо слияния (либо с помощью git pull --rebase
, либо путем настройки истинного значения для branch.<branch_name>.rebase
для ветви, в которую вы входите).
Если вы начали с ветки, любое вытягивание типа слияния всегда будет оставлять вас на этой ветке. С другой стороны, команда rebase всегда работает с использованием временно отключенного HEAD (он же «без ветки»). Если вы были оставлены в этом состоянии во время извлечения типа rebase, то это потому, что в части rebase обнаружены конфликты, и он ожидает, когда вы решите их и используете rebase --continue
(или --skip
, или --abort
).
По умолчанию в reflog хранятся все обновления, сделанные в HEAD (также может быть по одному для каждой ветви). Вы можете просмотреть reflog с помощью git reflog show
(или git log -g
для более подробного просмотра). Это может помочь вам определить, как вы попали в это состояние.
Если вы находитесь в середине перебазирования (у вас есть каталог .git/rebase-apply
), то он, вероятно, остановился, чтобы позволить вам разрешить некоторые конфликты. Используйте git status
, чтобы проверить «не объединенные» записи. Любые такие записи должны иметь встроенные в файлы маркеры конфликта (при условии, что они представляют собой простые текстовые файлы). Вы должны отредактировать их, чтобы разрешить конфликт (ы), и они пометят их как объединенные, запустив на них git add
. Затем запустите git rebase --continue
, чтобы продолжить перебазирование. Вы можете столкнуться с большим количеством конфликтов, которые должны быть обработаны аналогичным образом (изменить, добавить, продолжить). Если вы решите, что вам больше не нужен конкретный коммит, вы можете пропустить его с помощью git rebase --skip
. Вы можете прервать весь ребаз с помощью git rebase --abort
. Все эти команды перебазирования перечислены в сообщении об ошибке, когда перебазирование прекращается из-за любого конфликта. Как только все ожидающие коммиты будут применены (или пропущены), ваша исходная ветвь будет обновлена с последним новым коммитом, и ваш HEAD будет присоединен к нему (если вы прерветесь, ваш HEAD будет присоединен без обновления ветки).
Если ваша отсоединенная ГОЛОВКА не вызвана конфликтами, возникшими в середине перебазирования, то ваша ГОЛОВКА была отсоединена в некоторый момент до извлечения. Вам нужно будет оценить текущее состояние дерева, чтобы решить, что вы хотите сделать. Вы можете использовать git show-branch --current --all
или git log --graph --oneline --decorate --all
или графический инструмент, такой как gitk
, чтобы узнать, как ваша текущая (отдельная) HEAD связана с другими вашими ветвями. Если вы решите, что хотите сохранить содержимое вашего заголовка, вы можете создать для него новую ветку с помощью git branch new_branch_name
. Если вы хотите перезаписать существующую ветку, используйте git branch --force existing_branch_name
. Затем используйте git checkout branch_name
, чтобы присоединить ГОЛОВКУ хранилища к ветке.