2017-03-15 1 views

Répondre

2

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.

+0

J'ai lancé 'git reset --hard', mais j'ai toujours des fichiers non-traités depuis cette branche. – Rudolph

+1

@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 –

+0

@Rudolph édité pour couvrir ce cas – SpoonMeiser

1

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.