Je voudrais git push origin
définir automatiquement la référence en amont lorsque je pousse une branche créée localement pour la première fois.
Je sais git push -u
, mais je ne veux pas avoir à me demander si j'ai déjà utilisé -u
ou défini une référence en amont. En d'autres termes, je veuxgit push
avoir automatiquement l'effet de git push -u
sur toute poussée d'une branche qui n'a pas déjà d'amont.
Est-ce possible? Si cela nécessite un alias ou un script utilitaire, c'est très bien.
push.default
etbranch.<name>.merge
dans git-config (1) ?push.default
mis àcurrent
- c'est ainsi que je peux simplement diregit push origin
sans refspec ou en amont. Mais cela n'aide pas à configurer automatiquement l'amont.Réponses:
Vous pouvez le configurer à l'
git config
aide degit config --global push.default current
.Docs: https://git-scm.com/docs/git-config/#Documentation/git-config.txt-pushdefault
la source
git push origin
sans refspec ou en amont. Mais cela n'aide pas à configurer automatiquement l'amont.push
, par exemple, un seul développeur est sur sa branche, qui ne modifie qu'une seule copie d'un dépôt.Puisque je ne pense pas que cela soit possible en utilisant git config, voici ce que vous pouvez faire dans bash:
Si la branche actuelle a une branche de suivi à distance, elle appelle
git push
sinon elle appellegit push -u
la source
git config --global push.default current
.push.default=current
crée uniquement une branche dans le référentiel distant avec le même nom que la branche locale, mais ne définit pas la branche locale pour suivre la branche distante. Je ne sais pas pourquoi c'est le cas, mais cela vaut la peine de garder à l'esprit.Remarque: le fait que la nouvelle politique push par défaut "
simple
" repose sur une branche ayant une branche en amont signifie que: lacréation d'une branche en amont est considérée comme une étape volontaire, pas une étape automatisée cachée
Donc , construire de mechanicalfish de réponse , vous pouvez définir un alias, avec les bons guillemets doubles (
"
) échappé (\"
):Sc0ttyD propose dans les commentaires l'alias suivant:
En plusieurs lignes:
la source
-u
option explicite existe, et pourquoi il n'y a pas de configuration pour rendre cette option automatique (d'où l'alias).alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push'
J'ai eu le même problème. J'ai trouvé cet alias (.gitconfig)
[alias] track = "!git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`"
Utilisation:
git track
une fois par nouvelle branche (actuellement extraite). Ensuite, poussez simplement comme d'habitude :)la source
Les réponses de @VonC et @Frexuz sont utiles, mais leurs deux solutions génèrent une erreur pour moi. En utilisant leurs deux réponses, j'ai concocté quelque chose qui fonctionne pour moi:
Cela se traduit par l'exécution de
git push -u origin $BRANCHNAME
ougit push
, selon que sa propriété amont (branch.$BRANCHNAME.merge
) est défini.La saisie de cet alias sur la ligne de commande nécessitera des codes d'échappement, il est donc probablement plus simple d'utiliser un éditeur pour l'insérer dans le bon fichier (
$HOME/.gitconfig
(global),.git/config
(local) ou/etc/gitconfig
(system))la source
git config --global -e
Réponse courte
Si vous aimez être explicite et utiliser l'
-u
option si nécessaire, mais que vous ne voulez simplement pas taper le tout:Ensuite, vous pouvez utiliser l'alias suivant:
Et tapez simplement:
Longue réponse
En règle générale, le besoin de
-u
(raccourci pour--set-upstream
) est lorsque nous venons de créer une nouvelle branche locale et de commettre, et que nous voulons la pousser en amont. Le dépôt distant n'a pas encore la nouvelle branche, nous devons donc dire à git de créer et de suivre la branche distante avant de pousser le commit. Ceci n'est nécessaire que pour la première poussée sur la branche. Voici un scénario typique:Personnellement, j'aime la nécessité d'être explicite
git push -u
lors de la création de la branche distante: c'est une opération assez importante, partager une toute nouvelle branche avec le monde.Cependant, je déteste que nous devions écrire explicitement
git push -u origin foo
. Non seulement c'est pénible à taper, mais surtout, c'est assez sujet aux erreurs! Il est facile de se tromper en tapant le nom de la branche, et la nouvelle branche distante n'aura pas le même nom que votre branche locale! Dans la plupart des cas, vous voulez vraiment que le référentiel en amont soitorigin
et que la branche en amont ait le même nom que votre branche locale.Par conséquent, j'utilise l'alias suivant dans my
.gitconfig
, qui est un sous-ensemble de l'excellente réponse fournie par Mark :Maintenant, nous pouvons faire ce qui suit, qui est toujours explicite, mais moins sujet aux erreurs:
la source
J'ai résolu ce problème en utilisant ce simple script Bash. Cela ne fonctionnera pas sur les branches existantes, mais si vous créez toutes vos branches avec cette fonction, votre branche amont sera toujours définie automatiquement.
Le $ 1 représente le premier argument que vous passez après
con
donc c'est comme faire:... en faisant simplement ceci:
la source
Simplement:
la source
git push -u
, mais ...". Cela ne répond donc pas à la question.J'ai créé une extension git avec des scripts utiles, dont celui-ci:
https://github.com/jvenezia/git-line
la source
Si vous souhaitez utiliser les fonctionnalités git intégrées uniquement avec le moins de clés possibles, tapez simplement:
$ git push -u o
tabH
tabet la saisie semi-automatique vous donnera
$ git push -u origin HEAD
Pour activer la saisie semi-automatique sur OSX, configurez un
~/.git-completition.bash
fichier avec ce contenu et ajoutez les lignes suivantes à votre~/.bash_profile
fichier et redémarrez votre terminal:Cela affecte également les terminaux intégrés, comme celui de vscode, etc.
la source
git-completition.bash
et ajouté à ma réponse.