Dites que la télécommande est origin
et la branche est master
, et dites que vous avez déjà master
extrait, essayez ce qui suit:
git fetch origin
git reset --hard origin/master
Cela prend simplement la branche actuelle et la pointe vers la HEAD
branche distante.
AVERTISSEMENT : comme indiqué dans les commentaires, cela rejettera vos modifications locales et les écrasera avec tout ce qui se trouve à l'origine .
Ou vous pouvez utiliser les commandes de plomberie pour faire essentiellement la même chose:
git fetch <remote>
git update-ref refs/heads/<branch> $(git rev-parse <remote>/<branch>)
git reset --hard
EDIT: Je voudrais expliquer brièvement pourquoi cela fonctionne.
Le .git
dossier peut contenir les validations de n'importe quel nombre de référentiels. Puisque le hachage de validation est en fait une méthode de vérification du contenu de la validation, et pas seulement une valeur générée aléatoirement, il est utilisé pour faire correspondre les ensembles de validation entre les référentiels.
Une branche est juste un pointeur nommé vers un hachage donné. Voici un ensemble d'exemples:
$ find .git/refs -type f
.git/refs/tags/v3.8
.git/refs/heads/master
.git/refs/remotes/origin/HEAD
.git/refs/remotes/origin/master
Chacun de ces fichiers contient un hachage pointant vers un commit:
$ cat .git/refs/remotes/origin/master
d895cb1af15c04c522a25c79cc429076987c089b
Ce sont tous pour le mécanisme de stockage interne git et fonctionnent indépendamment du répertoire de travail . En procédant comme suit:
git reset --hard origin/master
git pointera la branche actuelle sur la même valeur de hachage que celle vers laquelle pointe origine / maître. Ensuite, il change de force le répertoire de travail pour qu'il corresponde à la structure / au contenu du fichier à ce hachage.
Pour voir cela au travail, allez-y et essayez ce qui suit:
git checkout -b test-branch
# see current commit and diff by the following
git show HEAD
# now point to another location
git reset --hard <remote>/<branch>
# see the changes again
git show HEAD