Comment copier une branche Git locale dans un dépôt distant

127

Jusqu'à présent, j'ai suivi les étapes suivantes:

  1. Cloné un dépôt Git distant
  2. Ramifié la branche principale à un expérimental
  3. code édité / testé / engagé dans la branche expérimentale

Maintenant, je ne suis pas prêt à fusionner expérimental dans master. Je veux cependant le repousser vers le référentiel distant car c'est le référentiel que je partage avec quelques collègues. J'aimerais qu'ils voient ce que j'ai fait dans la branche expérimentale. En règle générale, j'accède simplement au repo distant via SSH.

Comment partager ma branche locale sur le référentiel distant, sans affecter la branche principale du référentiel distant?

Coocoo4Cocoa
la source
Ce lien est également très utile dans cet aspect. Partage de branches git
Vishnu Kumar

Réponses:

157

Selon la page de manuel de git push :

 git push origin experimental

Trouvez une référence qui correspond experimentaldans le référentiel source (très probablement, elle trouverait refs/heads/experimental), et mettez à jour la même référence (par exemple refs/heads/experimental) dans le référentiel d'origine avec elle.
S'il experimentaln'existait pas à distance, il serait créé .

C'est la même chose que:

git push origin experimental:refs/heads/experimental

Créez la branche experimentaldans le référentiel d'origine en copiant la experimentalbranche actuelle .
Ce formulaire n'est nécessaire que pour créer une nouvelle branche ou une nouvelle balise dans le référentiel distant lorsque le nom local et le nom distant sont différents ; sinon, le nom de la référence fonctionnera seul.

Ou, comme mentionné dans git tip , vous pouvez configurer une "Branch's Default Remote":

Vous pouvez utiliser git config pour attribuer une télécommande par défaut à une branche donnée. Cette télécommande par défaut sera utilisée pour pousser cette branche sauf indication contraire.

Ceci est déjà fait pour vous lorsque vous utilisez git clone, ce qui vous permet d'utiliser git push sans aucun argument pour pousser la branche master locale pour mettre à jour la branche master du référentiel d'origine.

git config branch.<name>.remote <remote> 

peut être utilisé pour le spécifier manuellement.


Jan suggère (pour git> = 1.7.0 ) l' option push -u(ou push --set-upstream):

Pour chaque branche qui est à jour ou envoyée avec succès, ajoutez une référence en amont (suivi), utilisée par git-pull (1) sans argument et d'autres commandes.

De cette façon, vous n'avez pas à faire de configuration git.

git push -u origin experimental
VonC
la source
12
Vous devez utiliser l' -uoption pour pushpour vous assurer que votre branche locale suit la branche distante après l'avoir rendue publique. Si vous oubliez d'utiliser l' -uoption, vous pouvez simplement taper git push -uensuite dans la branche, git pullcela fonctionnera.
Jan
J'ai remarqué que lorsque vous faites cela git push origin experimental, il n'y a aucune preuve de téléchargement de packs. Il semble que la télécommande possède déjà tout le matériel de votre poussée précédente; il doit juste être accroché aux refs .
Kaz
@Kaz: il aurait tout le matériel si ces nouveaux commits étaient déjà poussés dans une autre branche à distance. Dans ce cas, git push origin experimentalcréerait simplement la branche experimentalsur la télécommande.
VonC
Je vous remercie! Votre réponse a été très utile.
hakre
15

Si le nom de votre succursale est experimental, et le nom de la télécommande est origin, alors c'est

git push origin experimental
John Douthat
la source
Même commentaire que ci-dessus, mais cela crée-t-il la branche expérimentale implicitement sur le dépôt distant, ou va-t-il pousser vers le maître distant?
Coocoo4Cocoa
1
il pousse la branche expérimentale et ne touche pas le maître ni du côté local ni à distance
John Douthat
1

git push -u <remote-name> <branch-name>ne fonctionne pas si la branche nouvellement créée n'est pas générée à partir du même dépôt, c'est-à-dire que si vous n'avez pas créé la nouvelle branche avec git checkout -b new_branch, alors cela ne fonctionnera pas.

Par exemple, j'avais cloné deux référentiels différents localement et j'ai dû copier repo2 / branch1 dans repo1 / puis le pousser aussi.

Ce lien m'a aidé à pousser ma branche locale (clonée à partir d'un autre dépôt) vers mon dépôt distant:

pied cassé
la source
0

Voici la page github faisant autorité pour la gestion à distance de github http://github.com/guides/push-a-branch-to-github . Cela vous aidera à répondre à toutes vos questions.

dylanfm
la source
Cela ne le déplace-t-il pas vers la branche principale ou créera-t-il implicitement une origine / same_branch_name_as_local?
Coocoo4Cocoa
0

tl; dr

$ git push --set-upstream origin your_new_branch

Plus d'informations

après avoir effectué quelques commits dans votre:

$ git checkout -b your_new_branch
$ git add file
$ git commit -m "changed file"

vous poussez votre branche en spécifiant un amont dans l'un des référentiels distants comme suit:

$ git push --set-upstream REMOTE YOUR_BRANCH

les télécommandes peuvent être vues par

$ git remote -v

généralement, vous aurez une seule télécommande par défaut origin. ainsi votre commande ressemblerait à:

$ git push --set-upstream origin your_new_branch

et toutes les poussées conséquentes peuvent être faites juste avec git push.

Ivan Prisyazhnyy
la source