web-dev-qa-db-fra.com

Comment puis-je transférer facilement une branche Git locale vers une télécommande portant un nom différent?

Je me demandais s'il existait un moyen facile de pousser et de tirer une branche locale avec une branche distante portant un nom différent sans toujours spécifier les deux noms.

Par exemple:

$ git clone myrepo.git
$ git checkout -b newb
$ ...
$ git commit -m "Some change"
$ git Push Origin newb:remote_branch_name

Maintenant, si quelqu'un met à jour remote_branch_name, je peux:

$ git pull

Et tout est fusionné/expédié rapidement. Toutefois, si je modifie mon "newb" local, je ne peux pas:

$ git Push

Au lieu de cela, je dois:

% git Push Origin newb:remote_branch_name

Cela semble un peu idiot. Si git-pull les usages git-config branch.newb.merge pour déterminer d'où tirer, pourquoi ne pourrait pas git-Push avez-vous une option de configuration similaire? Y a-t-il un joli raccourci pour cela ou devrais-je simplement continuer sur le long chemin?

163
jmacdonagh

Sûr. Réglez simplement votre Push.default Sur upstream sur Push branches en amont (ce qui est identique à celui que pull va extraire, défini par branch.newb.merge), Plutôt que pousser les branches sur celles qui correspondent (nom qui est le réglage par défaut pour Push.default, matching).

git config Push.default upstream

Notez que cela s'appelait tracking pas upstream avant Git 1.7.4.2, donc si vous utilisez une version plus ancienne de Git, utilisez plutôt tracking. L'option Push.default A été ajoutée dans Git 1.6.4. Par conséquent, si vous utilisez une version plus ancienne, vous n'aurez pas cette option et vous devrez spécifier explicitement la branche sur laquelle pousser.

88
Brian Campbell

Lorsque vous effectuez l’ajout initial de Push paramètre - :

git Push -u Origin my_branch:remote_branch

Les poussées ultérieures iront où vous le souhaitez.

MODIFIER:

Selon le commentaire, cela ne fait que tirer.

git branch --set-upstream

devrait le faire.

156
Adam Dymitruk

La commande par Adam est maintenant obsolète. Vous pouvez utiliser:

git branch --set-upstream-to Origin/my_remote_branch my_local_branch

définir la branche amont de my_local_branch à Origin/my_remote_branch.

14
jobin

Voici le processus qui a fonctionné pour moi.

git clone original-repo-url
git remote rename Origin upstream
git remote add Origin new-repo-url

Maintenant, votre nouveau référentiel sera "Origine" et le référentiel original est "en amont". Confirmez-le en exécutant git remote -v. (Remarque: Upstream est utilisé pour extraire du repo d'origine - afin de garder votre copie locale synchronisée avec le projet auquel vous souhaitez contribuer - et Origin est utilisé pour tirer et pousser puisque vous pouvez contribuer à votre propre repo).

git Push Origin master

Désormais, le nouveau maître de votre référentiel distant (sur Github) sera synchronisé avec le maître d'origine, mais il ne comportera aucune branche.

git rebase upstream/branch-name
git Push Origin master

Rebase est une fusion intelligente. Appuyez à nouveau sur Maîtriser et vous verrez la branche de fonctionnalité sélectionnée en tant que maître sur le nouveau référentiel.

Optionnel:

git remote rm upstream
git remote add upstream new-repo-url
0
urubuz