2009-09-27 8 views
3

J'ai un git repo dans GitHub. J'ai principalement utilisé git gui pour le gérer jusqu'à maintenant, mais maintenant je commence à utiliser le shell. Ce que je veux savoir est, comment puis-je chercher toutes les branches dans une télécommande et les fusionner dans les branches respectives sur mon repo local automatiquement? Par exemple, si j'ai branches master et development, et donc origin/master et origin/development, je veux chercher origin/master et fusionner dans master et chercher origin/development et fusionner en development.En fait tirer avec git

Y at-il une commande qui fait cela?

Répondre

1

Pour afficher la liste des branches locales:

$ git branch 
* master 

Pour liste disponible succursales à distance:

$ git branch -r 
* master 
    branch1 
    branch2 

Maintenant, il devient intéressant, Pour suivre un Branch1 à distance :

$ git branch --track branch1 

Cette e Nets un pull pour également mettre à jour la branche localement.

simplement changer à la nouvelle branche avec:

$ git checkout branch1 

En utilisant le paramètre --track, les branches isolées sont ajoutées à .git/config et deviendront persistants. c'est-à-dire que cela doit seulement être fait une fois. Les entrées pertinentes de.git/config affichera comme ceci:

branch.master.remote=origin 
branch.master.merge=refs/heads/master 
branch.branch1.remote=origin 
branch.branch1.merge=refs/heads/branch1 

par branche en cours d'exécution --track commandes pour chacune des branches à distance que vous souhaitez avoir localement fera exactement ce que vous voulez.

4

Il n'y a pas une seule commande qui va chercher et fusionner toutes les branches simultanément. La commande git pull:

exécute git-merge git-fetch avec les paramètres donnés, et appelle pour fusionner la tête récupérée (s) dans la branche de courant.

Donc, cela ne fonctionne que sur la branche actuelle. Cela est nécessaire parce que vous devez être en mesure de gérer les conflits lorsqu'ils surviennent.

0

Si vous connaissez les noms de branche en question, vous pouvez régler cela il arrive sur un

git pull 

en éditant le fichier .git/config.

Voir

man git-pull 

pour plus de détails: (clonés à partir de l'homme git-pull ci-dessous)

o Command line pull of multiple branches from one repository: 

      $ git checkout master 
      $ git fetch origin +pu:pu maint:tmp 
      $ git pull . tmp 

     This updates (or creates, as necessary) branches pu and tmp in the 
     local repository by fetching from the branches (respectively) pu 
     and maint from the remote repository. 

     The pu branch will be updated even if it is does not fast-forward; 
     the others will not be. 
+0

Vous pouvez faire cela pour un 'git push', mais pouvez-vous faire la même chose pour un' git pull'? –

+0

Trier par. Vous pouvez lui indiquer d'aller chercher et mettre à jour toutes les branches de suivi à distance, et tirer la branche actuelle. Les autres branches que vous avez devront être fusionnées manuellement. Notez qu'un retrait sur une branche dérivée d'une branche de suivi à distance fusionnera à partir de la branche de suivi à distance. –

+0

Et la page de manuel prétend que vous pouvez faire la vraie affaire, aussi. J'ai mis à jour le post. –

0

Mettez ce qui suit dans un fichier pull-tout nommé:

#!/bin/bash 
git fetch origin 
git checkout development 
git merge origin/development 
git checkout master 
git merge origin/master 

Ensuite, donnez des autorisations exécutables pull-all et placez-le dans un répertoire sur votre chemin. Habituellement, $ HOME/bin:

chmod +x pull-all 
mv pull-all $HOME/bin 
+0

Cela peut nécessiter une intervention manuelle s'il existe des conflits dans la fusion qui ne peuvent pas être résolus automatiquement. –

+0

Problème avec ceci est que je vais devoir le modifier chaque fois que j'ajoute de nouvelles branches. –

Questions connexes