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?
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.
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 ^^
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.
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;)
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 en2016201720182019, ¿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.
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.
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.
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.
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
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.
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.
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 "
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.
Respuestas:
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.
fuente
git checkout --
), esperaría que pueda deshacer esa operación, tal vez a través dereflog
. ¿Esa es una expectativa incorrecta?git checkout folders/subfolders/file
pero presioné enter por accidente después de llegarfolder
y 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.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 ^^
fuente
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.
fuente
Lamentablemente sus cambios se pierden. Sus modificaciones privadas simplemente se sobrescriben. A menos que lo haya hecho
git stash
antes de realizar el pago ...Tómelo desde el lado positivo: ahora puede implementar las cosas aún mejor;)
fuente
Verifique el historial local en su IDE.
fuente
¿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.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 en
2016201720182019, ¿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.
fuente
Model
lamentablementeEn VSCODE ctrl + z (deshacer) funcionó para mí
Lo hice en
git checkout .
lugar degit add .
y todos mis cambios de archivo se perdieron.Pero ahora, usando
command + z
mi Mac, recuperé los cambios y me guardó un tono de trabajo.fuente
En caso de que haya ocultado los cambios antes (por ejemplo, antes de volver a crear una nueva versión), esto probablemente ayudará
¿Cómo recuperar un alijo caído en Git?
incluso si ya has 'escondido' los cambios.
fuente
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.
fuente
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.
fuente
Normalmente tengo todo mi trabajo en una carpeta de Dropbox. Esto me asegura que tendría la carpeta actual disponible fuera de mi máquina local y Github. Creo que es mi otro paso para garantizar un "control de versiones" que no sea git. Puede seguir esto para revertir su archivo a versiones anteriores de sus archivos de Dropbox
Espero que esto ayude.
fuente
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
fuente
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.fuente
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.
fuente
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
fuente
git reflog
aquí, encontré esta respuesta cuando estaba buscando deshacer ungit checkout HEAD .
- Tenía la intención de escribirgit reset HEAD .
- Acababa de hacer un 'git reset --soft HEAD ~ 1' y no sabía sobre lagit reflog
posibilidad de recuperar el trabajo que había hecho :)