Uma ramificação local é uma ramificação que somente você (o usuário local) pode ver. Existe apenas na sua máquina local.
git branch myNewBranch # Create local branch named "myNewBranch"
Uma filial remota é uma filial em um local remoto (na maioria dos casos origin
). Você pode enviar a ramificação local recém-criada myNewBranch
para origin
. Agora outros usuários podem rastreá-lo.
git push -u origin myNewBranch # Pushes your newly created local branch "myNewBranch"
# to the remote "origin".
# So now a new branch named "myNewBranch" is
# created on the remote machine named "origin"
Uma filial de rastreamento remoto é uma cópia local de uma filial remota. Quando você myNewBranch
pressiona origin
o comando acima, uma ramificação de rastreamento remoto chamada origin/myNewBranch
é criada em sua máquina. Este ramo de rastreamento remoto acompanha o ramo remoto myNewBranch
em origin
. Você pode atualizar sua filial de rastreamento remoto para estar sincronizada com a filial remota usando git fetch
ou git pull
.
git pull origin myNewBranch # Pulls new commits from branch "myNewBranch"
# on remote "origin" into remote tracking
# branch on your machine "origin/myNewBranch".
# Here "origin/myNewBranch" is your copy of
# "myNewBranch" on "origin"
Uma ramificação de rastreamento local é uma ramificação local que está rastreando outra ramificação. Isso é para que você possa enviar / enviar confirmações de / para o outro ramo. As ramificações de rastreamento local na maioria dos casos rastreiam uma ramificação de rastreamento remoto. Ao enviar uma ramificação local para origin
usar a opção git push command
with -u
(como mostrado acima), você configura a ramificação local myNewBranch
para rastrear a ramificação de rastreamento remoto origin/myNewBranch
. Isso é necessário para usar git push
e git pull
sem especificar um upstream para empurrar ou puxar.
git checkout myNewBranch # Switch to myNewBranch
git pull # Updates remote tracking branch "origin/myNewBranch"
# to be in sync with the remote branch "myNewBranch"
# on "origin".
# Pulls these new commits from "origin/myNewBranch"
# to local branch "myNewBranch which you just switched to.
Aqui está a resposta longa.
Remotos:
Se você estiver usando o Git de forma colaborativa, provavelmente precisará sincronizar suas confirmações com outras máquinas ou locais. Cada máquina ou local é chamado de remoto , na terminologia do Git, e cada um pode ter uma ou mais ramificações. Na maioria das vezes, você terá apenas um, nomeado
origin
. Para listar todos os controles remotos, executegit remote
:Você pode ver para quais locais esses nomes remotos são atalhos, executando
git remote -v
:Cada controle remoto tem um diretório em
git/refs/remotes/
:Ramos em sua máquina:
TLDR: na sua máquina local, você tem três tipos de ramificações: ramificações locais sem rastreamento, ramificações locais e ramificações de rastreamento remoto. Em uma máquina remota, você tem apenas um tipo de ramificação.
1. Agências locais
Você pode visualizar uma lista de todas as filiais locais em sua máquina executando
git branch
:Cada filial local tem um arquivo em
.git/refs/heads/
:Existem dois tipos de filiais locais em sua máquina: filiais locais sem rastreamento e filiais locais.
1.1 Agências locais sem rastreamento
As ramificações locais sem rastreamento não estão associadas a nenhuma outra ramificação. Você cria um executando
git branch <branchname>
.1.2 Rastreando filiais locais
As ramificações locais de rastreamento estão associadas a outra ramificação, geralmente uma ramificação de rastreamento remoto. Você cria um executando
git branch --track <branchname> [<start-point>]
.Você pode visualizar qual de suas filiais locais está rastreando filiais usando
git branch -vv
:Na saída deste comando, você pode ver que a ramificação local
master
está rastreando a ramificação de rastreamento remotoorigin/master
e a ramificação localnew-feature
não está rastreando nada.Outra maneira de ver quais filiais estão rastreando filiais é observando
.git/config
.O rastreamento de filiais locais é útil. Eles permitem que você execute
git pull
egit push
, sem especificar qual ramificação upstream usar. Se o ramo não estiver configurado para rastrear outro ramo, você receberá um erro como este:2. Filiais de rastreamento remoto (ainda em sua máquina)
Você pode visualizar uma lista de todas as ramificações de rastreamento remoto em sua máquina executando
git branch -r
:Cada ramificação de rastreamento remoto tem um arquivo em
.git/refs/<remote>/
:Pense em suas ramificações de rastreamento remoto como seu cache local para o que as máquinas remotas contêm. Você pode atualizar suas ramificações de rastreamento remoto usando
git fetch
, que égit pull
usado nos bastidores.Mesmo que todos os dados de uma ramificação de rastreamento remoto sejam armazenados localmente em sua máquina (como um cache), ela ainda nunca é chamada de ramificação local. (Pelo menos, eu não chamaria assim!) É apenas chamado de ramo de rastreamento remoto.
Ramos em uma máquina remota:
Você pode visualizar todas as ramificações remotas (ou seja, as ramificações na máquina remota), executando
git remote show <remote>
:Este
git remote
comando consulta a máquina remota pela rede sobre suas ramificações. Ele não atualiza as ramificações de rastreamento remoto na sua máquina local, usegit fetch
ougit pull
para isso.Na saída, você pode ver todas as ramificações que existem na máquina remota, olhando sob o título "Ramificações remotas" (ignore as linhas marcadas como "obsoletas").
Se você pudesse efetuar login na máquina remota e encontrar o repositório no sistema de arquivos, consulte todas as suas ramificações em
refs/heads/
.Folha de dicas:
Para excluir uma filial local, seja de rastreamento ou não, com segurança:
Para excluir uma filial local, seja de rastreamento ou não de rastreamento, com força:
Para excluir uma ramificação de rastreamento remoto:
Para criar uma nova ramificação local sem rastreamento:
Para criar um novo ramo de rastreamento local: (Observe que, se
<start-point>
especificado e for um ramo de rastreamento remotoorigin/foobar
, o--track
sinalizador será incluído automaticamente)Exemplo:
Para excluir uma ramificação em uma máquina remota:
Para excluir todas as ramificações de rastreamento remoto obsoletas, ou seja, onde as ramificações correspondentes na máquina remota não existem mais:
Você deve ter notado que em alguns comandos você usa
<remote>/<branch>
e outros comandos<remote> <branch>
. Exemplos:git branch origin/hello-kitty
egit push --delete origin hello-kitty
.Pode parecer arbitrário, mas existe uma maneira simples de lembrar quando usar uma barra e quando usar um espaço. Quando você está usando uma barra, está se referindo a uma ramificação de rastreamento remoto em sua própria máquina, enquanto que quando está usando um espaço, na verdade, está lidando com uma ramificação em uma máquina remota pela rede.
fonte
Filial local:
Uma filial em sua máquina na qual você pode trabalhar e adicionar confirmações. Você pode listar esses ramos com
git branch
.Filial local (com rastreamento):
Uma filial local comum configurada para corresponder a uma filial remota. Isso tem benefícios como a capacidade de
git pull
egit push
sem a necessidade de especificar o repositório e o nome da ramificação. O rastreamento tambémgit status
informa quando a filial está à frente ou atrás do controle remoto.Filial remota:
Simplesmente uma ramificação em um repositório remoto - normalmente em um servidor como o GitHub etc.
Filial de rastreamento remoto:
Uma cópia local de uma filial remota. Este ramo nunca deve ser editado. Seu objetivo é acompanhar o estado atual de uma filial remota. As ramificações de rastreamento remoto podem ser visualizadas com
git branch -r
e geralmente se parecem comorigin/master
(nome do repo seguido de uma barra seguida pelo nome da ramificação). A execuçãogit fetch
atualizará as ramificações de rastreamento remoto para refletir o estado das ramificações remotas correspondentes.git branch -avv
é o meu favorito para exibir uma visão geral rápida de quais ramificações estão em minha máquina, quais ramificações estão no controle remoto e a confirmação mais recente em cada uma. A-a
parte especifica que todas as ramificações devem ser mostradas (remota e local). Osv
no final representam verboso (mostra o último hash e mensagem de confirmação). Agradecemos ao @Flimm por salientar que o segundov
adiciona informações sobre qual filial local está rastreando qual remoto.fonte