Habituellement, je crée une branche comme celle-ci:

git checkout branch
git checkout -b new_branch

Cela fonctionne bien car il ne définit pas automatiquement une branche en amont, il me montre donc l'avertissement à pousser pour configurer l'amont. J'ai l'habitude de le copier-coller et ensuite il suit correctement une branche distante ...

Cela dit, c'est assez encombrant ...

J'ai donc commencé à utiliser une nouvelle méthode pour réduire le nombre d'étapes:

git checkout -b new_branch from_branch

Malheureusement, cela me donne cette sortie:

git checkout -b xxx origin/staging
Branch xxx set up to track remote branch staging from origin.
...

Alors quand j'essaye de pousser, ça me donne cette erreur:

fatal: The upstream branch of your current branch does not match

Evidemment, l'amont n'est pas celui que je voulais ... Je préfère qu'il ajoute automatiquement origin / xxx ou pas d'amont du tout.

Je vois qu'il y a une option "--no-track"; y a-t-il un moyen d'en faire la valeur par défaut? Je n'ai pas réussi à utiliser l'option de piste.

9
Loïc Faure-Lacroix 27 janv. 2017 à 17:55

3 réponses

cela fonctionne bien car il ne définit pas automatiquement une branche en amont

Vous avez raison et tort en même temps. Comment est-ce possible?
Eh bien, cela dépend de votre version de git.
La version 1.X de Git fonctionnera d'une manière différente de celle de git v2.X.

Vous dépendez en amont de la version de git que vous avez utilisée pour créer votre branche. Si vous avez utilisé 1.X et créé une branche, puis mis à jour votre version de git et créé une nouvelle branche, les deux se comporteront différemment.

Vous pouvez toujours modifier manuellement le fichier .git/config pour voir vos branches de suivi. git remote -v les imprimera sur votre écran.

git release notes 2.0

https://git.kernel.org/cgit/git/git.git/tree/Documentation/RelNotes/2.0.0.txt

Lorsque git push [$there] ne dit pas quoi pousser, nous avons utilisé le la sémantique traditionnelle matching jusqu'à présent (toutes vos branches ont été envoyées à la télécommande tant qu'il y a déjà des branches du même nom là-bas) .

Dans Git 2.0, la sémantique par défaut est désormais la simple ,


Que pouvez-vous faire à la place?

Comme vous l'avez découvert, l'option --no-track créera une branche sans amont.

Une autre option :

Vous pouvez créer une branche orpheline (branche sans historique) et ensuite utiliser cherry-pick pour y ajouter tout l'historique souhaité.

git checkout --orphan <new_branch> [<sha-1>]

Maintenant, vous allez vider l'historique et vous pouvez y ajouter n'importe quel commit que vous souhaitez.

-1
CodeWizard 27 janv. 2017 à 15:27

Comme vous l'avez noté, la commande git checkout prend en charge les mêmes options --track / --no-track que git branch, donc pour faire pointer la nouvelle branche zorblatt vers le même valider comme origin/master, mais pas origin/master comme son (faux) amont:

git checkout -b zorblatt --no-track origin/master

Malheureusement, il n'y a aucun moyen de le faire par défaut. (Curieusement, il existe un bouton de configuration pour git-gui, gui.matchTrackingBranch.)

(A part: l'ancien verbe, piste, genre de craint: "branche X suit la branche Y / Z de suivi à distance" et bientôt les mots "branche" et "piste" ne semblent plus signifier rien . "Avoir en amont" est maladroit, mais au moins ne vient pas du Département du Département des Redondances.)

6
torek 27 janv. 2017 à 20:10

Le drapeau --no-track sera votre ami ici. Cela atteindra votre objectif ultime de ne pas suivre une branche distante lorsque vous créez une nouvelle branche en utilisant la commande checkout au lieu de la commande branch.

Cependant, cela ne vous permet d'économiser que trois frappes, il reste donc beaucoup à taper. Vous pouvez encapsuler cela dans un alias git pour simplifier les choses, voici celui que j'utilise pour cette tâche:

git config --global alias.nb '!bash -c "git checkout -b $1 --no-track ${2-origin/master}" -'

Cela accepte 2 paramètres et appelle à bash pour terminer l'action. Nous utilisons la branche par fonctionnalité et démarrons (presque) toujours de nouvelles branches à partir de master, j'ai donc rendu le deuxième paramètre facultatif et utilisé origin / master par défaut.

Pour utiliser HEAD par défaut, remplacez simplement ${2-origin/master} par $2 ou remplacez le nom de votre propre branche par le flux de travail de votre équipe.

Usage:

git nb <branch-name> [<source-commit>]
0
LightBender 29 août 2017 à 14:51