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?
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.
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 ^^
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.
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;)
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 dans2016201720182019, 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.
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.
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.
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.
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
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.
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.
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 "
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.
Réponses:
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.
la source
git checkout --
), je m'attendrais à ce qu'il puisse annuler cette opération, peut-être via lereflog
. Est-ce une mauvaise attente?git checkout folders/subfolders/file
mais appuyez sur Entrée par accident après avoirfolder
perdu 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.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 ^^
la source
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.
la source
Malheureusement, vos modifications sont perdues. Vos modifications privées sont simplement écrasées. Sauf si vous l'avez fait
git stash
avant de passer à la caisse ...Prenez-le du bon côté: vous pouvez maintenant mettre en œuvre les choses encore mieux;)
la source
Vérifiez l'histoire locale dans votre IDE.
la source
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.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 dans
2016201720182019, 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.
la source
Model
malheureusementDans VSCODE ctrl + z (annuler) a fonctionné pour moi
Je l'ai fait à la
git checkout .
place degit add .
et toutes mes modifications de fichiers ont été perdues.Mais maintenant, en utilisant
command + z
dans mon mac, j'ai récupéré les modifications et enregistré un ton de travail pour moi.la source
Au cas où vous auriez déjà caché les modifications plus tôt (par exemple, avant le rebasage), cela vous aidera probablement
Comment récupérer une cachette abandonnée dans Git?
même si vous avez déjà «caché» les modifications.
la source
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.
la source
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.
la source
J'ai normalement tout mon travail dans un dossier Dropbox. Cela m'assure que le dossier actuel serait disponible en dehors de ma machine locale et de Github. Je pense que c'est mon autre étape pour garantir un "contrôle de version" autre que git. Vous pouvez suivre ceci afin de restaurer votre fichier aux versions précédentes de vos fichiers dropbox
J'espère que cela t'aides.
la source
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
la source
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.la source
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.
la source
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
la source
git reflog
ici, j'ai trouvé cette réponse lorsque je cherchais à annuler ungit checkout HEAD .
- j'avais l'intention de tapergit reset HEAD .
- je venais de faire un 'git reset --soft HEAD ~ 1' et je ne savais pas à propos de lagit reflog
alors j'ai pu récupérer le travail que j'avais fait :)