273 votes

Comment pousser une seule branche Git (et aucune autre branche) ?

Je travaille sur un dépôt git local. Il y a deux branches, master y feature_x .

Je veux pousser feature_x vers le dépôt distant, mais je ne veux pas pousser les changements sur la master branche.

Est-ce qu'un git push origin feature_x de mon feature_x branche ( feature_x branche existe déjà sur le travail à distance) ?

Je ne veux pas tester cela sur ma boîte, parce que je ne peux pas pousser vers le master en ce moment.

0 votes

Jetez un coup d'œil ici : à distance et ici : pousser une branche sur github On dirait que ça pourrait marcher.

408voto

cpjolicoeur Points 5473

Oui, il suffit de faire ce qui suit

git checkout feature_x
git push origin feature_x

60 votes

Avec un git moderne, vous devriez être en mesure de simplement "git push origin HEAD", ou même "git push HEAD" pour pousser uniquement la branche en cours de vérification.

3 votes

Est-il nécessaire de passer à la fonction_x ?

7 votes

Oui, parce que si vous êtes sur master, il essaiera de pousser la branche master locale vers la branche feature_x distante. pour ne pas avoir à vérifier d'abord, vous devriez faire "git push origin feature_x:feature_x".

87voto

Karthik Bose Points 3118

Par défaut git push met à jour toutes les branches distantes. Mais vous pouvez configurer git pour ne mettre à jour que la branche courante vers son amont.

git config push.default upstream

Cela signifie que git ne mettra à jour que la branche courante (vérifiée) lorsque vous faites git push.

D'autres options valables sont :

  • nothing : Ne pas pousser quoi que ce soit (erreur) à moins que une spécification de référence est explicitement donnée . Il s'adresse principalement aux personnes qui veulent éviter les erreurs en étant toujours explicites.
  • matching : Pousser toutes les branches ayant le même nom aux deux extrémités. (option par défaut avant la version 1.7.11)
  • upstream : Pousser la branche courante vers son amont amont. Ce mode n'a de sens que si vous poussez vers le même dépôt que celui d'où vous tireriez normalement (i.e. flux central ). Pas besoin d'avoir le même nom pour la branche locale et la branche distante.
  • tracking : Déprécié, utiliser upstream à la place.
  • current : Pousser la branche actuelle vers la branche distante de la même nom sur l'extrémité de réception. Fonctionne dans les flux de travail centraux et non centraux.
  • simple : [disponible depuis la version 1.7.11] dans un flux de travail centralisé, fonctionne comme suit upstream avec une sécurité supplémentaire pour refuser de pousser si le nom de la branche amont est différent de celui de la branche locale. Lorsque vous poussez vers une branche distante qui est différente de celle dont vous tirez normalement, travaillez comme suit current . C'est l'option la plus sûre et elle est adaptée aux débutants. Ce mode est devenu le mode par défaut dans Git 2.0.

2 votes

Merci, current était ce que je cherchais, par défaut git push dans le foo le poussera vers la branche origin/foo branche.

0 votes

@Dorian merci, je suis d'accord que current est plus logique en tant que valeur par défaut.

0 votes

@Dorian, @Zoltán - Je me sens simple est plus logique en tant que valeur par défaut. J'ai mis à jour la réponse avec "quand utiliser quoi". Jetez-y un coup d'œil.

10voto

Bhaskar Points 93

Mise à jour mineure en plus de La réponse de Karthik Bose - vous pouvez configurer git de manière globale, pour que tous vos espaces de travail se comportent de cette manière :

git config --global push.default upstream

0 votes

Upstream n'a pas été reconnu comme un paramètre valide pour moi, j'ai dû mettre "current" à la place.

1voto

Player1 Points 474

Une meilleure réponse sera

git config push.default current

upsteam fonctionne mais lorsque vous n'avez pas de branche sur origin alors vous devrez définir la branche amont. En le changeant en current mettra automatiquement en place la branche upsteam et poussera la branche immédiatement.

-3voto

Disons que vous avez une branche locale foo, une branche distante appelée origin et une branche distante origin/master.

Pour pousser le contenu de foo vers origin/master, vous devez d'abord définir son amont :

git checkout foo
git branch -u origin/master

Ensuite, vous pouvez pousser vers cette branche en utilisant :

git push origin HEAD:master

Dans la dernière commande, vous pouvez ajouter --force pour remplacer l'historique complet de origin/master par celui de foo.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X