Changer de branche en amont avec Magit

47

Lorsque vous poussez une branche avec Magit (avec P P) et que la branche n'a pas d'amont, Magit vous demande le nom de la branche sur laquelle vous souhaitez pousser. C'est génial.

Une fois que vous avez défini l’amont pour une branche, Magit ne vous demande plus où vous voulez le pousser. C'est généralement pratique (on ne veut pas qu'on vous le demande à chaque fois), mais cela rend difficile le transfert d'une branche vers une autre branche distante.

Existe-t-il un moyen de demander à Magit de me demander à nouveau quelle est la branche de destination, même si la branche actuelle en a déjà une en amont?


Cas d'utilisation

Il est assez courant que j'ai une branche comme celle-ci:

Local:    issue-30 ~/Git-Projects/repo/
Remote:   issue-30 @ origin ([email protected]:.../repo.git)
Head:     ebe4054 Some commit message

et je veux changer les branches locales et distantes à issue-30-and-34. Si je viens de renommer la branche locale, je reste avec ceci:

Local:    issue-30-and-34 ~/Git-Projects/repo/
Remote:   issue-30 @ origin ([email protected]:.../repo.git)
Head:     ebe4054 Some commit message

Même si je supprime origin/issue-30, faire P Ple issue-30-and-34 sera simplement recréer le origin/issue-30.

Ce que je finis par faire est le suivant, mais on se sent plutôt détourné pour quelque chose qui peut être fait en une seule gitcommande:

  1. Créer une nouvelle branche appelée issue-30-and-34 (au lieu de renommer l'ancienne),
  2. supprimer les versions locale et distante de issue-30,
  3. push issue-30-and-34(puisqu'il n'a pas encore d'amont, Magit me demandera où pousser).
Malabarba
la source
Veuillez envisager d’accepter la réponse de @tarsius au lieu de la mienne (pour faciliter la recherche d’ informations pertinentes ).
Constantine le
@ Constantine fait.
Malabarba

Réponses:

61

En commençant par, v2.1vous pouvez changer l’amont de la branche actuelle en une branche distante ou locale à l’aide de bu[REMOTE/]BRANCHRET. À partir de v2.4, si un amont est déjà défini, il busera simplement désinstallé. Appuyez à unouveau pour définir une nouvelle valeur.

En commençant par v2.4et si l'amont n'est pas défini, vous pouvez également l'installer en poussant à l'aide de pu[REMOTE/]BRANCHRET. On vous demandera automatiquement quelle branche utiliser en amont. Une fois l'amont défini, vous puy pousserez sans que vous ne puissiez modifier l'amont. Donc, pour changer en amont, vous devez utiliser l'approche décrite dans le paragraphe précédent.

Auparavant, v2.4il était également possible de définir la branche distante que vous souhaitez utiliser comme branche amont p-ueREMOTE/BRANCHRET. Mais maintenant, le --set-upstreamcommutateur n'est plus disponible dans le menu contextuel push par défaut . Vous pouvez le récupérer en réglant magit-push-current-set-remote-if-missingsur nil. Cela a deux effets: le --set-upstreamcommutateur sera à nouveau disponible après le prochain redémarrage et l'approche décrite dans le paragraphe précédent ne fonctionnera plus.


Si vous souhaitez que les deux fonctionnalités décrites dans les deuxième et troisième paragraphes soient disponibles en même temps, laissez magit-push-current-set-remote-if-missinginchangées et ajoutez ceci à votre fichier init:

(magit-define-popup-switch 'magit-push-popup
  ?u "Set upstream" "--set-upstream")
tarse
la source
11

Appuyez sur " P C-u C-u P" pour que Magit vous demande quelle branche distante et distante utiliser avant d’appuyer.

(Avec un seul argument de préfixe (" P C-u P"), Magit demande quelle télécommande utiliser.)

J'ai trouvé cela en pressant P C-h k Pdans un tampon d'état Magit, en lisant les documents de magit-pushet magit-push-dwim(ces documents semblent être obsolètes, BTW), et en expérimentant.

PS: J'utilise Magit magit-1.2.0-2049-ge6839e8.

Constantine
la source
5
Cette réponse est un peu dépassée.
Szymon Wygnański
1

Il semble que cela se trouve maintenant dans la section branch / configure:

b C p définir la pushRemote

William Casarin
la source
Une idée de comment spécifier une télécommande en plus de la valeur par défaut?
Scry
0

En novembre 2016 et au plus tard magit, voici une solution partielle:

P e- vous permet de pousser elsewhere, mais on ne s'en souvient pas

Je ne pouvais pas trouver un moyen pour magit de le faire --set-upstream, donc je l'ai juste fait depuis le terminal, une sorte de triche mais ça m'a permis de résoudre ce problème:

git push --set-upstream origin <branch-name>

Et maintenant, le nouveau amont est enregistré, et je peux construire ma prochaine chose :)

Josh.F
la source
1
"Je ne trouve pas de moyen [...] de --set-upstream" - Peut-être devriez-vous essayer de lire la réponse de
tarsius
Bien sûr, c'est ce qui m'a aidé à comprendre cela. Juste, magita un peu changé depuis et j'espère que ma solution permettra à quelqu'un de gagner quelques minutes supplémentaires
Josh.F
1
Le premier paragraphe de cette réponse explique comment changer l’amont, et cela fonctionne dans le dernier magit.
npostavs