293 votes

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

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

0 votes

Parfois, cela peut être fait sans toucher l'arborescence de travail : stackoverflow.com/a/12343727/586086

8 votes

Veuillez mettre à jour votre réponse acceptée : la réponse de @KindDragon est plus correcte et plus courte.

389voto

Runeslinger Points 9379

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

git checkout -B master origin/master

La page man de git checkout mentionne :

Si -B est donné, est créé s'il n'existe pas ; sinon, il est réinitialisé. Cela équivaut à la transaction :

$ git branch -f  []
$ git checkout 

Depuis Git 2.23+ (août 2019), comme git checkout est trop confus, la nouvelle commande (encore expérimentale) est git switch :

git switch -C master origin/master

C'est à dire :

-C 
--force-create 

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

$ git branch -f 
$ git switch 

Initialement suggéré :

Quelque chose comme :

$ git checkout master

# se souvenir où le master faisait référence
$ git branch previous_master

# Réinitialiser master à origin/master
$ git reset --hard origin/master

avec l'étape 2 étant facultative.

1 votes

Vous pouvez le faire avec une seule ligne.

0 votes

Merci VonC, j'ai mis à jour pour accepter la réponse de @KindDragon comme cher que vous avez suggéré. La technique avance toujours. Cela fait déjà 10 ANS !! Je vous aime les gars!! ^_^

0 votes

@XièJìléi Pas de problème, bon choix. Le mien ajoute plus de détails à celui de KindDragon.

181voto

KindDragon Points 1886

Git prend en charge cette commande :

git checkout -B master origin/master

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

MISE À JOUR:
Ou vous pouvez utiliser la nouvelle commande de commutation pour cela

git switch -C master origin/master

5 votes

La seule réponse vraie.

3 votes

Enregistrer quatre frappes de touche - vous n'avez pas besoin des guillemets. Juste : git checkout -B master origin/master

0 votes

Disons que j'ai commis 2 choses, la première est une fusion avec la branche et la seconde est régulière. Que se passe-t-il avec la fusion si je retourne à l'origine/master?

31voto

Alexander Bird Points 1767

Je pense même que 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'une référence (via le reflog). Ainsi, après avoir exécuté cette commande, master@{1} fera référence à la valeur précédente de master.

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

Si vous vous souciez des objets orphelins dans le dépôt, vous pouvez exécuter git gc

1 votes

Sonne comme une alternative intéressante. +1

0 votes

Je reçois toujours Déjà sur 'master'

0 votes

@yourfriendzak, J'avais oublié de tenir compte du fait que vous pourriez déjà avoir maître vérifié avant de mettre à jour maître. J'ai mis à jour la réponse pour qu'elle fonctionne même dans ce cas.

30voto

Fuad Saud Points 441

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

git reset --hard origin/master

Cela pointera la branche locale master vers le distant origin/master et annulera toutes les modifications dans le répertoire de travail.

2 votes

Et supprimera les fichiers ! Si vous avez créé/édité des fichiers et avez exécuté un "git add" sur eux, cette commande les supprimera. Soyez averti.

0 votes

Est-ce que cette approche est meilleure que git checkout -B master origin/master ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X