В чем разница между «git branch» и «git checkout -b»?

195

Я использовал, git checkout -bчтобы создать новую ветку. Я думаю, что это git branchделает то же самое. Чем эти две команды отличаются, если они отличаются вообще?

Адриен Джоли
источник
atlassian.com/git/tutorials/using-branches
ΦXocę 웃 Пепеупа

Ответы:

259

git checkout -b BRANCH_NAMEсоздает новую ветку и проверяет новую ветку, а git branch BRANCH_NAMEсоздает новую, но оставляет вас в той же ветке.

Другими словами, git checkout -b BRANCH_NAMEделает следующее для вас.

git branch BRANCH_NAME    # create a new branch
git checkout BRANCH_NAME  # then switch to the new branch
Фатих Ацет
источник
44

git branch создает ветку, но вы остаетесь в текущей ветке, которую вы извлекли.

git checkout -b создает ветку и проверяет ее.

Это можно считать краткой формой:

git branch name
git checkout name
manojlds
источник
Скорее, скажем: «git branch создает ветку, но вы остаетесь в текущей ветке, из которой вы извлекли».
Акаш Верма
28
  • git branch: Показывает все ваши ветви
  • git branch newbranch: Создает новую ветку
  • git checkout -b newbranch: Создает новую ветку и немедленно переключается на эту ветку. Это то же самое, что git branch newbranchи git checkout newbranch.
Мишель Перейра
источник
24

Полный синтаксис:

git checkout -b [NEW_BRANCH] [FROM_BRANCH]

[FROM_BRANCH] является необязательным. Если нет FROM_BRANCH, git будет использовать текущую ветку.

Туонг Ле
источник
7

Есть также еще один флаг, чтобы упомянуть, который относится к этим ..

git checkout -B BRANCH_NAME

Это очень полезная команда, которую я недавно использовал. Эта команда проверяет указанную вами ветвь и сбрасывает ветку на основе исходной ветки.

ddavison
источник
2
Можете ли вы объяснить больше? Я не знаю, что означает сброс для мерзавца
Микаэль Майер
3
Из руководства по git:If -B is given, <new_branch> is created if it doesn't exist; otherwise, it is reset. This is the transactional equivalent of $ git branch -f <branch> [<start point>] $ git checkout <branch>
ddavison
То есть вы имеете в виду, что можете повторно использовать существующую ветку?
Микаэль Майер
1
Является ли checkout -Bопасно , если ветвь вы переход на общий другими? Я использовал это недавно, и, похоже, он автоматически сливался в изменениях в моей другой ветке с веткой, на которую я переключился.
Джефф
если вы извлечете другую ветку для разработчиков с удаленного компьютера и выполните a, git checkout -Bто да, она слилась бы или, возможно, даже заменила
ddavison
-1

Существуют формы обеих команд, которые похожи (смотрите git-scm docs Версия 2.11.1):

git branch <branchname> <start-point>

и

git checkout -b <new_branch> <start_point>

Последнее выполнение команды ветвления первой , а затем добавить проверку. В этой форме явно ссылаются на документ git-branch:

Указание -b вызывает создание новой ветви, как если бы git-branch [2] была вызвана и затем извлечена

Pshemy108
источник
1
Это не добавляет никакой новой информации о принятом ответе от 2011 года.
melpomene
Это фактически добавляет новую информацию о <начальная точка>. Который я лично нашел весьма полезным для создания веток в другом месте, находящемся в другом месте, без необходимости предварительно извлекать объект или перемещать текущую ветвь. Использование обозначений как [FROM_BRANCH], когда на самом деле подразумевается git-ссылка, на мой взгляд, бесполезно.
Pshemy108
Необязательный второй аргумент не имеет отношения к вопросу. То же самое между обеими командами, и OP спрашивал разницу. (Если вы действительно считаете это необходимым, я бы просто добавил комментарий к принятому ответу.)
melpomene
-1

По существу:

A-git branch позволяет вам создавать простые и простые ветки.

B -git checkout -b позволяет вам создать ветку и одновременно переключиться на нее.

Когда вы будете использовать что? 1- git branch, когда вы хотите создать ветку, но остаетесь в текущей ветке. 2- git checkout -b, когда вы хотите создать и переключиться. Если вы посмотрите на это, интуитивно понятно создать ветку и переключиться на нее. Так что выбор за вами :)

user2238769
источник
4
Это не добавляет никакой новой информации о принятом ответе от 2011 года.
melpomene