Question Réinitialiser la branche du référentiel local pour qu'elle soit identique au référentiel distant HEAD


Comment réinitialiser ma branche locale pour qu'elle soit identique à la branche du référentiel distant?

J'ai fait:

git reset --hard HEAD

Mais quand je cours 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 me dire pourquoi j'ai ces 'modifiés'? Je n'ai pas touché ces fichiers? Si je l'ai fait, je veux les supprimer.


2515
2017-10-27 00:27


origine


Réponses:


Définir votre branche pour correspondre exactement à la branche distante peut être fait en deux étapes:

git fetch origin
git reset --hard origin/master

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

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

Maintenant, votre travail est sauvegardé sur la branche "mon-sauvegarde-travail" au cas où vous décideriez de le récupérer (ou si vous voulez le regarder plus tard ou le comparer à votre branche mise à jour).

Notez que le premier exemple suppose que le nom du référent distant est "origine" et que la branche nommée "maître" dans le référentiel distant correspond à la branche actuellement retirée dans votre référentiel local.

BTW, cette situation que vous êtes dans ressemble beaucoup à un cas commun où une poussée a été faite dans la branche actuellement extrait d'un dépôt non-nu. Avez-vous récemment poussé dans votre repo local? Si non, alors pas de soucis - quelque chose d'autre a dû provoquer ces fichiers de façon inattendue. Sinon, sachez qu'il n'est pas recommandé de pousser dans un référentiel non nu (et pas dans la branche actuellement extraite, en particulier).


4460
2017-10-27 01:44



Je devais faire (la solution dans la réponse acceptée):

git fetch origin
git reset --hard origin/master

Suivi par:

git clean -f

pour supprimer les fichiers locaux

Pour voir quels fichiers seront supprimés (sans les supprimer):

git clean -n -f

250
2017-12-27 06:20



Tout d'abord, réinitialiser le précédemment récupéré HEAD de la branche amont correspondante:

git reset --hard @{u}

L'avantage de spécifier @{u} ou sa forme verbeuse @{upstream} est que le nom du repo distant et de la branche ne doit pas être spécifié explicitement.

Ensuite, au besoin, supprimez les fichiers non suivis, éventuellement avec -x:

git clean -df

Enfin, au besoin, obtenez les dernières modifications:

git pull

118
2018-02-10 20:27



git reset --hard HEAD en réalité seulement les réinitialisations au dernier état commis. Dans ce cas, HEAD se réfère à la tête de votre branche.

Si vous avez plusieurs validations, cela ne fonctionnera pas.

Ce que vous voulez probablement faire, c'est réinitialiser à la tête d'origine ou tout ce que vous appelez le référentiel distant. Je ferais probablement juste quelque chose comme

git reset --hard origin/HEAD

Soyez prudent cependant. Les réinitialisations matérielles ne peuvent pas être facilement annulées. Il est préférable de faire ce que Dan suggère, et de brancher une copie de vos modifications avant de réinitialiser.


91
2017-10-27 01:08



Toutes les suggestions ci-dessus ont raison, mais souvent vraiment réinitialiser votre projet, vous devez également supprimer les fichiers même qui sont dans votre .gitignore.

Pour obtenir l'équivalent moral de effacer votre répertoire de projet et re-clonage de la télécommande est:

git fetch
git reset --hard
git clean -x -d -f

Attention: git clean -x -d -f est irréversible et vous risquez de perdre des fichiers et des données (par exemple, des choses que vous avez ignorées en utilisant .gitignore).


57
2017-07-23 17:48



La question mêle deux problèmes ici:

  1. comment réinitialiser une branche locale au point où la télécommande est
  2. comment effacer votre zone de mise en attente (et éventuellement le répertoire de travail), de sorte que git statusdit nothing to commit, working directory clean.

Le guichet unique est:

  1. git fetch --prune  (optionnel) Met à jour l'instantané local du repo distant. Les autres commandes sont locales uniquement.
    git reset --hard @{upstream}Met le pointeur de la branche locale à l'emplacement de l'instantané de la télécommande, ainsi que l'index et le répertoire de travail dans les fichiers de cette validation.
  2. git clean -d --force  Supprime les fichiers et les répertoires non entravés qui empêchent git de dire "répertoire de travail propre".

29
2018-01-31 01:29



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

J'ai également ajouté une invite "êtes-vous sûr" et une sortie de commentaires

#!/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 "Reset 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

20
2017-11-09 13:01



Voici un script qui automatise ce que la réponse la plus populaire suggère ... Voir https://stackoverflow.com/a/13308579/1497139 pour une version améliorée qui prend en charge les branches

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# see https://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

11
2017-10-15 08:50