detached head git как исправить

Почему получаю detached head?

после того как переключаюсь на ветку develop в репазитории origin :

Так вот я тут почитал, что состояние detached получаем вот так

Оно характеризуется тем, что HEAD указывает не на вершину ветки, а просто на коммит. HEAD всегда должен указывать только на вершину какой-либо ветки!

Почему тогда я получаю detached если это моя ветка?? Это ж не просто коммит.

При переключении на удаленную ветку develop получаю такое сообщение

detached head git как исправить

1 ответ 1

HEAD всегда должен указывать только на вершину какой-либо ветки!

Ветка в git — это плавающий указатель на коммит. у указателя нет и не может быть никакой «вершины».

Специальный указатель HEAD вполне может указывать и не на ветку, а на конкретный коммит (т.н. detached head). как в вашем случае.

Это просто «нестандартная» ситуация, которая может понадобиться в особых случаях.

Почему тогда я получаю detached если это моя ветка?

Потому вам, скорее всего, требуется

Ответы на дополнительные вопросы, заданные в комментарии:

Краткий ответ: потому что так задумано.

Более длинный ответ требует захода очень издалека. Попробую.

Как вы (надеюсь) знаете из толстых руководств, каждый коммит содержит в себе привязку к другому, родительскому коммиту (есть два исключения: самый первый в хранилище коммит не имеет такой привязки, а т.н. коммиты слияния (merge commits) могут содержать два и более родительских коммита). Посмотреть эту информацию можно, например, так:

Если этот файл содержит хэш коммита (т.н. «состояние detached head), то этот коммит и есть родительский.

Саму процедуру создания коммита (её «технический» аспект) я описывать не буду («на полях слишком мало места» © пьер ферма), но упомяну про действие в финале этого процесса:

Если файл HEAD содержит хэш коммита («состояние detached head), то в этот файл записывается новое содержимое — хэш только что созданного коммита.

А давайте посмотрим, что выйдет в таком случае.

Вот (в частности) чтобы не создавать такой «бардак», checkout и не запишет в файл HEAD ссылку на удалённую ветку.

Другая причина (по-моему, более веская) — неопределённость действий git при командах pull / push в нашей искусственно созданной ситуации. Да, в текущей реализации git откажется что-либо делать, выдав по простыне сообщений об ошибках. Но если реализовывать какое-то поведение в такой ситуации, то каким оно должно быть? Я лично затрудняюсь с ответом. Вполне вероятно, что и у разработчиков программы такая же проблема. Вот при git checkout удалённая-ветка они и решили записывать в HEAD хэш коммита (создавая «состояние detached head»), а не ссылку на удалённую ветку (создавая неопределённость).

Да, это нормально. см. выше.

Источник

Git: как вернуться из состояния ‘detached HEAD’

Если бы кто-нибудь проверил ветка:

git checkout 760ac7e

4 ответа

Если вы помните, какая ветвь была проверена раньше (например, master ), вы можете просто

Вообще говоря: git checkout
избавит вас от этого.

Если вы не помните название последней ветви, попробуйте

Это также пытается проверить вашу последнюю проверенную ветвь.

Используйте git reflog для поиска хэшей ранее извлеченных коммитов.

У меня был этот крайний случай, когда я проверил предыдущую версию кода, в которой моя структура каталогов файлов была другой:

git checkout master не сработало:

тогда вы можете потерять свои коммиты!! Вместо этого, вы можете захотеть сделать это:

а затем объедините commits-from-detached-head в любую ветвь, которую вы хотите, чтобы не потерять коммиты.

Похожие вопросы:

Я пытаюсь получить удаленную ветку и отследить ее, но когда я это делаю: git checkout remotes/mybranch Когда я делаю git branch-a, он отображает пульты дистанционного управления/mybranch красным.

Я хочу вернуться к определенному коммиту (не только к одному файлу, но и ко всему проекту). Я попробовал: git checkout 0780033 но потом получил следующее сообщение: Вы находитесь в состоянии.

Используя Git X и, должно быть, что-то по-королевски нащупал. Похоже, несколько дней назад я создал ветвь под названием detached HEAD и посвятил себя ей. Мой обычный процесс состоит в том, чтобы.

Используя git, я хотел бы перейти в состояние detached HEAD и создать новый коммит. Затем я хотел бы создать тег и отправить как ‘detached commit’, так и тег в удаленное РЕПО. Возможно ли это? Если.

есть проблема с cocoapods/git. Я пытаюсь добавить новый модуль в проект и получить следующую проблему. Дело в том, что член команды не получил проблему, когда он попытался добавить модуль в проект.

