Je crée une nouvelle branche dans Git:
git branch my_branch
Poussez-le:
git push origin my_branch
Maintenant, disons que quelqu'un a fait des changements sur le serveur et que je veux origin/my_branch
. Je fais:
git pull
Mais je reçois:
You asked me to pull without telling me which branch you
want to merge with, and 'branch.my_branch.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.
If you often merge with the same branch, you may want to
use something like the following in your configuration file:
[branch "my_branch"]
remote = <nickname>
merge = <remote-ref>
[remote "<nickname>"]
url = <url>
fetch = <refspec>
See git-config(1) for details.
J'ai appris que je peux le faire fonctionner avec:
git branch --set-upstream my_branch origin/my_branch
Mais pourquoi dois-je le faire pour chaque branche que je crée? Est - il pas évident que si je pousse my_branch
dans origin/my_branch
, je voudrais tirer origin/my_branch
en my_branch
? Comment puis-je en faire le comportement par défaut?
git
git-branch
Ram Rachum
la source
la source
branch.autosetupmerge
signifie que la configuration en amont d'une nouvelle branche n'est définie automatiquement que lors de la création d'une branche à partir d'une branche de suivi à distance (par exemple<remote-name>/<branch-name>
) (voir git-config (1) ). Vous créez probablement vos succursales à partir de succursales locales existantes. Si vous vous branchez directement à partir de la pointe d'une branche distante (bien que vous soyez sur une branche locale), vous pouvez utilisergit branch my_branch <remote-name>/<branch-name>
pour configurer automatiquement la configuration en amont.--set-upstream
option est déconseillée. Vous devez utiliser--track
ou à la--set-upstream-to
place.--set-upstream
est obsolète, alors les développeurs de git devraient le supprimer du message d'aide qui s'affiche lorsque vous exécutezgit push
sans aucune option et qu'aucun paramètre en amont n'est défini?git branch --set-upstream
est obsolète.git push --set-upstream
n'est pas.Réponses:
Un raccourci, qui ne dépend pas de la mémorisation de la syntaxe pour
git branch --set-upstream
1, consiste à:... la première fois que vous poussez cette branche. Ou, pour passer à la branche actuelle vers une branche du même nom (pratique pour un alias):
Vous n'avez besoin de l'utiliser
-u
qu'une seule fois, et cela établit l'association entre votre branche et celleorigin
de la même manièregit branch --set-upstream
.Personnellement, je pense que c'est une bonne chose d'avoir à établir explicitement cette association entre votre branche et une sur la télécommande. C'est juste dommage que les règles soient différentes pour
git push
etgit pull
.1 Cela peut sembler idiot, mais j'oublie très souvent de spécifier la branche actuelle, en supposant que c'est la valeur par défaut - ce n'est pas le cas, et les résultats sont les plus déroutants :)
Mise à jour 2012-10-11 : Apparemment, je ne suis pas la seule personne à avoir trouvé qu'il était facile de se tromper! Merci à VonC d' avoir souligné que git 1.8.0 introduit le plus évident
git branch --set-upstream-to
, qui peut être utilisé comme suit, si vous êtes sur la branchemy_branch
:... ou avec l'option courte:
Cette modification et son raisonnement sont décrits dans les notes de publication de git 1.8.0, version candidate 1 :
la source
-u
première fois que vous appuyez, vous pouvez exécuter à nouveau la poussée avec ce drapeau et le suivi commencera.alias gpo="git push --set-upstream origin $(git branch | awk '/^\* / { print $2 }')"
Vous pouvez y arriver avec moins de frappe. Tout d'abord, changez le fonctionnement de votre push:
Cela déduira la
origin my_branch
pièce, vous pouvez donc faire:Ce qui créera à la fois la branche distante avec le même nom et la suivra.
la source
origin
lors de l'exécutiongit push -u
d'une branche nouvellement créée dans un référentiel nouvellement créé? L'hypothèse est-elle que le référentiel a été cloné, la branche actuelle a donc sa valeur distanteorigin
?pull
vous devrez spécifier d'où. Le-u
configure le suivi des succursales entre l'origine et votre dépôt local.push
- ce qui bat tout le point de cette question. Bref, il n'y a pas de bonne réponse. Que les développeurs de Git insistent pour conserver cette expérience utilisateur maladroite (AUX) face à la dissidence communautaire généralisée est ... instructif. Et décourageant. (Surtout décourageant.)Vous pouvez simplement
en premier lieu. Si vous définissez
branch.autosetupmerge
oubranch.autosetuprebase
(mon préféré) suralways
(la valeur par défaut esttrue
),my-branch
sera automatiquement suiviorigin/whatever
.Tu vois
git help config
.la source
git checkout -t origin/whatever
, qui choisit égalementwhatever
comme nouveau nom de branche. Très pratique!-u
/--set-upstream
.git checkout -t origin/whatever
ne fonctionne pas pour moi lorsque j'essaye de créer une nouvelle branche:fatal: Cannot update paths and switch to branch 'whatever' at the same time.
git checkout -b my-branch origin/whatever
a également la même erreur (j'essaie de créer une nouvelle branche qui n'existe pas sur local ou distant):fatal: Cannot update paths and switch to branch 'whatever' at the same time.
Ceci est mon utilisation la plus courante pour The Fuck .
De plus, il est amusant de taper des jurons dans votre terminal.
la source
Vous pouvez configurer l'amont plus simplement de deux manières. Tout d'abord lorsque vous créez la branche:
ou après avoir créé une branche, vous pouvez utiliser cette commande.
Vous pouvez également créer des branches, extraire et configurer en amont en une seule commande:
Ma préférence personnelle est de le faire dans une commande en deux étapes:
la source
git branch -u origin/my-branch
je peux exécutergit pull
pour retirer mes modifications.git checkout -t origin/my-branch
passer de-b my-branch
, il déduira automatiquementmy-branch
le nom de la branche locale. Cependant, comme @Spongman l'a mentionné, cette commande ne fonctionne pas si elleorigin/my-branch
n'existe pas en premier.git push -u origin/my-branch
échoue pour moi avecfatal: 'origin/my-branch' does not appear to be a git repository
. Cela fonctionne:git push -u origin my-branch
Vous pouvez utiliser:
qui liera la branche en amont chaque fois que vous créez ou extrayez une nouvelle branche.
Voir https://felipec.wordpress.com/2013/09/01/advanced-git-concepts-the-upstream-tracking-branch/
Cela fonctionne également avec
branch.autosetuprebase
, si vous suivez un flux de travail plus axé sur le rebase, mais ne l'utilisez pas à moins que vous ne sachiez ce que vous faites, car cela entraînera par défaut votre comportement d'extraction pour rebaser, ce qui peut entraîner des résultats étranges.la source
--set-upstream
messagemaster
. 2. Exécutezgit checkout -b new_branch
. 3. Ajoutez un commit à cette branche. 4git push origin new_branch
.. Cela pousse ce commit vers lamaster
branche d'origine (plutôt que vers une nouvelle branche d'origine appeléenew_branch
).Par ailleurs, le raccourci pour pousser la branche actuelle vers une télécommande du même nom:
la source
J'utilise personnellement ces alias suivants dans bash
dans le fichier ~ / .gitconfig
et dans le fichier ~ / .bashrc ou ~ / .zshrc
la source
git pushup
qui pousse toujours la branche courante à l'origine. Je peux toujours simplement utiliser à lagit pushup
place degit push
👍Si ce qui suit ne fonctionne pas:
Vous devez également mettre à jour la configuration locale de votre projet, car il est possible que votre projet ait des configurations git locales:
la source
Vous pouvez également dire explicitement à git pull quelle branche distante tirer (comme il le mentionne dans le message d'erreur):
git pull <remote-name> <remote-branch>
Attention cependant: si vous êtes sur une branche différente et effectuez un pull explicite, la refspec que vous tirez sera fusionnée dans la branche sur laquelle vous vous trouvez!
la source
Pour ce que cela vaut, si vous essayez de suivre une branche qui existe déjà sur la télécommande (par exemple, origin / somebranch) mais ne l'avez pas encore vérifiée localement, vous pouvez faire:
Remarque: «-t» est la version abrégée de l'option «--track».
Cela crée la même association dès le départ.
la source
git checkout somebranch
Est donc équivalent.git fetch
immédiatement à l'avance?git fetch
ougit pull
. Je n'ai cependant jamais trouvé que c'était un problème.la source
J'utilise cet alias Git au lieu de copier / coller la suggestion de Git à chaque fois: https://gist.github.com/ekilah/88a880c84a50b73bd306
Source copiée ci-dessous (ajoutez ceci à votre
~/.gitconfig
fichier):la source
Vous pouvez configurer un très bon alias qui peut gérer cela sans la syntaxe trop verbeuse.
J'ai l'alias suivant dans
~/.gitconfig
:Après avoir effectué une validation sur une nouvelle branche, vous pouvez pousser votre nouvelle branche en tapant simplement la commande:
la source
po
?push origin
? que se passe-t-il si cela est exécuté plusieurs fois?git push -f
alias configurégit pf
, donc je l'utilise une fois que l'origine a déjà été poussée.HEAD
Pour ceux qui recherchent un alias qui fonctionne avec
git pull
, voici ce que j'utilise:Maintenant, chaque fois que vous obtenez:
Exécutez simplement:
Et tu es prêt à partir
la source
Parce que git a la capacité intéressante de pousser / tirer différentes branches vers différents référentiels "en amont". Vous pouvez même utiliser des référentiels séparés pour pousser et tirer - sur la même branche. Cela peut créer un flux distribué à plusieurs niveaux, je peux voir que cela est utile sur des projets tels que le noyau Linux. Git a été initialement construit pour être utilisé sur ce projet.
Par conséquent, il ne fait aucune hypothèse sur le repo que votre succursale devrait suivre.
D'un autre côté, la plupart des gens n'utilisent pas git de cette façon, cela pourrait donc être un bon argument pour une option par défaut.
Git est généralement assez bas et cela peut être frustrant. Pourtant, il existe des interfaces graphiques et il devrait être facile d'écrire des scripts d'assistance si vous souhaitez toujours l'utiliser à partir du shell.
la source
Vous pouvez aussi faire
git push -u origin $(current_branch)
la source
J'ai en quelque sorte redécouvert à
legit
cause de ce problème (OS X uniquement). Maintenant, tout ce que j'utilise lors du branchement sont ces deux commandes:legit publish [<branch>]
Publie la branche spécifiée sur la télécommande. (alias:pub
)legit unpublish <branch>
Supprime la branche spécifiée de la télécommande. (alias:unp
)SublimeGit est livré avec un
legit
support par défaut, ce qui rend la routine de branchement complète aussi simple que d'appuyer sur Ctrl-b.la source
Nous utilisons phabricator et ne poussons pas avec git. J'ai dû créer un alias bash qui fonctionne sous Linux / mac
enregistrer
la source
Voici un alias bash pour git push qui peut être exécuté en toute sécurité pour chaque push et basculera automatiquement entre la configuration en amont pour la première push, puis les push normales après cela.
Message d'origine
la source