Безопасно ли проверять удаленные ветки в git? - PullRequest
3 голосов
/ 19 октября 2011

Я только начал изучать Git, и учебник, который я использую, говорит, что при клонировании удаленных репозиториев переключение на удаленную ветвь является большим отказом. То есть - если я клонировал репозиторий с именами веток branch1, и я хочу работать над ним, мне нужно использовать

git checkout --track -b branch1 origin/branch1

чтобы отследить. Тем не менее, когда я пытался использовать

git checkout branch1

Git ответил

Branch branch1 set up to track remote branch branch1 from origin.
Switched to a new branch 'branch1'

Итак, мой здравый смысл подсказывает, что с тех пор, как этот учебник был написан, разработчики Git исправили эту ловушку и сделали так, что если кто-то пытается переключиться на удаленную ветку, Git автоматически делает это правильно и создает локальную ветку, которая отслеживает Это. Однако я не могу найти никаких ссылок на это изменение в заметках о выпуске или в поиске Google.

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

Ответы [ 2 ]

5 голосов
/ 19 октября 2011

Вы не проверяете удаленную ветку.

Проверка branch1 - это не то же самое, что проверка "удаленной ветви".Следующая команда пытается извлечь локальную ветвь, которая не существует:

git checkout branch1

, а следующая команда проверяет фиксацию, на которую указывает удаленная ветвь:

git checkout origin/branch1

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

Git автоматически создаст локальную ветку и настроит ее для отслеживания удаленного устройства с тем же именем, если вы попытаетесьпроверить ветку, которая не существует локально, но имеет ветку с тем же именем на пульте.

1 голос
/ 19 октября 2011

С Documentation/RelNotes/1.6.6.txt:

  • "git checkout frotz", когда нет местной ветки "frotz", но там только одна ветка удаленного слежения "frotz" принимается за запросить запуск названной ветки на соответствующем пульте отслеживание ветки.

Так что да, разработчики Git немного упростили процесс: вам больше не нужно указывать --track -b для создания локальной ветки удаленного отслеживания. IIRC, до этого изменения Git жаловался на отсутствующую локальную ветку "frotz".

Как говорит meagar, проверка удаленных ветвей все еще возможна с использованием синтаксиса git checkout origin/branch1: это нормально, если вы просто хотите осмотреться, но вы не должны вносить в них постоянные изменения. Вот предупреждение, которое Git распечатывает, когда вы проверяете удаленную ветку:

$ git checkout origin/master
Note: checking out 'origin/master'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at a48aafd... Merge branch 'maint'
...