Puede git deshacer un pago de archivos sin clasificar

164

Accidentalmente descarto mis cambios en los archivos en mi árbol de trabajo local a través de git checkout. Los archivos no están organizados en este momento. ¿Es posible "deshacer" este pago?

Herr W.
fuente
No, no podemos, pero si está utilizando eclipse, podemos verificar Equipo -> Historial local
USM

Respuestas:

105

Creo que si un archivo se modifica pero aún no se agrega (por etapas), es puramente "privado".
Lo que significa que GIT no puede restaurarlo si se sobrescribe con el índice o la versión HEAD (a menos que tenga una copia de su trabajo actual en alguna parte) ".

Un contenido "privado" es visible solo en su directorio actual, pero no está registrado de ninguna manera en Git.

VonC
fuente
55
Entiendo que git no puede deshacer los cambios en un archivo 'privado'. Sin embargo, si el archivo fue modificado por git (por ejemplo, a través de git checkout --), esperaría que pueda deshacer esa operación, tal vez a través de reflog. ¿Esa es una expectativa incorrecta?
Ciprian Tomoiagă
2
El reflog de @CiprianTomoiaga es para confirmaciones anteriores sin referencia . Si lo que desea restaurar no se confirmó (o se organizó), reflog no lo ayudará.
VonC
3
@CiprianTomoiaga para cualquier tipo de contenido privado (aún no agregado), dependería únicamente de su editor o función IDE. Ejemplo para eclipse: help.eclipse.org/neon/…
VonC
55
¡Guauu! Increíble Necesitaba revisar un archivo, así que tenía la intención de escribir git checkout folders/subfolders/filepero presioné enter por accidente después de llegar foldery perdí todo mi trabajo. / es de 1 cm desde la entrada en mi teclado y cambio entre máquinas con diferentes diseños de teclado a menudo, por lo que a menudo hay 10-15 minutos de mis dedos acostumbrándose a nuevas posiciones. Es difícil de creer en 2018 que git destruya archivos a pesar de que dice en el libro de git que git hace todo lo posible para no perder el trabajo.
gman
1
@gman, ¿la respuesta a continuación sobre "historia local" proporcionada por un IDE le ayuda a recuperar su trabajo?
VonC
173

Si está utilizando un IDE "profesional", es muy probable que pueda restaurar archivos desde un Historial local. En Rubymine, por ejemplo, puede hacer clic con el botón derecho en los archivos y ver un historial de cambios independientemente de los cambios de git, me salvó algunas veces ahora ^^

Christoph Geschwind
fuente
36
Para su información, esta función está disponible en toda la familia de IDE "profesionales" de JetBrains: Pycharm, IDEA, PHPStorm, Webstorm. Salvé mi bakken hoy. Gracias Christoph!
Ben Roberts
66
Tengo que agradecerte Uso WebStorm y olvidé por completo esa característica, aunque la uso con bastante frecuencia. Estaba tan atrapado por la pérdida de código, ¡no lo pensé!
Tyson Phalp
8
En eclipse puede hacer clic derecho en el archivo -> comparar con -> historia local
Maragues
55
magnífico. Sublime2 deshacer también revierte los cambios realizados por el pago accidental de git en el disco.
shuckc
8
Si alguien encuentra que este hilo ha destruido algo de trabajo en XCode, hay una manera de obtener el historial de AutoSave. XCode en sí no tiene una entrada de menú para ver el historial de Autoguardado, pero lo almacena. Si abre los archivos en cuestión en TextEdit, puede revertir y mirar a través del historial de Autoguardado en Archivo> Revertir.
qingu
66

Si está trabajando en un editor como Sublime Text, y aún tiene el archivo en cuestión abierto, puede presionar ctrl + z, y volverá al estado que tenía antes del pago de git.

romano-romano
fuente
9
Esta respuesta me salvó el día. ¡Muchas gracias!
feyyaz
Encontré esta solución por accidente justo ahora, y estaba a punto de publicar una nueva respuesta. Parece que Sublime captura a Git cambiando el estado del archivo en su historial de modificación de archivos.
Timmah
Trabajó para mí en Ecipse.
Anomalía
44
También funcionó para Visual Studio Code
intotecho
44

Lamentablemente sus cambios se pierden. Sus modificaciones privadas simplemente se sobrescriben. A menos que lo haya hecho git stashantes de realizar el pago ...

Tómelo desde el lado positivo: ahora puede implementar las cosas aún mejor;)

Marcin Gil
fuente
26

Verifique el historial local en su IDE.

Marcin Szymczak
fuente
Solo cometí un error de no organizar mis cambios y forcé un pago. Revisé mi historial local en Android Studio (ver -> cambios recientes) y revertí los últimos cambios que hice. Más información aquí jetbrains.com/help/idea/2016.3/…
emen
Esto funciona perfectamente bien en RubyMine, la acción de eliminar los cambios se denominará "Cambio externo". Muchas gracias por este Marcin, ¡me ahorró una hora de trabajo perdido!
AndrewSouthpaw
25

¿Desarrollando en OS X? ¿Usando Xcode? ¡Es probable que tengas suerte!

Como se describe en un comentario de qungu , OS X mantiene un historial de archivos guardado automáticamente, incluso si no está utilizando la máquina del tiempo .

Por lo tanto, si ha eliminado sus cambios locales sin escena con descuido git checkout ., así es como probablemente pueda recuperar todo su trabajo.

