Qual é a diferença entre "git branch" e "git checkout -b"?

Respostas:

259

git checkout -b BRANCH_NAMEcria uma nova ramificação e faz check-out da nova ramificação enquanto git branch BRANCH_NAMEcria uma nova ramificação, mas deixa você na mesma ramificação.

Em outras palavras, git checkout -b BRANCH_NAMEfaz o seguinte para você.

git branch BRANCH_NAME    # create a new branch
git checkout BRANCH_NAME  # then switch to the new branch
Fatih Acet
fonte
44

git branch cria a ramificação, mas você permanece na ramificação atual que efetuou o check-out.

git checkout -b cria uma ramificação e faz check-out.

Pode ser considerado uma forma curta de:

git branch name
git checkout name
manojlds
fonte
Vamos dizer: "git branch cria a ramificação, mas você permanece na ramificação atual A PARTIR DE QUE você fez o check-out".
Akash Verma
28
  • git branch: Mostra todos os seus ramos
  • git branch newbranch: Cria uma nova ramificação
  • git checkout -b newbranch: Cria uma nova ramificação e alterna para essa ramificação imediatamente. É o mesmo que git branch newbranchseguido por git checkout newbranch.
Michel Pereira
fonte
23

Sintaxe completa:

git checkout -b [NEW_BRANCH] [FROM_BRANCH]

O [FROM_BRANCH] é opcional. Se não houver FROM_BRANCH, o git usará a ramificação atual.

Tuong Le
fonte
7

Há também outro sinalizador a ser mencionado, que é relativo a estes.

git checkout -B BRANCH_NAME

Este é um comando muito útil que venho usando recentemente. Este comando faz check-out da ramificação especificada e redefine a ramificação com base na ramificação de origem.

ddavison
fonte
2
Você pode explicar mais? Eu não sei o que redefinir meios para git
Mikaël Mayer
3
Do manual no 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
Então você quer dizer que pode reutilizar uma ramificação existente?
Mikaël Mayer
1
É checkout -Bperigoso se o ramo para o qual você está mudando for compartilhado por outras pessoas? Eu usei isso recentemente e parecia mesclar automaticamente as alterações em meu outro ramo no ramo para o qual mudei.
21415 Jeff
Se você buscar um outro ramo desenvolvedores de controle remoto, e fazer um git checkout -B, então sim, seria fundir, ou possivelmente até mesmo substituir
ddavison
-1

Existem formas de ambos os comandos que são semelhantes (observando a versão 2.11.1 do git-scm docs):

git branch <branchname> <start-point>

e

git checkout -b <new_branch> <start_point>

O último executando primeiro o comando branch e depois adicionando o checkout. Nesse formulário, faz referência explícita ao documento do git-branch:

Especificar -b faz com que um novo ramo seja criado como se git-branch [2] fosse chamado e depois retirado

Pshemy108
fonte
1
Isso não adiciona nenhuma informação nova sobre a resposta aceita a partir de 2011.
melpomene
Na verdade, ele adiciona novas informações sobre o <ponto de início>. O que eu pessoalmente achei bastante útil para criar ramificações em objetos localizados em outros locais, sem precisar fazer check-out do objeto primeiro ou mover a ramificação atual. Usar anotações como [FROM_BRANCH] quando, na verdade, a referência-git é usada não é útil na minha opinião.
Pshemy108
O segundo argumento opcional não é relevante para a pergunta. É o mesmo entre os dois comandos, e o OP estava pedindo a diferença. (Se você realmente acha que é essencial, gostaria apenas de ter adicionado um comentário para a resposta aceita.)
melpomene
-1

Essencialmente:

A ramificação A-git permite criar uma ramificação pura e simples.

B -git checkout -b permite criar uma ramificação e alternar para ela ao mesmo tempo.

Quando você vai usar qual? Ramificação 1- git quando você deseja criar uma ramificação, mas permanece na ramificação atual. 2- git check--b quando você deseja criar e alternar. Se você observar, é intuitivo criar uma ramificação e mudar para ela. Então a escolha é sua :)

user2238769
fonte
4
Isso não adiciona nenhuma informação nova sobre a resposta aceita a partir de 2011.
melpomene