Почему Git скажите мне "В настоящий момент ни одна ветка" после запуска "git checkout origin/<branch>"?

Я пытался следовать инструкциям Git: "В настоящий момент ни одна ветка не существует." Есть ли простой способ вернуться на ветку, сохраняя изменения?, но git checkout выглядит сломанным:

$ git checkout origin/web-zach
HEAD is now at 1366cb1... Changed so css files not ignored

$ git status
# Not currently on any branch.
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       .cordova/config.xml
#       www/languages/pt/sounds/
nothing added to commit but untracked files present (use "git add" to track)

В частности, я беспокоюсь о сообщении "Не в настоящее время в любом филиале". git checkout, кажется, ничего не делает здесь... Разве не вся цель этой команды поставить меня на ветку? Как я могу вернуться на ветку и снова зафиксировать/нажать?

Ответы

Ответ 1

Результат git status указывает, что ваш рабочий каталог чист; хорошо.

Теперь, запустив

git checkout origin/web-zach

вы пытаетесь проверить ветвь удаленного отслеживания, называемую origin/web-zach; это особый тип ветки, локальный для вашего репо, который отслеживает соответствующую ветвь, web-zach, живущую в удаленном репозитории под названием origin.

Однако ссылка HEAD (которую вы можете рассматривать как маркер You-are-here здесь на карте) не может указывать на ветку удаленного отслеживания; только в "нормальную" локальную ветвь или непосредственно на фиксацию. Когда вы пытаетесь проверить ветвь удаленного отслеживания, ссылка HEAD заканчивается, указывая непосредственно на конец ветки удаленного отслеживания (т.е. Фиксация, на которую указывает эта ветка удаленного отслеживания):

enter image description here

Когда HEAD не указывает на "нормальную" локальную ветвь, но указывает на фиксацию напрямую, вы оказываетесь в так называемом "состоянии отсоединенного состояния". Это не конец света, но, избегая приземления в этом состоянии в максимально возможной степени (по крайней мере в начале вашего обучения Git), вероятно, избавит вас от некоторых неожиданностей.

Чтобы исправить ситуацию, вам нужно повторно привязать HEAD к некоторой локальной ветке. Здесь вы можете создать и проверить такую ​​локальную ветвь, выполнив, например,

git checkout -b web-zach

HEAD будет указывать на вновь созданную локальную ветвь с именем web-zach:

enter image description here

Затем вы должны получить

$ git status
On branch web-zach
Untracked files:
  (use "git add <file>..." to include in what will be committed)
      .cordova/config.xml
      www/languages/pt/sounds/
nothing added to commit but untracked files present (use "git add" to track)

После этого вы сможете вносить изменения, ставить их, фиксировать и (если у вас есть доступ на запись к удаленному репо, соответствующему origin, и никто другой не нажал ничего на origin/web-zach с момента последнего git fetch), нажмите, используя

git push -u origin web-zach