Si alguien encuentra que este hilo ha destruido algo de trabajo en XCode, hay una manera de obtener el historial de AutoSave. XCode en sí no tiene una entrada de menú para ver el historial de Autoguardado, pero lo almacena. Si abre los archivos en cuestión en TextEdit, puede revertir y mirar el historial de AutoGuardar en Archivo> Revertir.

Lo cual es asombroso, y ayer me recuperé de un día de trabajo.


Puede preguntar: "¿Por qué la interfaz de usuario de línea de comandos de git no es la principal VCS utilizada para la ingeniería de software en2016 2017 20182019, ¿al menos hacer una copia de seguridad de los archivos antes de eliminarlos? Como, ya sabes, herramientas de software bien escritas durante las últimas tres décadas ".

O tal vez pregunte: "¿Por qué esta característica increíblemente impresionante del historial de archivos es accesible en TextEdit pero no en Xcode donde realmente la necesito?"

... y ambos, creo, le contarán mucho sobre nuestra industria. O tal vez irás a arreglar esas herramientas. Lo cual sería super.

Benjohn
fuente
2
Puedo confirmar que esto funciona. ¡Esto me ahorró horas de trabajo!
Bruno Rocha
no funcionó para mí porque el archivo en cuestión era Modellamentablemente
brahimm
@brahimm el modelo?
Benjohn el
1
Esto me ahorró una tonelada de dolor de corazón. Muchas gracias.
squarefrog
1
Muy interesante: hice clic derecho en mi archivo fuente y miré el menú "Abrir con". Tanto TextEdit 1.14 como TextEdit 1.6 estaban allí como opciones. Solo TextEdit 1.14 tenía la opción de volver a revisiones anteriores. La interfaz de usuario fue muy agradable, al igual que TimeMachine.
bugloaf
7

En VSCODE ctrl + z (deshacer) funcionó para mí

Lo hice en git checkout .lugar de git add .y todos mis cambios de archivo se perdieron.

Pero ahora, usando command + zmi Mac, recuperé los cambios y me guardó un tono de trabajo.

ishab acharya
fuente
¿Hay alguna otra forma de evitarlo?
Abdul Manan
2

Un salvador efectivo para este tipo de situación es Time Machine (OS X) o un sistema de respaldo similar basado en el tiempo. Me salvó un par de veces porque puedo regresar y restaurar solo ese archivo.

sscirrus
fuente
1
Estimado votante, ¿podría explicarme cómo puedo mejorar esta respuesta?
sscirrus
1

Me acaba de pasar eso, ¡revisé una carpeta completa que contiene horas de trabajo! Afortunadamente descubrí que mi IDE Netbeans mantiene un historial de cada archivo, lo que me permitió recuperar el 99% de las cosas a pesar de que necesitaba arreglar algunas cosas manualmente.

Pierre-Verthume Larivière
fuente
0

Técnicamente si. Pero solo en ciertos casos. Si, por ejemplo, tiene la página de códigos abierta y presiona git checkout, y se da cuenta de que accidentalmente revisó la página incorrecta o algo así. Vaya a la página y haga clic en deshacer. (para mí, comando + z), y volverá exactamente a donde estabas antes de llegar a la buena compra de git.

Esto no funcionará si su página se ha cerrado y luego presiona git checkout. Solo funciona si la página de códigos real está abierta

kdweber89
fuente
0

Si se trabaja con un terminal / cmd del sistema abierto, y se utiliza ningún comando git que han mostrado los cambios unstaged ( diff, add -p, checkout -p, etc.), y no han cerrado la terminal / cmd pronta ya que, se encuentran los cambios unstaged todavía están disponibles si se desplaza hacia arriba donde ejecutó los comandos git mencionados anteriormente.

zapato
fuente
0

Tipo,

Digamos que eres un tipo muy afortunado como lo he sido yo, vuelve a tu editor y haz un deshacer (comando + Z para mac), deberías ver tu contenido perdido en el archivo. Espero que te haya ayudado. Por supuesto, esto solo funcionará para los archivos existentes.

codemania23
fuente
-1

Quizás tus cambios no se pierdan. Verifique "git reflog"

Cito el siguiente artículo:

"Básicamente, cada acción que realizas dentro de Git donde se almacenan los datos, puedes encontrarla dentro del registro. Git intenta realmente no perder tus datos, por lo que si por alguna razón crees que sí, es probable que puedas desenterrarlos usando git reflog "

Ver detalles:

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

robertobado
fuente
3
No te hagas ilusiones: obtener reflog solo ayuda si has estado interactuando con git de manera significativa. ¿Solo edita un archivo y luego lo elimina a través de un git checkout? Git nunca tuvo una oportunidad.
Bob Gilmore
1
+1 de mí - Creo que vale la pena mencionar el git reflogaquí, encontré esta respuesta cuando estaba buscando deshacer un git checkout HEAD .- Tenía la intención de escribir git reset HEAD .- Acababa de hacer un 'git reset --soft HEAD ~ 1' y no sabía sobre la git reflogposibilidad de recuperar el trabajo que había hecho :)
Russell England
1
Desafortunadamente, git checkout <revision> y git checkout <path> son dos comandos completamente diferentes y no relacionados. El primero mantiene sus cambios locales, el segundo no.
Lago