Lorsque vous exécutez git pull
sur la master
branche, il tire généralement de origin/master
. Je suis dans une branche différente appelée newbranch
, mais je dois exécuter une commande qui fait un git pull
de origin/master
en master
mais je ne peux pas exécuter git checkout
pour changer la branche sélectionnée tant que l'extraction n'est pas terminée. Y a-t-il un moyen de faire cela?
Pour donner un peu de contexte, le référentiel stocke un site Web. J'ai apporté quelques modifications newbranch
et les ai déployées en basculant le site Web vers newbranch
. Maintenant que ces changements ont été fusionnés en amont dans la master
succursale, j'essaie de ramener le site Web à la master
succursale également. À ce stade, newbranch
et origin/master
sont identiques, mais master
est à la traîne origin/master
et doit être mis à jour. Le problème est, si je le fais de manière traditionnelle:
$ git checkout master
# Uh oh, production website has now reverted back to old version in master
$ git pull
# Website is now up to date again
Je dois réaliser la même chose que ci-dessus ( git checkout master && git pull
), mais sans changer le répertoire de travail vers une révision antérieure au cours du processus.
la source
newbranch
et qu'il n'y a rien à cacher!git fetch; git merge origin/master
de l'intérieurnewbranch
. Il n'y a aucun avantage à cloner une deuxième copie entière du référentiel.Réponses:
Vous avez un arbre de travail que vous ne voulez pas toucher, alors utilisez-en un autre. Le clone est bon marché, il est conçu pour cela.
Le problème avec toutes les autres réponses ici est qu'elles ne tirent pas réellement. Si vous avez besoin de la fusion ou du rebase pour lequel vous avez configuré l'extraction, vous avez besoin d'un autre arbre de travail et de la procédure ci-dessus. Sinon
git fetch; git checkout -B master origin/master
, ça fera l'affaire.la source
git checkout master
vous récupérez l'anciennemaster
branche car vous n'avez pas fait degit pull
dans lemain
dossier pour le synchroniser avec origin / master. C'est ce que j'essaye d'éviter.master
versorigin
, mais je ne pense pas que votre paiement final soit de cette mise à jourmaster
. Il n'y a pasgit pull
de mise à jour de lamaster
branche dans lemain
répertoire, donc à moins que je ne manque quelque chose, vos commandes ne sont pas différentes de simplement fonctionnergit checkout master
seules et d'obtenir l'ancienmaster
arbre. Si vous regardez de près, vous n'exécutez aucune commande dans lemain
répertoire qui communique en amont (à l'exception de la ligne 1, qui est exécutée avant que vousSimple: mise à jour d'une branche distante vers un maître de branche actuellement non extrait :
où origin est votre télécommande et vous êtes actuellement extrait dans une branche, par exemple dev .
Si vous souhaitez mettre à jour votre branche actuelle en plus de la branche spécifiée en une seule fois:
la source
Ceci est répondu ici: Fusionner, mettre à jour et extraire des branches Git sans utiliser d'extraction
la source
git fetch origin master:master
.git fetch
en soi supposerait que vous vouliez mettre à jour la branche actuelle et non une autre branche.En fait, la réponse est d'une simplicité trompeuse:
Cela vous permet de mettre à jour la
master
branche sans passer à jusqu'à après qu'il a été mis à jour.la source
Vous vous inquiétez de quelque chose qui ne peut pas être corrigé, car les opérations Git ne sont pas atomiques. Vous aurez toujours un trou où votre répertoire de travail est à mi-chemin entre les branches, même si vous mettez à jour le maître sans y avoir d'abord basculé. C'est pourquoi Git n'est pas un outil de déploiement .
Puisque vous ne validez pas réellement de code dans votre environnement de production (j'espère), vous n'avez pas vraiment besoin de faire extraire une branche. Vous pouvez simplement faire a
git fetch
pour mettre à jour vos références distantes, puisgit checkout origin/master
pour déplacer le répertoire de travail directement vers le commit actuellement pointé parorigin/master
. Cela vous mettra dans un état principal détaché, mais encore une fois, comme vous ne validez pas de code, cela n'a pas d'importance.C'est le plus petit trou que vous allez avoir, mais comme je l'ai dit, un trou existe toujours;
checkout
n'est pas atomique.la source
origin/master
cependant, cela pourrait bien faire l'affaire.git fetch
Faites juste un avant de faire quoi que ce soit d'autre et éliminez le transfert réel des données.Vous pouvez utiliser update-ref pour cela:
Notez que cela rejetterait tous les commits locaux dans la branche master. Dans votre cas, il n'y en aura pas, donc ça va. Pour d'autres personnes qui essaient de faire cela là où il y a des commits locaux, je ne pense pas que ce soit possible, car la fusion ne peut être exécutée que sur la branche actuelle.
la source
git branch --force master origin/master
? Cela oblige le chef localmaster
à pointer vers le chef deorigin
smaster
La solution de Malvineous fonctionne pour moi
Juste pour donner l'erreur
Alors je cours avec l'option -D
Merci
la source
git fetch origin master:master
master
.master
qui ne sont pas encore transmises, ellesorigin/master
sont fusionnées dans votre maître.la source