Есть ли разница между git checkoutи git checkout -b - PullRequest
0 голосов
/ 03 мая 2019

Я очень новичок в git, поэтому собираюсь сделать свой первый коммит, поэтому для этого я создал ветку, набрав git checkout my_branch. Это сработало нормально. Но после того, как я увидел в документации, что он используется git checkout -b my_branch

Есть ли разница между ними?

Ответы [ 2 ]

5 голосов
/ 03 мая 2019

Да

$ git checkout asdfadsf
error: pathspec 'asdfasdf' did not match any file(s) known to git

Это не удалось, потому что у меня нет ветви asdfasdf. Git попытался обработать asdfasdf как имя файла, а у меня * * * * * нет файла с именем asdfasdf.

$ git checkout -b asdfasdf
Switched to a new branch 'asdfasdf'

Это удалось и создал новую ветвь.

С другой стороны, у меня нет ветви с именем maint, и все же:

$ git checkout maint
Branch 'maint' set up to track remote branch 'maint' from 'origin'.
Switched to a new branch 'maint'

Это тоже создало новую ветку, maint. Но обратите внимание, как это выглядит по-другому. Это все еще говорит Switched to a new branch, но сначала это говорит Branch 'maint' set up to track remote branch 'maint' from 'origin'.

Причина этого немного сложна, но сводится к следующему:

  • Без -b, если вы попросите ветку, которой у вас нет, Git попробует несколько альтернатив. Некоторые из них могут работать! Когда он работает так же, как maint здесь, в новой ветви уже установлен upstream .
  • При -b Git просто создаст ветку, без вопросов (при условии, что создание новой ветки возможно). Новая ветка не будет настроена с восходящим потоком. Если у вас уже есть ветка, вы получите ошибку.

Если вы хотите ветку с установленным восходящим потоком - например, если есть origin/feature/x123, и вы хотите, чтобы ваш собственный feature/x123 был создан, чтобы соответствовать - вы не хочу параметр -b, потому что он не будет выполнять поиск восходящего потока origin/feature/x123. Если вы не хотите установить восходящий поток, вы делаете хотите параметр -b.

(Если вы хотите, чтобы восходящий набор был для вас - это отдельный вопрос. Найдите в StackOverflow существующие ответы.)

0 голосов
/ 03 мая 2019

когда вы запускаете с -b, вы говорите git создать ветку для вас. git checkout без -b требует, чтобы ветвь существовала уже для работы.

...