Подтвердить что ты не робот

Почему git установил нас (нет ветки)?

Сегодня утром мы вытаскиваем из нашего репо, а git ставим нас (нет ветки).

Я не понимаю этого, почему это произошло? И как выйти из этого без потери наших изменений?

4b9b3361

Ответ 1

"В настоящее время нет ни одной ветки" означает, что у вас есть detached head, то есть ваш указатель HEAD напрямую ссылается на фиксацию вместо символического указания имени ветки.

Вы можете попасть в эту ситуацию, проверив фиксацию SHA1, или когда вы находитесь в середине переадресации или когда слияние сбой. Трудно сказать, что вы, возможно, сделали, чтобы случайно попасть в эту ситуацию.

Сказано, что вы можете потерять свои изменения, когда вы переключаетесь с отдельной главы на какую-либо ветку, но рефлок всегда будет отслеживать, где движется ваш ГОЛОВА. Фактически, Git 1.7.5 предупреждает вас при переключении с отсоединенного HEAD, потеряет фиксации. Единственный раз, когда вы можете действительно потерять работу, - это когда у вас есть незафиксированные изменения, которые вы, возможно, захотите зафиксировать или заблокировать.

Простой способ узнать, что произошло, это git reflog или git log -g --decorate для более подробного перечисления. Опция --decorate будет обозначать каждый SHA1 именами всех ветвей, которые указывают на нее. Если SHA1 вашей текущей HEAD точно такой же, как у мастера, тогда вам не нужно ничего делать, кроме git checkout master, чтобы вернуться в нужное русло. В противном случае см., Если на SHA1 указана другая ветвь. Если нет, возможно, вы захотите создать ветку, чтобы она зависала.

Еще одна хорошая команда - git branch -av, которая также будет перечислять все ветки и то, на что они указывают, чтобы вы могли видеть, что действительно должно быть вашим (no branch).

Ответ 2

Трудно сказать без каких-либо подробностей.

git pull извлекает изменения из удаленного репозитория, а затем выполняет слияние. Он может быть настроен на выполнение переадресации вместо слияния (либо с помощью git pull --rebase, либо путем настройки истинного значения для branch.<branch_name>.rebase для ветки, в которую вы тянете).

Если вы начали на ветке, любое притяжение типа merge всегда оставит вас на этой ветке. С другой стороны, команда rebase всегда работает, используя временно отсоединенную HEAD (иначе называемую "ветвь" ). Если вы были оставлены в этом состоянии во время притяжения типа rebase-типа, то это связано с тем, что часть перетаскивания при столкновении столкнулась с конфликтами и ожидает, что вы их разрешите и используйте rebase --continue (или --skip или --abort).

По умолчанию reflog хранит каждое обновление, которое делается для HEAD (также может быть один для каждой ветки). Вы можете просмотреть reflog с помощью git reflog show (или git log -g для более подробного представления). Это может помочь вам определить, как вы попали в это состояние.

Если вы находитесь в середине rebase (у вас есть каталог .git/rebase-apply), тогда он, вероятно, остановился, чтобы разрешить некоторые конфликты (конфликты). Используйте git status для проверки "несвязанных" записей. Любые такие записи должны иметь маркеры конфликтов, встроенные в файлы (при условии, что они представляют собой текстовые файлы). Вы должны отредактировать их для разрешения конфликта (ов), и они помечают их как объединенные, запустив git add на них. Затем запустите git rebase --continue, чтобы продолжить переустановку. Вы можете столкнуться с большим количеством конфликтов, которые должны обрабатываться аналогичным образом (редактировать, добавлять, продолжать). Если вы решите, что вам больше не нужна конкретная фиксация, вы можете пропустить ее с помощью git rebase --skip. Вы можете прервать всю переадресацию с помощью git rebase --abort. Все эти команды переадресации перечислены в сообщении об ошибке, когда rebase прекращается из-за конфликта. После того, как все ожидающие коммиты были применены (или пропущены), ваш исходный филиал будет обновлен с последним новым фиксатором, и ваш HEAD будет привязан к нему (если вы прервете, ваш HEAD будет повторно подключен без обновления ветки).

Если ваш отсоединенный 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, чтобы снова подключить HEAD вашего хранилища к ветке.

Ответ 3

Обратите внимание, что в случае выполнения "git pull --rebase" при отключении HEAD, Git попытался найти ветвь восходящего потока отсоединенного HEAD (которая по определению не существует) и испускается ненужным сообщения об ошибках.

Это уже не так с Git1.8.0.1 (26 ноября 2012 г.)

См. это коммит.