J'ai fait une traction d'une branche différente par erreur et j'ai fait git reset [email protected]{1}
pour l'annuler. Maintenant, quand je tape git status
, je reçois une énorme liste de fichiers non suivis et modifiés de la branche que j'ai tirée. Comment les supprimer de la mise en scène afin de ne pas avoir à les valider?Git: Supprimer les modifications non enregistrées après avoir annulé un git pull?
Répondre
La commande que vous voulez est
git reset --hard
Le drapeau --hard
dit git de se déplacer non seulement la tête, mais aussi restaurer les fichiers locaux d'être tels qu'ils étaient à l'engager. Cela réinitialisera uniquement les modifications sur les fichiers suivis, si vous avez utilisé --hard
lors de votre réinitialisation initiale pour annuler votre pull, tous les nouveaux fichiers introduits par le pull auraient été supprimés, mais si vous avez fait une réinitialisation logicielle, de nouveaux fichiers introduit par le pull sera toujours là, mais votre HEAD sera un engagement où ces fichiers ne sont pas suivis.
Pour supprimer des fichiers non suivis de la copie de travail, l'utilisateur git clean
git clean -n
Fera une marche à sec et vous montrer ce qu'il supprimerait. À moins que vous ne l'ayez configuré autrement, vous devrez probablement fournir l'indicateur de force -f
pour qu'il supprime réellement les fichiers.
Soyez prudent avec git clean, parce que ces fichiers ne sont pas trafiqués, il n'y a aucun moyen de récupérer un fichier que vous supprimez accidentellement.
Je ferais une réinitialisation matérielle comme dans la réponse de @ SpoonMeiser, mais je ne ferais pas une réinitialisation matérielle du reflog. Le reflog est spécial - nous pourrions avoir besoin de le consulter mais nous ne devrions pas avoir besoin de le réinitialiser dans l'usage quotidien de git.
Au lieu de cela, je trouverais la dernière livraison de votre succursale avant tiré, et à faire:
git reset --hard 46c80011b9845548000f8ed2178755d28c5e6832
ou quel que soit le hachage est. Vous devriez pouvoir trouver le hachage en faisant git log
. Si l'extraction a effectué une fusion, la validation la plus récente sera une fusion. La sortie de git log ressemble à ceci:
commit eddb8b70c9167cf88653d7649f054c0d69a5ee8a
Merge: a89faff 980a815
Author: jwg <[email protected]>
Date: Wed Mar 15 10:22:16 2017 +0000
Merge branch 'some_random_remote_branch' of git_server:foo/bar into my_precious_local_branch
La deuxième ligne montre les deux validations qui ont été fusionnées. L'un d'entre eux est la branche à distance, l'un est my_precious_local_branch
, vous devriez être capable de savoir lequel.
Si le dernier commit n'est pas un commit de fusion, alors le pull était un fast-forward. Cela signifie que votre branche locale n'avait rien sur ce qui n'était pas sur la branche distante. Cependant, vous pourriez toujours vouloir récupérer votre succursale locale. Vous pouvez passer par git log
et décider exactement quel commit vous voulez restaurer, puis lui faire git reset --hard
.
J'ai lancé 'git reset --hard', mais j'ai toujours des fichiers non-traités depuis cette branche. – Rudolph
@Rudolph - S'il vous plaît regardez ceci: http://stackoverflow.com/questions/61212/how-to-remove-local-untracked-files-from-the-current-git-working-tree –
@Rudolph édité pour couvrir ce cas – SpoonMeiser