2011-04-20 10:34:06 +0000 2011-04-20 10:34:06 +0000
235
235

Comment réinitialiser "master" à "origin/master" ?

Puis-je faire ce qui suit de manière plus simple ?

git checkout origin/master
git branch -D master
git branch master
git checkout master

Réponses (4)

343
343
343
2011-04-20 11:22:10 +0000

Comme le mentionne la [ réponse ] de KindDragon , vous pouvez recréer master directement sur origin/master avec :

git checkout -B master origin/master

La page de manuel de git checkout mentionne :

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

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

Since Git 2. 23+ (août 2019), puisque [ git checkout est trop confus ]&3, la nouvelle commande (encore expérimentale) est * git switch ** :

git switch -C master origin/master

C'est-à-dire :

-C <new-branch>
--force-create <new-branch>

Similaire à --create sauf que si <new-branch> existe déjà, il sera réinitialisé à <start-point>.
C'est un raccourci pratique pour :

$ git branch -f <new-branch>
$ git switch <new-branch>

Originalement 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

avec l'étape 2 étant optionnelle.

102
102
102
2014-08-24 19:30:10 +0000

Git supporte cette commande :

git checkout -B master origin/master

Vérifiez la branche origin/master puis réinitialisez la branche master à cet endroit.

30
30
30
2013-01-23 20:48:07 +0000

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

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

git enregistre automatiquement chaque valeur d'une ref (par le biais du reflog). Donc après avoir lancé cette commande, master@{1} se réfère à la valeur précédente de master.

La réponse de VonC est correcte, mais elle fait perdre du temps à extraire l'ancienne valeur de master dans le système de fichiers.

Si vous vous souciez des objets orphelins dans la repo, alors vous pouvez lancer git gc

22
22
22
2014-06-25 15:47:13 +0000

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

git reset --hard origin/master

Il dirigera la branche locale de master vers la branche distante de origin/master et éliminera toute modification dans le répertoire de travail.