D'après ce dont je me souviens, si je travaille sur une branche, par exemple, my-feature-branch
je pouvais le faire à partir du magit-status
menu avec P P
, puis en sélectionnant la branche distante dans une liste qui avait origin/my-feature-branch
en haut. Cela a fonctionné à merveille.
Récemment, à partir de cette discussion , je pouvais faire quelque chose de similaire avec P -u e
(ouvrir le magit-push-popup
, définir le --set-upstream
drapeau et utiliser e
pour ailleurs), ce qui me permettrait également de choisir parmi une liste de branches commençant par origin/my-feature-branch
. Cela a bien fonctionné pour moi aussi. Encore plus récemment cependant, cela ne fonctionne plus, et je n'ai pas été en mesure de trouver la meilleure façon de définir une branche en amont.
Lorsque j'utilise P e
la première option pour une branche vers laquelle pousser origin/my-feature-branch
, c'est presque toujours ce que je veux. Cependant, il n'est pas défini origin/my-feature-branch
comme amont pour ma branche locale. L'utilisation P u
me permet de choisir la branche en amont, mais origin/my-feature-branch
n'est pas dans la liste, et je dois taper origin/my-feature-branch
sans complétion de tabulation (je sais que ce n'est pas difficile, mais il est sujet à des erreurs utilisateur et est plus lent que la ligne de commande).
Est-ce la seule façon de définir une branche en amont maintenant, ou est-ce que je manque quelque chose? J'ai examiné d'autres discussions et documents liés au problème, mais toutes les sources que j'ai trouvées semblent obsolètes.
<remote>/<branch>
partie a été accidentellement laissée de côté (voir ce commentaire ). En attendant, vous pouvez réglermagit-push-current-set-remote-if-missing
sur zéro.Réponses:
Il existe plusieurs façons de régler l'amont, en poussant ou sans pousser en même temps.
Si
magit-push-current-set-remote-if-missing
est nonnil
(par défaut), alors vous verrez quelque chose comme:Pour pousser
origin/feature
et définir cela comme amont, appuyez sur upuis sur RETpour accepter le candidat d'achèvement par défaut.Si
magit-push-current-set-remote-if-missing
c'est le casnil
, vous le verriez plutôt:Si vous avez appuyé pmaintenant, on vous dira que l'amont n'est pas configuré (ce qui implique que vous ne pouvez pas pousser vers l'amont s'il n'y a pas d'amont).
Mais si
magit-push-current-set-remote-if-missing
c'est le casnil
, la liste des commutateurs apparaîtra--set-upstream
, vous pouvez donc l'utiliser P - u pcomme vous en avez l'habitude (sauf que le deuxième p est en minuscules). Il y a cependant une complication: après avoir changé la valeur demagit-push-current-set-remote-if-missing
vous devez redémarrer Emacs pour--set-upstream
apparaître ou disparaître.Enfin , vous pouvez régler l'amont à l' aide du « amont ensemble (et ne rien faire d' autre) » commande: b u
origin/master
RET. Notez que lorsque vous utilisez cette approche, vous ne pouvez sélectionner qu'une branche qui existe déjà.Mais il serait préférable de configurer le push-remote et de pousser à cela. Pour en savoir plus sur le push-remote et en quoi il diffère de l'amont, consultez le nœud Branching dans le manuel d'informations (la version Web n'a pas encore été mise à jour).
Fondamentalement, la branche en amont est la branche dans laquelle votre branche de fonctionnalité sera finalement fusionnée (en fusionnant ou en rebasant, pas en poussant), très probablement
origin/master
. Et la télécommande distante est l'endroit où vous poussez vos branches de fonctionnalités tout en continuant à travailler dessus ou pour que quelqu'un d'autre puisse les fusionner. Si la branche locale est nomméefeature
et la push-remote l'estmy-fork
, alors pousser cette branche en utilisant P pserait pousser versmy-fork/feature
. (Le "push-to-branch" ne peut pas être configuré, le nom de la branche sur la push-remote est toujours le même que le nom local.)Donc, alors que votre question était quelque chose comme "comment puis-je pousser vers l'amont, tout en configurant l'amont en même temps", ma recommandation est de ne pas pousser du tout vers l'amont, mais plutôt de pousser vers la télécommande distante.
Pourvu que vous n'ayez pas changé la valeur de
magit-push-current-set-remote-if-missing
vous pouvez configurer le push-remote en utilisant P psome-remote
RET. Mais, comme vous poussez probablement toutes les branches de fonctionnalités sur la même télécommande, il est préférable de définir la push-remote une fois pour toutes les branches et d'en finir: bpuis M-pjusqu'à ce que la bonne télécommande soit sélectionnée.Notez également qu'il ne devrait généralement pas être nécessaire de définir explicitement la branche amont. Lorsque vous créez une nouvelle branche et sélectionnez une branche distante comme point de départ, celle-ci est utilisée comme amont.
Malheureusement, le point de départ est généralement une branche locale et dans ce cas, Git par défaut ne l'utilise pas en amont. Mais cela peut facilement être résolu en exécutant ceci une fois:
La valeur par défaut est
true
, ce qui signifie "définir le point de départ en amont, à condition qu'il s'agisse d'une branche distante ".Soit dit en passant, la même chose s'applique à la télécommande push. Cela aussi devrait généralement être défini semi-automatiquement dans les "nouveaux" référentiels. Si vous clonez un référentiel, il vous sera demandé si vous souhaitez l'utiliser
origin
comme push-remote. Vous devez répondre «oui», sauf si vous allez ajouter une autre télécommande, par exemplemy-fork
, qui devrait être utilisée comme télécommande. Lorsque vous ajoutez une nouvelle télécommande à l'aide de M aetremote.pushDefault
n'est pas encore définie, il vous sera alors demandé si vous souhaitez utiliser la télécommande nouvellement ajoutée comme télécommande push.Cela peut être configuré à l'aide de
magit-clone-set-remote.pushDefault
etmagit-remote-add-set-remote.pushDefault
.Une autre option avancée est
magit-branch-prefer-remote-upstream
, par défautnil
. Si vous le définissez surt
, puis sélectionnez une branche locale comme point de départ pour une nouvelle branche, alors l'amont du point de départ pourrait (selon certaines règles, voir doc-string) être utilisé comme amont, au lieu de le point de départ lui-même.la source