"git checkout <commit id>" меняет ветку на "no branch"
Я работаю над веткой в git. Когда я делаю
git checkout <commit id>
(зафиксировать идентификатор, полученный из git log
), он получает привязанность к этому конкретному изменению, но ветвь изменена на <No-branch>
.
Почему это происходит? Как вы разрешаете это?
Ответы
Ответ 1
Если вы checkout
зафиксируете sha напрямую, он помещает вас в состояние "отсоединенной головы", которое в основном означает, что текущая шага, которую проверила ваша рабочая копия, не имеет ветки, указывающей на нее.
Если вы еще не совершили никаких коммитов, вы можете оставить состояние отдельной головы, просто проверив, какая ветка была включена, прежде чем проверять фиксацию:
git checkout <branch>
Если вы сделали фиксации, когда вы были в состоянии отдельной головы, вы можете сохранить свою работу, просто привязав ветку до или когда вы покидаете состояние отдельной головы:
# Checkout a new branch at current detached head state:
git checkout -b newBranch
Подробнее о состоянии автономной главы в официальном документе Linux Git docs для проверки.
Ответ 2
Выбрав один из коммитов в истории, вы перемещаете свой git в так называемое "отсоединенное состояние", которое выглядит не так, как вы хотите. Используйте эту единственную команду для создания новой ветки на одной из записей из истории:
git checkout -b <new_branch_name> <SHA1>
Ответ 3
Если вы являетесь веткой master
и вы делаете git checkout <SHA>
Я уверен, что это приводит к тому, что git загружает эту фиксацию в состояние detached, меняя вас из текущего ветвь.
Если вы хотите внести изменения, вы можете, а затем вы можете сделать git checkout -b <mynewbranch>
, чтобы создать новую ветку, основанную на этой фиксации, и любые сделанные вами изменения.
Ответ 4
Является ли это фиксацией в другой ветке? Git checkout <commitid>
просто переключится на другую ветвь, если фиксация произошла в другой ветке. Вы захотите объединить изменения в свою первую ветку, если хотите, чтобы там был код.