Cómo cancelar una confirmación de git local


Mi problema es que he cambiado un archivo, por ejemplo: README, agregado una nueva línea ' esto para mi línea de prueba ' y guardado el archivo, luego emití los siguientes comandos

 git status

 # On branch master
 # Changed but not updated:
 #   (use "git add <file>..." to update what will be committed)
 #   (use "git checkout -- <file>..." to discard changes in working directory)
 #
 #  modified:   README
 #
 no changes added to commit (use "git add" and/or "git commit -a")


 git add README

 git commit -a -m 'To add new line to readme'

No envié el código a github, ahora quiero cancelar esta confirmación.

Para esto usé

   git reset --hard HEAD~1

Pero perdí la línea recién agregada ' esto para mi línea de prueba' del archivo README. Esto no debería suceder. Necesito que el contenido esté ahí. ¿Hay una manera de retener el contenido y cancelar ¿mi compromiso local?

Author: Amal Kumar S, 2011-01-31

6 answers

Simplemente use git reset sin la bandera --hard:

git reset HEAD~1

PD: En sistemas basados en Unix se puede usar HEAD^ que es igual a HEAD~1. En Windows HEAD^ no funcionará porque ^ indica una continuación de línea. Así que su símbolo del sistema solo le preguntará More?.

 1001
Author: Koraktor,
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-10 18:42:23

Use --soft en lugar de --hard bandera:

git reset --soft HEAD^
 129
Author: TpED,
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
2012-08-10 09:24:58

Si estás en medio de un commit (es decir, en tu editor ya), puedes cancelarlo borrando todas las líneas por encima del primer #. Eso abortará la comisión.

Así que puede eliminar todas las líneas para que el mensaje de confirmación esté vacío, luego guarde el archivo:

Debería verse así.

Entonces recibirás un mensaje que dice Aborting commit due to empty commit message..

 22
Author: inostia,
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-06-20 19:59:37

Puedes decirle a Git qué hacer con tu índice (conjunto de archivos que se convertirán en el próximo commit) y directorio de trabajo cuando realices git reset usando uno de los parámetros:

--soft: Solo las confirmaciones se resetearán, mientras que Index y el directorio de trabajo no se alterarán.

--mixed: Esto restablecerá el índice para que coincida con la CABEZA, mientras que el directorio de trabajo no se tocará. Todos los cambios permanecerán en el directorio de trabajo y aparecerán como modificados.

--hard: Se restablece todo (confirmaciones, índice, directorio de trabajo) para que coincida con la CABEZA.

En su caso, usaría git reset --soft para mantener sus cambios modificados en el Índice y el directorio de trabajo. Asegúrese de revisar esto para una explicación más detallada.

 3
Author: Nesha Zoric,
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-05-29 10:22:42

Usar el comando debajo: HEAD git reset HEAD~1 Después de esto, también puede ver los archivos que revertirán como la respuesta a continuación.

Cambios no escalonados después del restablecimiento: M application / config / config.php M aplicación / configuración / base de datos.php

 1
Author: Omkar,
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-05-14 13:25:38

Lo primero que debe hacer es justificar si desea mantener los cambios locales antes de eliminar el mensaje de confirmación.

Use git log para mostrar los mensajes de confirmación actuales, luego busque el commit_id antes de que desee eliminar, no solo el que desea eliminar.

Si desea mantener los archivos modificados localmente, simplemente elimine el mensaje de confirmación:

git reset --soft commit_id

Si desea eliminar todos los archivos modificados localmente y el mensaje de confirmación:

git reset --hard commit_id

Esa es la diferencia de suave y duro

 0
Author: mistdon,
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-09-12 03:04:24