Я новичок в GIT. Я создал виртуальный хост и настроил свой проект локально. Все ветви сайта перечислены, включая origin/sprint. я хотел переключиться на origin/sprint ветку и начать свою работу. (Я.

Я понял, что совершил в своей ветке что-то плохое, и хочу вернуться к более раннему совершению. Я подтвердил, что git checkout 8dd018c приводит меня к более раннему коммиту, к которому я хочу.

Источник

Pro Git

Страницы

четверг, 19 марта 2015 г.

Про отрубленную голову Git (detached HEAD state)

В этой статье пойдет речь про отрубленное отсоединенное состояние указателя HEAD. Надо понимать что названия веток в Git это указатели на коммиты. Имя ветки, допустим master, указывает на последний коммит в ветке master.

Существует так же множество других указателей и один из них HEAD, но это очень важный указатель. И вот о нем мы и поговорим.

И так у нас есть история коммитов

detached head git как исправить

И сейчас указатель ветки master и указатель HEAD указывают на последний коммит С4 в ветке master.

То же самое можно увидеть в Git

detached head git как исправить

Оба указателя master и HEAD указывают на коммит С4 (efaaf18).

Теперь передвинем указатель HEAD на коммит C2 командой

$ git checkout 7bbbd68

detached head git как исправить

Вот мы и получили отрубленную отсоединеннуюый голову указатель HEAD. И Git нам любезно сообщил что снег башка попал…

На диаграмме это можно изобразить так

detached head git как исправить

И Git порекомендовал нам создать новую ветку, а так же сообщил хэш коммита на который сейчас указывает HEAD.

Все это можно увидеть в Git

detached head git как исправить

Посмотреть историю перемещения головы можно командой git reflog

detached head git как исправить

На скрине мы так же посмотрели состояние Git и он нам (аж красным) сообщил, что башка отсоединена на коммит 7bbbd68.

Указатель HEAD по существу указывает на тот коммит, после которого будет сделан следующий коммит. И если в состоянии отрубленной головы мы сейчас сделаем еще один коммит, то у нас будет шанс потерять его, не в смысле что он будет не доступен, а что если мы не будем помнить хэш этого коммита, то мы ни когда не сможем на него переключится.

Давайте сделаем коммит и посмотрим что будет. Изменим файлик и посмотрим статус

detached head git как исправить

Ну и делаем коммит

detached head git как исправить

Из лога коммитов видно что сейчас HEAD указывает на коммит С5 (84b361c), но на этот коммит не указывает ни какая ветка, верней сказать ни какой указатель ветки.

Графически это можно изобразить так

detached head git как исправить

Мы по прежнему находимся в состоянии detached HEAD, о чем нам все время напоминает Git. Еще раз напомню что это означает что HEAD указывает не на вершину какой-либо ветки, а просто на коммит. В нашем случае на коммит С5 (84b361c).

Выйти из состояния detached HEAD очень легко, для этого надо переключится на какую-либо ветку или создать новую ветку.

Давайте переключимся на ветку master командой git checkout master

detached head git как исправить

При переключении на ветку master, Git заботливо нас предупредил, что мы оставляем 1 commit, который не присоединен ни к какой ветке. Сообщил нам имя этого коммита – С5 и его хэш – 84b361c. И посоветовал, что возможно уже самое время создать новую ветку командой

git branch new_branch_name 84b361c

Поскольку если мы сейчас не создадим ветку (указатель) на этом коммите, то мы можем его потерять.

Если сейчас дать команду просмотра лога коммитов, то мы коммит С5 в логе не увидим

detached head git как исправить

Таким образом мы можем “потерять” коммит С5, если забудем его хэш. Конечно, как уже говорилось, что в Git какой-либо сделанный коммит сложно потерять (но можно). И в данном случае мы можем посмотреть историю перемещения HEAD

detached head git как исправить

и в ней мы можем увидеть наш потерянный коммит, хотя мы его и не видели в истории коммитов (логе коммитов).

Теперь дадим команду

$ git branch lost_branch 84b361c

detached head git как исправить

Теперь, все хорошо. На коммит С5 указывает ветка lost_branch

Графически это выглядит так

detached head git как исправить

Теперь мы легко можем переключится на ветку lost_branch и состояния HEAD deatached уже не будет, поскольку HEAD уже будет указывать на вершину ветки lost_branch.

detached head git как исправить

Сейчас переключение произошло безболезненно, поскольку это вполне штатная работа в Git.

Ну и покажу это состояние графически

detached head git как исправить

На этом, с отсоединенной головой пока все. Хотя есть еще варианты по отделению головы в Git, но об этом как-нибудь в другой раз.

Источник

Git: How to return from ‘detached HEAD’ state

If one would checkout a branch:

git checkout 760ac7e

4 Answers 4

If you remember which branch was checked out before (e.g. master ) you could simply

to get out of detached HEAD state.

Generally speaking: git checkout
will get you out of that.

If you don’t remember the last branch name, try

This also tries to check out your last checked out branch.

Use git reflog to find the hashes of previously checked out commits.

detached head git как исправить

I had this edge case, where I checked out a previous version of the code in which my file directory structure was different:

git checkout master did not work:

You may have made some new commits in the detached HEAD state. I believe if you do as other answers advise:

then you may lose your commits!! Instead, you may want to do this:

and then merge commits-from-detached-head into whatever branch you want, so you don’t lose the commits.

Not the answer you’re looking for? Browse other questions tagged git or ask your own question.

Related

Hot Network Questions

Subscribe to RSS

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.9.16.40224

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

Источник

Detached head git как исправить

detached head git как исправить

detached head git как исправить

Существует так же множество других указателей и один из них HEAD. Это очень важный указатель. И вот о нем мы и поговорим.

Итак, у нас есть история коммитов:

detached head git как исправить

То же самое можно увидеть в Git:

detached head git как исправить

Оба указателя master и HEAD указывают на коммит С4 (efaaf18).

Теперь передвинем указатель HEAD на коммит C2 командой

$ git checkout 7bbbd68

detached head git как исправить

На диаграмме это можно изобразить так:

detached head git как исправить

И Git порекомендовал нам создать новую ветку, а так же сообщил хэш коммита на который сейчас указывает HEAD.

Все это можно увидеть в Git:

detached head git как исправить

Посмотреть историю перемещения головы можно командой git reflog :

detached head git как исправить

На скрине мы так же посмотрели состояние Git и он нам (аж красным) сообщил, что башка отсоединена на коммит 7bbbd68.

Указатель HEAD по существу указывает на тот коммит, после которого будет сделан следующий коммит. И если в состоянии перемещенного HEAD мы сейчас сделаем еще один коммит, то у нас будет шанс потерять его, не в смысле что он будет не доступен, а что если мы не будем помнить хэш этого коммита, то мы ни когда не сможем на него переключится.

Давайте сделаем коммит и посмотрим что будет. Изменим файлик и посмотрим статус

detached head git как исправить

Ну и делаем коммит

detached head git как исправить

Из лога коммитов видно что сейчас HEAD указывает на коммит С5 (84b361c), но на этот коммит не указывает ни какая ветка, верней сказать ни какой указатель ветки.

Графически это можно изобразить так:

detached head git как исправить

Мы по прежнему находимся в состоянии detached HEAD, о чем нам все время напоминает Git. Еще раз напомню что это означает что HEAD указывает не на вершину какой-либо ветки, а просто на коммит. В нашем случае на коммит С5 (84b361c).

Выйти из состояния detached HEAD очень легко, для этого надо переключится на какую-либо ветку или создать новую ветку.

Давайте переключимся на ветку master командой git checkout master

detached head git как исправить

При переключении на ветку master, Git заботливо нас предупредил, что мы оставляем 1 commit, который не присоединен ни к какой ветке. Сообщил нам имя этого коммита – С5 и его хэш – 84b361c. И посоветовал, что возможно уже самое время создать новую ветку командой:

git branch new_branch_name 84b361c

Поскольку если мы сейчас не создадим ветку (указатель) на этом коммите, то мы можем его потерять.

Если сейчас дать команду просмотра лога коммитов, то мы коммит С5 в логе не увидим:

detached head git как исправить

Таким образом мы можем “потерять” коммит С5, если забудем его хэш. Конечно, как уже говорилось, что в Git какой-либо сделанный коммит сложно потерять (но можно). И в данном случае мы можем посмотреть историю перемещения HEAD:

detached head git как исправить

и в ней мы можем увидеть наш потерянный коммит, хотя мы его и не видели в истории коммитов (логе коммитов).

Теперь дадим команду

$ git branch lost_branch 84b361c

detached head git как исправить

Теперь, все хорошо. На коммит С5 указывает ветка lost_branch

Графически это выглядит так:

detached head git как исправить

Теперь мы легко можем переключится на ветку lost_branch и состояния HEAD deatached уже не будет, поскольку HEAD уже будет указывать на вершину ветки lost_branch.

detached head git как исправить

Сейчас переключение произошло безболезненно, поскольку это вполне штатная работа в Git.

Ну и покажу это состояние графически:

detached head git как исправить

На этом, с отсоединенным указателем HEAD пока все. Хотя есть еще варианты по отделению указателя HEAD в Git, но об этом как-нибудь в другой раз.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *