4658 votes

Comment faire pour réinitialiser mon dépôt local pour être juste comme le dépôt distant TÊTE

Comment puis-je réinitialiser mon dépôt local pour être juste comme le dépôt distant TÊTE? J'ai fait:

git reset -hard HEAD^

Mais quand je fais un git status,

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
      modified:   java/com/mycompany/TestContacts.java
      modified:   java/com/mycompany/TestParser.java

Pouvez-vous s'il vous plaît dites-moi pourquoi j'ai ces "modifiée"? Je n'ai pas touché ces fichiers? Si je le faisais, je veux les supprimer.

8107voto

Dan Moulding Points 46866

Le réglage de votre branche pour correspondre exactement à la distance d'une succursale peut être fait en deux étapes:

git fetch origin
git reset --hard origin/master

Si vous souhaitez enregistrer votre branche actuelle de l'état avant de le faire (au cas où), vous pouvez le faire:

git commit -a -m "Saving my work, just in case"
git branch my-saved-work

Maintenant, votre travail est enregistré sur la branche "mon-sauvé-travail" dans le cas où vous décidez que vous voulez récupérer (ou si vous voulez regarder plus tard ou diff, il est contre la mise à jour de votre succursale).

Notez que le premier exemple, on suppose que la distance de pensions du nom est "l'origine" et que la branche nommée "maître" de la télécommande repo correspond à la actuellement check-out, branchement dans votre local repo.

BTW, cette situation que vous êtes dans l'ressemble beaucoup comme un cas courant où une poussée qui a été fait dans le cours d'extraction d'une branche de non-dépôt nu. Avez-vous récemment pousser dans vos locaux repo? Si non, alors pas de soucis -- quelque chose d'autre doit être la cause de ces fichiers de façon inattendue finissent modifié. Sinon, vous devez être conscient qu'il n'est pas recommandé de le pousser dans une situation de non-dépôt nu (et pas dans le contrôle de la branche, en particulier).

135voto

Mikael Ohlson Points 784

git reset --hard HEAD fait seulement remet à la dernière commis de l'état. Dans ce cas, la TÊTE se réfère à la TÊTE de votre branche.

Si vous avez plusieurs commits, cela ne fonctionne pas..

Ce que vous voulez probablement faire, est remis à la tête de l'origine ou de ce que vous dépôt distant est appelé. Je serais probablement juste de faire quelque chose comme

git reset --hard origin/HEAD

Attention tout de même. Réinitialise dur ne peut pas facilement être annulée. Il est préférable de le faire en Dan suggère, et de la direction une copie de vos modifications avant de le réinitialiser.

26voto

Andrew Tulloch Points 71

C'est quelque chose que je face régulièrement, et j'ai généralisé le script Wolfgang fournies ci-dessus pour travailler avec n'importe quelle branche

J'ai aussi ajouté un "êtes-vous sûr de l'invite", et quelques commentaires de sortie

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# AT 2012-11-09
# see http://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
branchname=`git rev-parse --symbolic-full-name --abbrev-ref HEAD`
read -p "Rest branch $branchname to origin (y/n)? "
[ "$REPLY" != "y" ] || 
echo "about to auto-commit any changes"
git commit -a -m "auto commit at $timestamp"
if [ $? -eq 0 ]
then
  echo "Creating backup auto-save branch: auto-save-$branchname-at-$timestamp"
  git branch "auto-save-$branchname-at-$timestamp" 
fi
echo "now resetting to origin/$branchname"
git fetch origin
git reset --hard origin/$branchname

18voto

user2846569 Points 124

J'ai fait:

git branch -D master
git checkout master

pour réinitialiser totalement de branche


note, vous devez passer à une autre branche pour être en mesure de supprimer nécessaire branche

17voto

Wolfgang Fahl Points 1920

Voici un script qui automatise ce que la réponse la plus populaire suggère:

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# see http://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
git commit -a -m "auto commit at $timestamp"
if [ $? -eq 0 ]
then
  git branch "auto-save-at-$timestamp" 
fi
git fetch origin
git reset --hard origin/master

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X