204 votes

Git peut-il annuler un checkout de fichiers non indexés ?

Je supprime accidentellement mes modifications sur les fichiers de mon arbre de travail local via git checkout. Les fichiers ne sont pas mis en scène à ce moment-là. Est-il possible d'annuler ce checkout ?

0 votes

Non, nous ne pouvons pas, mais si vous utilisez eclipse, nous pouvons vérifier Team-->Local History.

0 votes

C'est une des raisons pour lesquelles il ne faut pas faire d'engagements importants.

196voto

Si vous utilisez un IDE "professionnel", il y a de fortes chances que vous puissiez restaurer des fichiers à partir d'un historique local. Dans Rubymine par exemple, vous pouvez cliquer avec le bouton droit de la souris sur les fichiers et regarder un historique des modifications indépendamment des modifications git, cela m'a sauvé plusieurs fois maintenant ^^.

46 votes

Pour info, cette fonctionnalité est disponible dans toute la famille JetBrains d'IDE "professionnels" : Pycharm, IDEA, PHPStorm, Webstorm. J'ai sauvé mon bakken aujourd'hui. Merci, Christoph !

6 votes

Je dois vous remercier. J'utilise WebStorm, et j'ai complètement oublié cette fonctionnalité, même si je l'utilise assez souvent. J'étais tellement pris par la perte de code que je n'y ai pas pensé !

8 votes

Dans Eclipse, vous pouvez faire un clic droit sur le fichier -> comparer avec -> historique local.

133voto

VonC Points 414372

Je crois que si un fichier est modifié mais pas encore ajouté (staged), il est purement "privé".
Cela signifie qu'il ne peut pas être restauré par GIT s'il est écrasé par l'index ou la version HEAD (sauf si vous avez une copie de votre travail actuel quelque part).

Un contenu "privé" est un contenu qui n'est visible que dans votre répertoire actuel, mais qui n'est en aucun cas enregistré dans Git.

Note : Comme expliqué dans d'autres réponses, vous pouvez récupérer vos modifications si vous utilisez un IDE (avec historique local) ou si vous avez un éditeur ouvert (ctrl+Z).

6 votes

Je comprends que les modifications apportées à un fichier "privé" ne peuvent pas être annulées par git. Cependant, si le fichier a été modifié par git (par exemple, par le biais de git checkout -- ), je m'attendrais à ce qu'il soit en mesure d'annuler cette opération, peut-être via la fonction reflog . Est-ce une mauvaise attente ?

2 votes

@CiprianTomoiaga reflog est pour le passé non référencé s'engage. Si ce que vous voulez restaurer n'a pas été commité (ou mis à jour), reflog ne vous aidera pas.

4 votes

@CiprianTomoiaga pour tout type de contenu privé (non encore ajouté), vous vous fiez uniquement à votre éditeur ou à la fonction IDE. Exemple pour eclipse : aide.eclipse.org/neon/

76voto

roman.brodetski Points 1109

Si vous travaillez dans un éditeur comme Sublime Text, et que le fichier en question est toujours ouvert, vous pouvez appuyer sur ctrl+z, et il reviendra à l'état qu'il avait avant le checkout git.

13 votes

Cette réponse a sauvé ma journée. Merci beaucoup !

1 votes

Je viens de tomber par hasard sur ce correctif et j'étais sur le point de poster une nouvelle réponse. Il semble que Sublime capture les changements d'état de Git dans l'historique des modifications de fichiers.

0 votes

Ça a marché pour moi dans Ecipse.

47voto

Marcin Gil Points 16951

Malheureusement, vos modifications sont perdues. Vos modifications privées sont simplement écrasées. A moins que vous n'ayez git stash avant de passer à la caisse...

Prenez-le du bon côté : vous pouvez maintenant mettre en œuvre les choses encore mieux ;)

29voto

Marcin Szymczak Points 1945

Vérifiez l'histoire locale dans votre IDE.

0 votes

Je viens de faire l'erreur de ne pas mettre en scène mes modifications et de forcer un checkout. J'ai vérifié mon historique local dans Android Studio (view -> recent changes) et j'ai inversé les dernières modifications que j'ai faites. Plus d'informations ici jetbrains.com/help/idea/2016.3/

0 votes

Cela fonctionne parfaitement bien dans RubyMine, l'action d'effacer vos modifications sera référencée comme "Modification externe". Merci beaucoup pour cela Marcin, cela vient de me sauver une heure de travail perdue !

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