Git: fusionner une branche distante localement

204

J'ai tiré toutes les branches distantes via git fetch --all. Je peux voir la branche avec laquelle je voudrais fusionner en git branch -atant que télécommandes / origine / nom de branche. Le problème n'est pas accessible. Je ne peux pas fusionner ou commander?

micahblu
la source

Réponses:

321

Vous pouvez référencer ces branches de suivi à distance ~ (répertoriées avec git branch -r) avec le nom de leur télécommande.

Vous devez récupérer la branche distante:

git fetch origin aRemoteBranch

Si vous souhaitez fusionner l'une de ces branches distantes sur votre branche locale:

git checkout master
git merge origin/aRemoteBranch

Remarque 1: pour un grand référentiel avec une longue histoire, vous souhaiterez ajouter l' --depth=1option lorsque vous utilisez git fetch.

Remarque 2: Ces commandes fonctionnent également avec d'autres dépôts distants afin que vous puissiez configurer un originet un upstreamsi vous travaillez sur un fork.


Scénario opposé: Si vous souhaitez fusionner une de vos succursales locales sur une branche distante (par opposition à une branche distante à une locale, comme indiqué ci-dessus), vous devez d'abord créer une nouvelle branche locale au-dessus de ladite branche distante:

git checkout -b myBranch origin/aBranch
git merge anotherLocalBranch

L'idée ici, est de fusionner "une de vos succursales locales" (ici anotherLocalBranch) à une succursale distante ( origin/aBranch).
Pour cela, vous créez d'abord " myBranch" comme représentant cette branche distante: c'est la git checkout -b myBranch origin/aBranchpartie.
Et puis vous pouvez fusionner anotherLocalBranchà elle (à myBranch).

VonC
la source
aLocalBranch? est-ce une faute de frappe? Je suppose que vous vouliez réécrire "myBranch"?
knocte
1
@knocte No: "Si vous souhaitez fusionner une de vos succursales locales sur l'une de ces succursales distantes": je fusionne " aLocalBranch" en " myBranch", " myBranch" représentant une succursale distante origin/aBranch.
VonC
Désolé de vous déranger @VonC, dans votre commentaire précédent, vous dites que ce aLocalBranchn'est pas une faute de frappe, mais vous avez approuvé la dernière modification (2 ans plus tard!) Qui corrige cette "faute de frappe probable". Je voulais vérifier avec vous avant d'annuler la modification.
Rath
1
@rath Vous avez raison: il semble que j'aurais peut-être revu cette édition un peu à la hâte, à la limite de la négligence. J'ai modifié la réponse pour clarifier le deuxième cas de fusion: pouvez-vous me dire si cela est plus clair maintenant?
VonC
91

Chaque fois que je fais une fusion, j'entre dans la branche dans laquelle je veux fusionner (par exemple " git checkout branch-i-am-working-in"), puis je fais ce qui suit:

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

Michael Dautermann
la source
2
Je suppose que vous devez faire une git fetch origin/branch-i-want-to-merge-frompremière, non?
Hinrich
9
git fetch origin developsuivi degit merge origin/develop
Olivier
2
@Olivier Vous avez raison, c'est la bonne façon de procéder. git merge seul ne le fera pas.
Sam
1
merci pour la convention de nommage intelligente qui m'a aidé à comprendre
tony2tones
1
@Akira N'est-ce pas git add .-> git commit -m <message>-> git push -u origin <branch>?
Cloud Cho
24

Récupérez d'abord la branche distante à partir de l'origine.

git fetch origin remote_branch_name

Fusionner la branche distante à la branche locale

git merge origin/remote_branch_name
Lanil Marasinghe
la source
1
Cela a fonctionné pour moi lorsque la réponse acceptée a signalé Pas quelque chose que nous pouvons fusionner. Dans mon cas, je fusionnais à partir d'un fork d'un autre utilisateur de mon dépôt sur GitHub.
SJT
La première commande est-elle récupérée? Est-ce que 'git merge origin / remote_branch_name' lit à partir de la branche distante, pas local. Donc, je ne devrais pas m'en soucier, la succursale locale est-elle mise à jour ou non?
Michael Freidgeim
20

Vous souhaitez peut-être suivre la branche distante avec une branche locale:

  1. Créez une nouvelle succursale locale: git branch new-local-branch
  2. Définissez cette branche nouvellement créée pour suivre la branche distante: git branch --set-upstream-to=origin/remote-branch new-local-branch
  3. Entrez dans cette branche: git checkout new-local-branch
  4. Tirez tout le contenu de la branche distante dans la branche locale: git pull
e18r
la source
3

Si vous avez déjà récupéré votre branche distante et que vous le faites git branch -a,
vous obtenez quelque chose comme:

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

Après cela, vous pouvez utiliser rep_mirror/8.0pour désigner localement votre branche distante.

L'astuce est que remotes/rep_mirror/8.0cela ne fonctionne pas mais rep_mirror/8.0fonctionne.

Donc, une commande comme git merge -m "my msg" rep_mirror/8.0faire la fusion.

(note: ceci est un commentaire à la réponse @VonC. Je l'ai mis comme une autre réponse parce que les blocs de code ne rentrent pas dans le format de commentaire)

herve-guerin
la source