Git: Mesclar uma ramificação remota localmente

204

Eu puxei todas as ramificações remotas via git fetch --all. Eu posso ver o ramo que eu gostaria de mesclar git branch -acomo controles remotos / origem / nome da filial. O problema não é acessível. Não consigo mesclar ou fazer checkout?

micahblu
fonte

Respostas:

321

Você pode fazer referência a esses ramos de rastreamento remoto ~ (listados com git branch -r) com o nome do controle remoto.

Você precisa buscar a ramificação remota:

git fetch origin aRemoteBranch

Se você deseja mesclar uma dessas ramificações remotas em sua ramificação local:

git checkout master
git merge origin/aRemoteBranch

Nota 1: para um repositório grande com um longo histórico, você deseja adicionar o--depth=1 opção ao usá-lo git fetch.

Nota 2: esses comandos também funcionam com outros repositórios remotos para que você possa configurar um origine umupstream se estiver trabalhando em um fork.


Cenário oposto: se você deseja mesclar uma filial local em uma filial remota (em oposição a uma filial remota por uma local, como mostrado acima), é necessário criar uma nova filial local sobre a filial remota primeiro:

git checkout -b myBranch origin/aBranch
git merge anotherLocalBranch

A idéia aqui é mesclar "um de seu ramo local" (aqui anotherLocalBranch) para um ramo remoto ( origin/aBranch).
Para isso, você cria primeiro " myBranch" como representando esse ramo remoto: essa é a git checkout -b myBranch origin/aBranchparte.
E então você pode mesclar anotherLocalBrancha ele (a myBranch).

VonC
fonte
aLocalBranch? isso é um erro de digitação? Acho que você pretendia escrever "myBranch" de novo?
knocte
1
@knocte Não: "Se você deseja mesclar uma filial local em uma filial remota": estou mesclando " aLocalBranch" a " myBranch", com " myBranch" representando uma filial remota origin/aBranch.
VonC 19/01/16
Desculpe incomodá-lo @VonC, no seu comentário anterior você diz que aLocalBranchnão é um erro de digitação, mas aprovou a edição mais recente (2 anos depois!) Que corrige esse "erro de digitação provável". Eu queria verificar com você antes de desfazer a edição.
rath
1
@ath Você está correto: parece que eu poderia ter revisado essa edição um pouco às pressas, na fronteira com o descuido. Editei a resposta para esclarecer o segundo caso de mesclagem: você pode me dizer se isso está mais claro agora?
VonC
91

Sempre que faço uma mesclagem, entro na ramificação na qual quero mesclar (por exemplo, " git checkout branch-i-am-working-in") e depois faço o seguinte:

git merge origin/branch-i-want-to-merge-from

Michael Dautermann
fonte
2
Eu acho que você tem que fazer o git fetch origin/branch-i-want-to-merge-fromprimeiro, certo?
Hinrich 28/05
9
git fetch origin developseguido porgit merge origin/develop
Olivier
2
@ Olivier Você está correto, este é o caminho certo para fazê-lo. git merge sozinho não vai fazer isso.
Sam
1
obrigado pela convenção de nomeação inteligente, que me ajudou a entender
tony2tones
1
@Akira Não é git add .-> git commit -m <message>-> git push -u origin <branch>?
Cloud Cho
24

Busque a ramificação remota da origem primeiro.

git fetch origin remote_branch_name

Mesclar a filial remota à filial local

git merge origin/remote_branch_name
Lanil Marasinghe
fonte
1
Isso funcionou para mim quando a resposta aceita relatou Não é algo que possamos mesclar. No meu caso, eu estava mesclando o fork de outro usuário do meu repositório no GitHub.
SJT
O primeiro comando é buscado? 'Git merge origin / remote_branch_name' lê da ramificação remota, não local. Então, eu não deveria me importar, a filial local está atualizada ou não?
Michael Freidgeim
20

Talvez você queira rastrear a filial remota com uma filial local:

  1. Crie uma nova filial local: git branch new-local-branch
  2. Defina esta ramificação recém-criada para rastrear a ramificação remota: git branch --set-upstream-to=origin/remote-branch new-local-branch
  3. Entre neste ramo: git checkout new-local-branch
  4. Puxe todo o conteúdo da filial remota para a filial local: git pull
e18r
fonte
3

Se você já buscou sua ramificação remota e obtém git branch -a,
obtém algo como:

* 8.0
  xxx
  remotes/origin/xxx
  remotes/origin/8.0
  remotes/origin/HEAD -> origin/8.0
  remotes/rep_mirror/8.0

Depois disso, você pode usar rep_mirror/8.0 para designar localmente sua filial remota.

O truque é que remotes/rep_mirror/8.0não funciona, masrep_mirror/8.0 funciona.

Então, um comando como git merge -m "my msg" rep_mirror/8.0 fazer a mesclagem.

(observação: este é um comentário para a resposta do @VonC. Coloquei como outra resposta porque os blocos de código não se encaixam no formato do comentário)

herve-guerin
fonte