Comment réinitialiser 'maître' à 'origine / maître'?

216

Puis-je faire ce qui suit d'une manière plus simple?

git checkout origin/master
git branch -D master
git branch master
git checkout master
Xiè Jìléi
la source
Parfois, cela peut être fait sans toucher à l’arbre de travail: stackoverflow.com/a/12343727/586086
Andrew Mao
6
Veuillez mettre à jour votre réponse acceptée: La réponse de @ KindDragon est correcte et plus courte.
Robert Siemer

Réponses:

310

Comme le mentionne la réponse de KindDragon , vous pouvez recréer directement à partir de:masterorigin/master

git checkout -B master origin/master

La git checkoutpage de manuel mentionne:

Si -Best donné, <new_branch>est créé s'il n'existe pas; sinon, il est réinitialisé . C’est l’équivalent transactionnel de

$ git branch -f <branch> [<start point>]
$ git checkout <branch>

Initialement suggéré:

Quelque chose comme:

$ git checkout master

# remember where the master was referencing to
$ git branch previous_master

# Reset master back to origin/master
$ git reset --hard origin/master

l'étape 2 étant facultative.

VonC
la source
1
Vous pouvez le faire avec une ligne.
Robert Siemer
94

Git supporte cette commande:

git checkout -B master origin/master

Vérifiez la origin/masterbranche puis réinitialisez master-la.

KindDragon
la source
4
La seule vraie réponse.
Robert Siemer
3
enregistrer quatre frappes - vous n'avez pas besoin des guillemets. Juste: git checkout -B maître d'origine / maître
zumalifeguard
Disons que j'ai commis 2 choses, la première est une fusion avec une branche et la seconde est régulière. Qu'advient-il de la fusion si je retourne à l'origine / au maître?
Utdev
1
Ne devez-vous pas git fetch origin masteravant pour être sûr que origin/masterc'est mis à jour?
pedrozath
Oui, bien sûr, avec toutes les solutions que vous devriez faire en git fetchpremier
KindDragon
29

Je pense que même la réponse de VonC est complexe par rapport à cette option:

git update-ref refs/heads/master origin/master
git reset --hard master

git enregistre automatiquement chaque valeur d’un ref (par le biais du reflog). Ainsi, après avoir exécuté cette commande, master@{1}fait référence à la valeur précédente de maître.

La réponse de VonC est correcte, mais elle gaspille du temps en récupérant l'ancienne valeur de master dans le système de fichiers.

Si vous vous souciez d'objets orphelins dans le référentiel, vous pouvez exécuter git gc

Alexander Bird
la source
1
Cela semble une alternative intéressante. +1
VonC
Je reçois toujoursAlready on 'master'
yourfriendzak
@yourfriendzak, j'ai oublié de prendre en compte le fait que vous avez peut-être déjà vérifié le maître avant de mettre à jour le maître. J'ai mis à jour la réponse pour qu'elle soit celle qui devrait fonctionner même dans ce cas également.
Alexander Bird
Cela fonctionne même si vous n'êtes pas sur le maître (comme un état HEAD détaché qui pointe en fait sur l'origine / le sommet). Ensuite, vous pouvez passer la commande maître sans avoir à retourner les anciens fichiers dans le référentiel. Génial!
Andrew Mao
20

Si vous êtes déjà sur mastervous pouvez faire ce qui suit:

git reset --hard origin/master

Il indiquera la masterbranche locale à la télécommande origin/masteret rejetera toute modification dans le répertoire de travail.

Fuad Saud
la source
Et va supprimer des fichiers! Si vous avez créé / édité des fichiers et que vous avez exécuté un "ajout rapide", cette commande les supprimera. Être averti.
Cheeso
Cette approche est-elle meilleure que git checkout -B master origin/master?
Jim Aho le