Peut git annuler une extraction de fichiers non mis en scène

164

Je rejette accidentellement mes modifications sur les fichiers de mon arbre de travail local via git checkout. Les fichiers ne sont pas mis en scène pour le moment. Est-il possible «d'annuler» ce paiement?

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

Réponses:

106

Je crois que si un fichier est modifié mais pas encore ajouté (mis en scène), 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 uniquement visible dans votre répertoire actuel, mais n'est en aucun cas enregistré dans Git.

VonC
la source
5
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 via git checkout --), je m'attendrais à ce qu'il puisse annuler cette opération, peut-être via le reflog. Est-ce une mauvaise attente?
Ciprian Tomoiagă
2
Le reflog @CiprianTomoiaga concerne les commits passés non référencés . Si ce que vous souhaitez restaurer n'a pas été validé (ou mis en scène), reflog ne vous aidera pas.
VonC
3
@CiprianTomoiaga pour tout type de contenu privé (pas encore ajouté), vous vous fiez uniquement à votre éditeur ou à votre fonctionnalité IDE. Exemple pour eclipse: help.eclipse.org/neon
...
5
Hou la la! Incroyable. J'avais besoin d'extraire un fichier, donc je voulais taper git checkout folders/subfolders/filemais appuyez sur Entrée par accident après avoir folderperdu tout mon travail. / est à 1 cm de l'entrée sur mon clavier et je passe souvent d'une machine à l'autre avec différentes dispositions de clavier, donc il y a souvent 10 à 15 minutes de mes doigts pour s'habituer à de nouvelles positions. Difficile de croire en 2018 que git supprime les fichiers même s'il dit dans le livre git que git fait de son mieux pour ne pas perdre de travail.
gman
1
@gman la réponse ci-dessous sur "l'histoire locale" fournie par un IDE vous aide-t-elle à récupérer votre travail?
VonC le
174

Si vous utilisez un IDE «professionnel», il est fort probable que vous puissiez restaurer des fichiers à partir d'un historique local. Dans Rubymine par exemple, vous pouvez faire un clic droit sur les fichiers et regarder un historique des changements indépendamment des changements de git, m'a sauvé quelques fois maintenant ^^

Christoph Geschwind
la source
37
Pour info, cette fonctionnalité est disponible dans toute la famille JetBrains des IDE "professionnels": Pycharm, IDEA, PHPStorm, Webstorm. J'ai sauvé mon bakken aujourd'hui. Merci, Christoph!
Ben Roberts
6
Je dois te remercier. J'utilise WebStorm et j'ai complètement oublié cette fonctionnalité, même si je l'utilise assez souvent. J'étais tellement rattrapé par la perte de code, je n'y ai pas pensé!
Tyson Phalp
8
Dans eclipse vous pouvez faire un clic droit sur le fichier -> comparer avec -> histoire locale
Maragues
5
superbe. Sublime2 undo a également annulé les modifications apportées par une extraction accidentelle de git sur le disque.
shuckc
8
Si quelqu'un trouve que ce thread a détruit du travail dans XCode, il existe un moyen d'obtenir l'historique de l'enregistrement automatique. XCode lui-même n'a pas d'entrée de menu pour voir l'historique de sauvegarde automatique, mais il le stocke. Si vous ouvrez les fichiers en question dans TextEdit, vous pouvez revenir en arrière et parcourir l'historique de l'enregistrement automatique sous Fichier> Rétablir.
qingu
66

Si vous travaillez dans un éditeur tel que 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 git checkout.

romain-romain
la source
9
Cette réponse a sauvé ma journée. Merci beaucoup!
feyyaz
Je suis tombé sur ce correctif par accident tout à l'heure, et j'étais sur le point de publier une nouvelle réponse. Il semble que Sublime capture Git en modifiant l'état du fichier dans son historique de modification de fichier.
Timmah le
A travaillé pour moi dans Ecipse.
Anomaly
4
A également travaillé pour Visual Studio Code
intotecho
44

Malheureusement, vos modifications sont perdues. Vos modifications privées sont simplement écrasées. Sauf si vous l'avez fait git stashavant de passer à la caisse ...

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

Marcin Gil
la source
26

Vérifiez l'histoire locale dans votre IDE.

Marcin Szymczak
la source
Je viens de faire une erreur de ne pas organiser mes modifications et de forcer un paiement. J'ai vérifié mon historique local dans Android Studio (vue -> modifications récentes) et j'ai annulé les dernières modifications que j'ai apportées. Plus d' infos ici jetbrains.com/help/idea/2016.3/...
emen
Cela fonctionne parfaitement bien dans RubyMine, l'action d'effacer vos modifications sera référencée comme "Changement externe". Merci beaucoup pour ce Marcin, ça m'a sauvé une heure de travail perdu!
AndrewSouthpaw
25

Vous développez sous OS X? Vous utilisez Xcode? Vous aurez probablement de la chance!

Comme décrit dans un commentaire de qungu , OS X maintient un historique des versions enregistrées automatiquement des fichiers, même si vous n'utilisez pas Time Machine .

Donc, si vous avez époustouflé vos changements locaux non mis en scène avec un insouciant git checkout ., voici comment vous pouvez probablement récupérer tout votre travail.

Si quelqu'un trouve que ce thread a détruit du travail dans XCode, il existe un moyen d'obtenir l'historique de l'enregistrement automatique. XCode lui-même n'a pas d'entrée de menu pour voir l'historique de sauvegarde automatique, mais il le stocke. Si vous ouvrez les fichiers en question dans TextEdit, vous pouvez revenir en arrière et parcourir l'historique de l'enregistrement automatique sous Fichier> Rétablir.

