web-dev-qa-db-fra.com

Comment configurer Git pour extraire automatiquement de la branche actuelle lors de l'utilisation de "git pull"?

Avec notre configuration actuelle, vous devez toujours entrer le nom de la branche (c'est-à-dire: git pull Origin feature-branch "Lors d'une traction. J'ai déjà fait l'erreur de tirer d'une branche dans une autre, en fusionnant accidentellement deux branches avec deux très différentes J'aimerais éviter cela en configurant Git de sorte que le simple fait de taper git pull tire la branche actuelle dans laquelle vous vous trouvez.

Comment puis-je faire cela?

33
Brandon Durham

Vous pouvez créer une branche de suivi. Depuis le livre Git ( http://git-scm.com/book/en/Git-Branching-Remote-Branches ):

Lorsque vous clonez un référentiel, il crée généralement automatiquement une branche master qui suit Origin/master. C'est pourquoi git Push et git pull fonctionne hors de la boîte sans aucun autre argument. Cependant, vous pouvez configurer d'autres branches de suivi si vous le souhaitez - celles qui ne suivent pas les branches sur Origin et ne suivent pas la branche master. Le cas simple est l'exemple que vous venez de voir, exécutant git checkout -b [branch] [remotename]/[branch]. Si vous avez Git version 1.6.2 ou ultérieure, vous pouvez également utiliser le --track raccourci:

$ git checkout --track Origin/serverfix
Branch serverfix set up to track remote branch refs/remotes/Origin/serverfix.
Switched to a new branch "serverfix"
11

Je suis aussi fan de taper juste git pull et obtenir toute la magie.

Vous avez 2 options:

1)git config --global branch.autoSetupMerge always

Cela garantira que si vous extrayez une branche distante ou en créez une nouvelle; les informations de suivi seront traitées automatiquement par git. Ensuite, vous pourrez

git clone <some_repo>
git checkout -b <new_branch>
git Push
git pull

Notez que pour Push sans plus de mots clés, vous devez également définir l'option Push. Je l'ai réglé sur matching, mais tout le monde a sa préférence là-dessus. (git config --global Push.default matching)

Plus d'informations: autosetupmerge est par défaut true. Lorsqu'il est défini sur true, cela permet à git d'effectuer un suivi lorsque vous extrayez une branche déjà existante sur la télécommande. Par exemple, si vous faites git checkout <branch>, git gérera les informations de suivi afin que vous puissiez faire git pull sur cette branche. Cependant , il n'effectuera pas cela sur les branches que vous créez avec -b option. La définition de autosetupmerge sur always garantit que git gère les informations de suivi à tout moment.

2) Lors de l'extraction d'une nouvelle branche, vous devez configurer spécifiquement la branche pour qu'elle tire depuis Origin (aka tracking)

git checkout -b <branch> --track <remote>/<branch>

Je trouve cela moins utile lorsque les branches sont transitoires. Si vous créez rarement une nouvelle branche, vous devriez y aller. Cependant, si vous êtes comme moi, où seule la branche principale est persistante et que chaque fonctionnalité a sa propre nouvelle branche, alors je trouve l'option 1 plus utile .

Notez que vous n'avez pas besoin de faire de configuration git --global. Vous pouvez simplement écrire --local là-bas, et avoir ce paramètre spécifique à ce référentiel uniquement.

24
batilc

Cela a fonctionné pour moi:

git branch --set-upstream-to=Origin/branch_name branch_name

Après cela, je peux utiliser la syntaxe suivante:

git checkout branch_name
git pull --rebase
git Push
10
Samuel

Si tu as git Push configuré pour figurer automatiquement le nom de la branche distante, vous pouvez alors passer -u et il définira également automatiquement la branche de suivi.

Pour configurer git Push pour utiliser une branche distante du même nom:

git config --global Push.default current`

Explication pour le -u option de git help Push:

-u, --set-upstream
    For every branch that is up to date or successfully pushed, add
    upstream (tracking) reference, used by argument-less git-pull(1) and
    other commands. For more information, see branch.<name>.merge in
    git-config(1).

En supposant que votre branche actuelle est <branch_name>:

$ git Push -u
Branch <branch_name> set up to track remote branch <branch_name> from Origin.
Everything up-to-date
5
ハセン