Cómo revertir un repositorio Git a una confirmación anterior
¿Cómo puedo revertir de mi estado actual a una instantánea realizada en un determinado commit?
Si hago git log
, entonces obtengo la siguiente salida:
$ git log
commit a867b4af366350be2e7c21b8de9cc6504678a61b`
Author: Me <[email protected]>
Date: Thu Nov 4 18:59:41 2010 -0400
blah blah blah...
commit 25eee4caef46ae64aa08e8ab3f988bc917ee1ce4
Author: Me <[email protected]>
Date: Thu Nov 4 05:13:39 2010 -0400
more blah blah blah...
commit 0766c053c0ea2035e90f504928f8df3c9363b8bd
Author: Me <[email protected]>
Date: Thu Nov 4 00:55:06 2010 -0400
And yet more blah blah...
commit 0d1d7fc32e5a947fbd92ee598033d85bfc445a50
Author: Me <[email protected]>
Date: Wed Nov 3 23:56:08 2010 -0400
Yep, more blah blah.
¿Cómo volver al commit del 3 de noviembre, es decir, commit 0d1d7fc
?
30 answers
Esto depende mucho de lo que quieres decir con "revertir".
Cambia temporalmente a una confirmación diferente
Si quieres volver temporalmente a él, tontear, y luego volver a donde estás, todo lo que tienes que hacer es revisar el commit deseado:
# This will detach your HEAD, that is, leave you with no branch checked out:
git checkout 0d1d7fc32
O si quieres hacer commits mientras estás allí, sigue adelante y crea una nueva rama mientras estás en ella:
git checkout -b old-state 0d1d7fc32
Para volver a donde estabas, simplemente echa un vistazo a la rama en la que estabas de nuevo. (Si ha realizado cambios, como siempre al cambiar de rama, tendrás que lidiar con ellas según corresponda. Podrías resetearlos para tirarlos; podrías guardar, pagar, guardar pop para llevarlos contigo; podrías enviarlos a una rama allí si quieres una rama allí.)
Hard delete confirmaciones no publicadas
Si, por otro lado, realmente quieres deshacerte de todo lo que has hecho desde entonces, hay dos posibilidades. Uno, si no has publicado ninguna de estas confirmaciones, simplemente restablecer:
# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32
# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts, if you've modified things which were
# changed since the commit you reset to.
Si te equivocas, ya has tirado tus cambios locales, pero al menos puedes volver a donde estabas antes restableciéndolos de nuevo.
Deshacer confirmaciones publicadas con nuevas confirmaciones
Por otro lado, si has publicado el trabajo, probablemente no quieras reiniciar la rama, ya que eso es reescribir el historial. En ese caso, podrías revertir las confirmaciones. Con Git, revert tiene un significado muy específico: crear un commit con el parche inverso para cancelarlo. De esta manera no reescribes ninguna historia.
# This will create three separate revert commits:
git revert a867b4af 25eee4ca 0766c053
# It also takes ranges. This will revert the last two commits:
git revert HEAD~2..HEAD
#Similarly, you can revert a range of commits using commit hashes:
git revert a867b4af..0766c053
# Reverting a merge commit
git revert -m 1 <merge_commit_sha>
# To get just one, you could use `rebase -i` to squash them afterwards
# Or, you could do it manually (be sure to do this at top level of the repo)
# get your index and work tree into the desired state, without changing HEAD:
git checkout 0d1d7fc32 .
# Then commit. Be sure and write a good message describing what you just did
git commit
El git-revert
manpage en realidad cubre mucho de esto en su descripción. Otro enlace útil es este git-scm.com sección discutiendo git-revert .
Si decide que no desea revertir después de todo, puede revertir la reversión (como se describe aquí) o restablecer de nuevo a antes de la reversión (consulte la sección anterior).
También puede encontrar esta respuesta útil en este caso:
Cómo mover ¿Volver a una ubicación anterior? (Cabeza separada)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-04 17:54:07
Revirtiendo la Copia de Trabajo a la Confirmación Más Reciente
Para volver a un commit anterior, ignorando cualquier cambio:
git reset --hard HEAD
Donde HEAD es la última confirmación en tu rama actual
Revirtiendo la Copia de Trabajo a una Confirmación Anterior
Para volver a un commit que es más antiguo que el commit más reciente:
# Resets index to former commit; replace '56e05fced' with your commit code
git reset 56e05fced
# Moves pointer back to previous HEAD
git reset --soft HEAD@{1}
git commit -m "Revert to 56e05fced"
# Updates working copy to reflect the new commit
git reset --hard
Los créditos van a una pregunta de desbordamiento de pila similar, ¿Revertir a un commit mediante un hash SHA en Git?.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:27
Muchas respuestas complicadas y peligrosas aquí, pero en realidad es fácil:
git revert --no-commit 0766c053..HEAD
git commit
Esto revertirá todo desde el HEAD back hasta el hash commit, lo que significa que recreará ese estado de commit en el árbol de trabajo como si cada commit desde entonces hubiera sido devuelto. Luego puede confirmar el árbol actual, y creará un nuevo commit esencialmente equivalente al commit al que" revirtió".
(La bandera --no-commit
permite a git revertir todas las confirmaciones a la vez, de lo contrario se te pedirá un mensaje para cada confirmación en el rango, llenando tu historial con nuevas confirmaciones innecesarias.)
Esta es una manera segura y fácil de revertir a un estado anterior. Ningún historial es destruido, por lo que puede ser usado para commits que ya han sido hechos públicos.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-28 20:12:34
La mejor opción para mí y probablemente para otros es la opción Git reset:
git reset --hard <commidId> && git clean -f
Esta ha sido la mejor opción para mí! ¡Es simple, rápido y efectivo!
Nota : Como se mencionó en los comentarios, no hagas esto si estás compartiendo tu rama con otras personas que tienen copias de las confirmaciones antiguas
También de los comentarios, si querías un método menos 'ballzy' podrías usar
git clean -i
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-16 15:31:10
Antes de responder vamos a añadir algunos antecedentes, explicando lo que esto HEAD
es.
First of all what is HEAD?
HEAD
es simplemente una referencia al commit actual (latest) en la rama actual. Solo puede haber un único HEAD
en un momento dado (excluyendo git worktree
).
El contenido de HEAD
se almacena dentro de .git/HEAD
, y contiene los 40 bytes SHA-1 de la confirmación actual.
detached HEAD
Si usted no está en el última confirmación-lo que significa que HEAD
está apuntando a una confirmación anterior en la historia a la que se llama detached HEAD
.
En la línea de comandos se verá como this-SHA-1 en lugar del nombre de la rama ya que el HEAD
no está apuntando a la punta de la rama actual:
Algunas opciones sobre cómo recuperarse de una CABEZA separada:
git checkout
git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back
Esto se realizará nueva rama que apunta a la confirmación deseada. Este comando descargará a un commit dado.
En este punto puede crear una rama y comenzar a trabajar a partir de este punto:
# Checkout a given commit.
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>
# Create a new branch forked to the given commit
git checkout -b <branch name>
git reflog
Siempre puedes usar el reflog
también. git reflog
mostrará cualquier cambio que actualice el HEAD
y al revisar la entrada de reflog deseada, el HEAD
volverá a esta confirmación.
Cada vez que se modifique la CABEZA habrá una nueva entrada en el reflog
git reflog
git checkout HEAD@{...}
Esto te devolverá a tu confirmación deseada
git reset HEAD --hard <commit_id>
"Mueve" tu cabeza hacia atrás a la confirmación deseada.
# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32
# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts, if you've modified things which were
# changed since the commit you reset to.
- Nota: (Desde Git 2.7) también puedes usar
git rebase --no-autostash
.
Este esquema ilustra qué comando hace qué. Como se puede ver allí reset && checkout
modificar el HEAD
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-04 19:25:17
Si desea "descomit", borrar el último mensaje de confirmación y volver a poner los archivos modificados en staging, usaría el comando:
git reset --soft HEAD~1
-
--soft
indica que los archivos no comprometidos deben conservarse como archivos de trabajo en lugar de--hard
que los descartaría. -
HEAD~1
es la última confirmación. Si quieres revertir 3 confirmaciones puedes usarHEAD~3
. Si desea revertir a un número de revisión específico, también podría hacerlo usando su hash SHA.
Esto es un comando extremadamente útil en situaciones en las que has cometido algo incorrecto y quieres deshacer ese último commit.
Fuente: http://nakkaya.com/2009/09/24/git-delete-last-commit/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-04 17:25:52
He intentado muchas maneras de revertir los cambios locales en Git, y parece que esto funciona mejor si solo desea revertir al último estado de confirmación.
git add . && git checkout master -f
Breve descripción:
- NO creará ninguna confirmación como lo hace
git revert
. - NO te separará la CABEZA como lo hace
git checkout <commithashcode>
. - Anulará todos sus cambios locales y ELIMINARÁ todos los archivos agregados desde la última confirmación en la rama.
- Solo funciona con nombres de ramas, por lo que puede revertir solo a la última confirmación en la rama de esta manera.
Encontré una manera mucho más conveniente y sencilla de lograr los resultados anteriores:
git add . && git reset --hard HEAD
Donde HEAD apunta a la última confirmación en tu rama actual.
Es el mismo código que sugirió boulder_ruby, pero he agregado git add .
antes de git reset --hard HEAD
para borrar todos los archivos nuevos creados desde la última confirmación, ya que esto es lo que la mayoría de la gente espera, creo cuando revierte a la última confirmación.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-24 20:08:20
Puede hacer esto mediante los siguientes dos comandos:
git reset --hard [previous Commit SHA id here]
git push origin [branch Name] -f
Eliminará tu confirmación de Git anterior.
Si desea mantener sus cambios, también puede usar:
git reset --soft [previous Commit SHA id here]
Entonces guardará sus cambios.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-03 06:30:27
Digamos que tienes las siguientes confirmaciones en un archivo de texto llamado ~/commits-to-revert.txt
(Usé git log --pretty=oneline
para obtenerlas)
fe60adeba6436ed8f4cc5f5c0b20df7ac9d93219
0c27ecfdab3cbb08a448659aa61764ad80533a1b
f85007f35a23a7f29fa14b3b47c8b2ef3803d542
e9ec660ba9c06317888f901e3a5ad833d4963283
6a80768d44ccc2107ce410c4e28c7147b382cd8f
9cf6c21f5adfac3732c76c1194bbe6a330fb83e3
fff2336bf8690fbfb2b4890a96549dc58bf548a5
1f7082f3f52880cb49bc37c40531fc478823b4f5
e9b317d36a9d1db88bd34831a32de327244df36a
f6ea0e7208cf22fba17952fb162a01afb26de806
137a681351037a2204f088a8d8f0db6e1f9179ca
Crea un script de shell Bash para revertir cada uno de ellos:
#!/bin/bash
cd /path/to/working/copy
for i in `cat ~/commits-to-revert.txt`
do
git revert $i --no-commit
done
Esto devuelve todo al estado anterior, incluidas las creaciones de archivos y directorios, y las eliminaciones, lo confirma en su rama y conserva el historial, pero lo hace volver a la misma estructura de archivos. Por qué Git no tiene un git revert --to <hash>
está más allá de mí.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-29 00:13:03
Alternativas adicionales a las Soluciones de Jefromi
Las soluciones de Jefromi son definitivamente las mejores, y definitivamente deberías usarlas. Sin embargo, en aras de la integridad, también quería mostrar estas otras soluciones alternativas que también se pueden usar para revertir un commit (en el sentido de que crea un nuevo commit que deshace los cambios en el commit anterior, al igual que lo hace git revert
).
Para ser claros, estas alternativas no son la mejor manera de revertir confirmaciones, Las soluciones de Jefromi son, pero solo quiero señalar que también puedes usar estos otros métodos para lograr lo mismo que git revert
.
Alternativa 1: Reinicios duros y blandos
Esta es una versión muy ligeramente modificada de la solución de Charles Bailey para Revertir a un commit por un hash SHA en Git?:
# Reset the index to the desired commit
git reset --hard <commit>
# Move the branch pointer back to the previous HEAD
git reset --soft HEAD@{1}
# Commit the changes
git commit -m "Revert to <commit>"
Esto básicamente funciona utilizando el hecho de que los reseteos suaves dejarán el estado de la confirmación anterior en el estado index / staging-área, que luego puede confirmar.
Alternativa 2: Eliminar el Árbol Actual y Reemplazarlo por el Nuevo
Esta solución viene de la solución de svick para Checkout old commit y hacer que sea una nueva confirmación :
git rm -r .
git checkout <commit> .
git commit
De manera similar a la alternativa #1, esto reproduce el estado de <commit>
en la copia de trabajo actual. Es necesario hacer git rm
primero porque git checkout
no eliminará los archivos que se han agregado desde <commit>
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:32
Aquí hay una mucho más simple manera de volver a un commit anterior (y tenerlo en un estado no comprometido, para hacer con él lo que quieras):
git reset HEAD~1
Por lo tanto, no hay necesidad de identificadores de confirmación y así sucesivamente:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-03 10:56:38
OK, volver a la confirmación anterior en git es bastante fácil...
Revertir sin mantener los cambios:
git reset --hard <commit>
Revertir manteniendo los cambios:
git reset --soft <commit>
Explain: usando git reset, puedes restablecer a un estado específico, es común usarlo con un hash de confirmación como ves arriba.
Pero como ves la diferencia es usar las dos banderas --soft
y --hard
, por defecto git reset
usando --soft
bandera, pero es una buena práctica siempre usando la bandera, explico cada bandera:
Soft suave
La bandera predeterminada como se ha explicado, no es necesario proporcionarla, no cambia el árbol de trabajo, sino que agrega todos los archivos de cambios listos para confirmar, por lo que vuelve al estado de confirmación, que los cambios en los archivos no se editan.
Hard duro
Tenga cuidado con esta bandera, se restablece el árbol de trabajo y todos los cambios a los archivos rastreados y todo se habrá ido!
También he creado la imagen de abajo que puede suceder en una vida real trabajando con git:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-02 13:41:55
Asumiendo que estás hablando de master y en esa rama respectiva (dicho esto, esta podría ser cualquier rama de trabajo que te interese):
# Revert local master branch to November 3rd commit ID
git reset --hard 0d1d7fc32e5a947fbd92ee598033d85bfc445a50
# Revert remote master branch to November 3rd commit ID
git push -f origin 0d1d7fc32e5a947fbd92ee598033d85bfc445a50:master
Encontré la respuesta en la entrada del blogEliminar repositorio Git remoto a confirmación específica.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-03 10:58:59
Nada aquí funcionó para mí aparte de esta combinación exacta:
git reset --hard <commit_hash>
git push origin <branch_name> --force
La clave aquí es forzar el push, no hay confirmaciones adicionales / mensajes de confirmación, etc.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-23 01:47:59
Después de todos los cambios, cuando presione todos estos comandos, puede que tenga que usar:
git push -f ...
Y no solo git push
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-28 19:07:07
Hay un comando (no es parte del núcleo de Git, pero está en el paquete git-extras) específicamente para revertir y organizar confirmaciones antiguas:
git back
Según la página de manual de , también se puede usar como tal:
# Remove the latest three commits
git back 3
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-28 20:19:45
Seleccione su confirmación requerida, y compruébela por
git show HEAD
git show HEAD~1
git show HEAD~2
Hasta que obtengas la confirmación requerida. Para hacer el punto PRINCIPAL a eso, haga
git reset --hard HEAD~1
O git reset --hard HEAD~2
o lo que sea.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-28 19:51:32
Volver a más reciente confirmar e ignorar todos los cambios locales:
git reset --hard HEAD
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-04 19:28:44
Para mantener los cambios de la confirmación anterior a HEAD y pasar a la confirmación anterior, haga:
git reset <SHA>
Si no se requieren cambios de la confirmación anterior a HEAD y simplemente descartar todos los cambios, haga:
git reset --hard <SHA>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-03 10:21:53
Para limpiar completamente el directorio de un codificador de algunos cambios accidentales, usamos:
git add -A .
git reset --hard HEAD
Solo git reset --hard HEAD
se deshará de las modificaciones, pero no se deshará de los archivos "nuevos". En su caso, habían arrastrado accidentalmente una carpeta importante a algún lugar aleatorio, y todos esos archivos estaban siendo tratados como nuevos por Git, por lo que un reset --hard
no lo arregló. Al ejecutar el git add -A .
de antemano, los rastreó explícitamente con git, para ser eliminados por el reinicio.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-03 10:55:25
Esta es una forma más de restablecer directamente a una confirmación reciente
git stash
git stash clear
Borra directamente todos los cambios que has estado haciendo desde la última confirmación.
PD: Tiene un pequeño problema; también elimina todos los cambios de alijo almacenados recientemente. Lo que supongo que en la mayoría de los casos no debería importar.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-03 10:57:18
Creo que algunas personas pueden llegar a esta pregunta queriendo saber cómo revertir los cambios confirmados que han hecho en su maestro, es decir, tirar todo y volver a origin / master, en cuyo caso, haga esto:
git reset --hard origin/master
Https://superuser.com/questions/273172/how-to-reset-master-to-origin-master
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-20 10:18:20
Puedes completar todos estos pasos iniciales tú mismo y volver a git repo.
Extraiga la última versión de su repositorio de Bitbucket utilizando el
git pull --all
comando.-
Ejecute el comando git log con-n 4 desde su terminal. El número después de-n determina el número de confirmaciones en el registro a partir de la confirmación más reciente en su historial local.
$ git log -n 4
-
Restablece la cabecera del historial de tu repositorio usando
git reset --hard HEAD~N
donde N es el número de confirmaciones que desea recuperar la cabeza. En el ejemplo siguiente la cabeza sería puesta detrás uno commit, hasta el último commit en el historial del repositorio: Empuje el cambio a git repo usando
git push --force
para forzar el empuje cambio.
Si quieres que el repositorio git sea un commit anterior
git pull --all
git reset --hard HEAD~1
git push --force
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-05 20:56:59
Revert es el comando para revertir las confirmaciones.
git revert <commit1> <commit2>
Muestra:
git revert 2h3h23233
Es capaz de tomar distancia desde la CABEZA como abajo. Aquí 1 dice " revertir la última confirmación."
git revert HEAD~1..HEAD
Y luego hacer git push
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-27 06:05:57
Si la situación es urgente , y solo desea hacer lo que el interlocutor pidió de una manera rápida y sucia , asumiendo que su proyecto está bajo el directorio "mi proyecto":
-
Copie todo el directorio y llámelo de otra manera, como "mi proyecto - copy"
-
Do:
git reset --hard [first-4-letters&numbers-of-commit's-SHA]
Entonces tiene dos versiones en su sistema... puede examinar o copiar o modificar archivos de interés, o lo que sea, de la confirmación anterior. Puedes deseche completamente los archivos bajo "mi proyecto-copiar", si ha decidido que el nuevo trabajo no iba a ninguna parte...
Lo obvio si desea continuar con el estado del proyecto sin descartar realmente el trabajo desde este commit recuperado es cambiar el nombre de su directorio de nuevo: Elimine el proyecto que contiene el commit recuperado (o darle un nombre temporal) y cambie el nombre de su directorio "mi proyecto - copiar" a "mi proyecto". Entonces probablemente hacer otro commit bastante pronto.
Git es una creación brillante, pero no se puede simplemente "recogerlo sobre la marcha": también las personas que tratan de explicarlo con demasiada frecuencia asumen el conocimiento previo de otros VCS [Sistemas de Control de Versiones] y profundizan demasiado, demasiado pronto, y cometen otros delitos, como el uso de términos intercambiables para "checking out", de maneras que a veces parecen casi calculadas para confundir a un principiante.
Para ahorrarte mucho estrés tienes que leer un libro sobre Git-I'd recomienda "Control de versiones con Git". Y si puedes confiar en mí (o más bien en mis cicatrices) cuando digo "tengo que", se deduce que también podrías hacerlo AHORA. Gran parte de la complejidad de Git proviene de la ramificación y luego la refundición. Pero de tu pregunta no hay ninguna razón por la cual la gente debería cegarte con la ciencia.
Especialmente si, por ejemplo, esta es una situación desesperada y eres un novato con Git!
PS: otro pensamiento: es (ahora) en realidad es bastante simple mantener el repositorio Git ("repo") en un directorio que no sea el que tiene los archivos de trabajo. Esto significaría que no tendría que copiar todo el repositorio Git utilizando la solución quick & dirty anterior. Vea la respuesta de Fryer usando separate separate-git-dir aquí. Tenga en cuenta, sin embargo: Si tiene un repositorio "separate-directory" que no copia, y hace un reinicio completo, todas las versiones posteriores a la confirmación de reinicio se perderán para siempre, a menos que tener, como es absolutamente necesario, una copia de seguridad regular de su repositorio, preferiblemente en la nube (por ejemplo, Google Drive), entre otros lugares.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:55:13
Intente restablecer la confirmación deseada -
git reset <COMMIT_ID>
(para comprobar COMMIT_ID use git log
)
Esto restablecerá todos los archivos cambiados al estado no agregado.
Ahora puede checkout
todos los archivos sin agregar por
git checkout .
Marque git log
para verificar sus cambios.
UPDATE
Si tienes uno y solo commit en tu repositorio, prueba
git update-ref -d HEAD
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-17 10:02:40
Como tus commits se envían de forma remota, necesitas eliminarlos. Déjame asumir que tu rama es develop y es empujada sobre origin.
Primero debe eliminar el desarrollo del origen:
git push origin :develop (note the colon)
Entonces necesitas obtener el estado de desarrollo que deseas, déjame asumir que el hash de confirmación es EFGHIJK:
git reset --hard EFGHIJK
Por último, empuje desarrollar de nuevo:
git push origin develop
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-19 07:18:34
Si quieres corregir algún error en la última confirmación, una buena alternativa sería usar el comando git commit amend amend. Si el último commit no es apuntado por ninguna referencia, esto hará el truco, ya que crea un commit con el mismo padre que el último commit. Si no hay referencia a la última confirmación, simplemente será descartada y esta confirmación será la última confirmación. Esta es una buena manera de corregir commits sin revertir commits. Sin embargo tiene sus propias limitaciones.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-01 11:35:54
Precaución! Este comando puede causar la pérdida del historial de confirmaciones, si el usuario pone la confirmación incorrecta por error. Siempre tener una copia de seguridad adicional de su git algunos ¿dónde más por si acaso si haces errores, que estás un poco más seguro. :)
He tenido un problema similar y quería volver a la confirmación anterior. En mi caso yo no estaba intetessered para mantener nuevos commit por lo tanto usé Hard
.
Así es como lo hice:
git reset --hard CommitId && git clean -f
Esto revertirá en el repositorio local, aquí después de usar git push -f
actualizará el repositorio remoto.
git push -f
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-02 13:51:57
Primero, obtenga la cadena que identifica la confirmación en alguna fecha, haciendo:
git rev-list -n 1 --before="2009-07-27 13:37" origin/master
Imprime el identificador de confirmación, toma la cadena (por ejemplo XXXX) y haz:
git checkout XXXX
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-01 16:45:37