Ce qui est génial, et récupéré environ une journée de travail pour moi, hier.


Vous pourriez vous demander: "Pourquoi l'interface de ligne de commande git, le premier VCS utilisé pour l'ingénierie logicielle dans2016 2017 20182019, au moins sauvegarder les fichiers avant de les épater? Comme, vous savez, des outils logiciels bien écrits depuis environ trois décennies. "

Ou peut-être vous demandez-vous: "Pourquoi cette fonctionnalité d'historique de fichiers incroyablement impressionnante est-elle accessible dans TextEdit mais pas Xcode là où j'en ai réellement besoin?"

… Et ces deux éléments, je pense, vous en diront beaucoup sur notre industrie. Ou peut-être irez-vous réparer ces outils. Ce serait super.

Benjohn
la source
2
Je peux confirmer que cela fonctionne. Cela m'a fait économiser des heures de travail!
Bruno Rocha
n'a pas fonctionné pour moi car le fichier concerné était Modelmalheureusement
brahimm
@brahimm le modèle?
Benjohn
1
Cela m'a sauvé une tonne de chagrin d'amour. Merci beaucoup.
squarefrog
1
Très intéressant: j'ai fait un clic droit sur mon fichier source et j'ai regardé le menu "Ouvrir avec". TextEdit 1.14 et TextEdit 1.6 étaient là comme choix. Seul TextEdit 1.14 avait la possibilité de revenir aux anciennes révisions. L'interface utilisateur était très agréable, tout comme TimeMachine.
bugloaf
7

Dans VSCODE ctrl + z (annuler) a fonctionné pour moi

Je l'ai fait à la git checkout .place de git add .et toutes mes modifications de fichiers ont été perdues.

Mais maintenant, en utilisant command + zdans mon mac, j'ai récupéré les modifications et enregistré un ton de travail pour moi.

ishab acharya
la source
y a-t-il un autre moyen de contourner?
Abdul Manan
2

Un sauveur efficace pour ce genre de situation est Time Machine (OS X) ou un système de sauvegarde basé sur le temps similaire. Cela m'a sauvé plusieurs fois parce que je peux revenir en arrière et restaurer un seul fichier.

sscirrus
la source
1
Cher électeur, pourriez-vous s'il vous plaît expliquer comment je pourrais améliorer cette réponse?
sscirrus
1

Je viens de me faire arriver cela, j'ai extrait un dossier entier contenant des heures de travail! Heureusement, j'ai découvert que mon IDE Netbeans conserve un historique de chaque fichier, ce qui m'a permis de récupérer 99% du contenu même si j'avais besoin de réparer quelques choses manuellement.

Pierre-Verthume Larivière
la source
0

Techniquement oui. Mais seulement sur certains cas. Si, par exemple, vous avez la page de code et que vous cliquez sur git checkout, et que vous vous rendez compte que vous avez accidentellement extrait la mauvaise page ou quelque chose. Accédez à la page et cliquez sur Annuler. (pour moi, commande + z), et il reviendra exactement là où vous étiez avant de frapper le bon vieux git checkout.

Cela ne fonctionnera pas si votre page a été fermée et que vous cliquez sur git checkout. Cela ne fonctionne que si la page de codes réelle est ouverte

kdweber89
la source
0

Si vous travaillez avec un terminal / cmd rapide ouvert et utilisé toutes les commandes git qui aurait montrai les changements Unstaged ( diff, add -p, checkout -p, etc.), et n'ont pas fermé le terminal / cmd invite depuis, vous trouverez les changements Unstaged sont toujours disponibles si vous faites défiler jusqu'à l'endroit où vous avez exécuté les commandes git susmentionnées.

chaussure
la source
0

Mec,

disons que vous êtes un gars très chanceux comme moi, retournez dans votre éditeur et faites une annulation (commande + Z pour mac), vous devriez voir votre contenu perdu dans le fichier. J'espère que cela vous a aidé. Bien sûr, cela ne fonctionnera que pour les fichiers existants.

codemania23
la source
-1

Peut-être que vos modifications ne sont pas perdues. Vérifiez "git reflog"

Je cite l'article ci-dessous:

"En gros, chaque action que vous effectuez à l'intérieur de Git où les données sont stockées, vous pouvez les trouver à l'intérieur du reflog. Git essaie vraiment de ne pas perdre vos données, donc si pour une raison quelconque vous pensez que c'est le cas, il y a de fortes chances que vous puissiez les extraire en utilisant git reflog "

Voir les détails:

http://gitready.com/intermediate/2009/02/09/reflog-your-safety-net.html

robertobado
la source
3
N'espérez pas - get reflog n'aide que si vous avez interagi avec git de manière significative. Il suffit d'éditer un fichier, puis de le supprimer via une extraction git? git n'a jamais eu de chance.
Bob Gilmore
1
+1 de moi - Je pense que cela vaut la peine de mentionner git reflogici, j'ai trouvé cette réponse lorsque je cherchais à annuler un git checkout HEAD .- j'avais l'intention de taper git reset HEAD .- je venais de faire un 'git reset --soft HEAD ~ 1' et je ne savais pas à propos de la git reflogalors j'ai pu récupérer le travail que j'avais fait :)
Russell England
1
Malheureusement, git checkout <revision> et git checkout <path> sont deux commandes complètement différentes et sans rapport. Le premier conserve vos changements locaux, le second non.
Lac