Cómo cancelar un compromiso de git local
-
27-10-2019 - |
Pregunta
Mi problema es que he cambiado un archivo, por ejemplo:README, agregó una nueva línea 'esto para mi línea de prueba' y guardé 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 utilicé
git reset --hard HEAD~1
Pero perdí la línea recién agregada 'esto para mi línea de prueba' del archivo LÉAME.Esto no debería suceder.Necesito que el contenido esté ahí. ¿Existe alguna forma de conservar el contenido y cancelar mi confirmación local?
Solución
Solo usa git reset
sin el --hard
bandera:
git reset HEAD~1
PD:En sistemas basados en Unix puedes usar HEAD^
que es igual a HEAD~1
.En Windows HEAD^
no funcionará porque ^
señala una continuación de línea.Entonces tu símbolo del sistema solo te preguntará More?
.
Otros consejos
Usar --soft
en vez de --hard
bandera:
git reset --soft HEAD^
Si está en medio de un compromiso (es decir, en su editor ya), puede cancelarlo eliminando todas las líneas por encima de la primera #
. Que abortarán el compromiso.
Para que pueda eliminar todas las líneas para que el mensaje de confirmación esté vacío, luego guarde el archivo:
Entonces recibirás un mensaje que diga Aborting commit due to empty commit message.
.
EDITAR:
También puedes eliminar todos Las líneas y el resultado serán exactamente los mismos.
Para eliminar todas las líneas en VIM (si ese es su editor predeterminado), una vez que esté en el editor, escriba gg
para ir a la primera línea, luego dG
para eliminar todas las líneas. Finalmente, escriba y deja el archivo con wq
y tu compromiso será abortado.
Lo primero que debe hacer es determinar si desea mantener los cambios locales antes de eliminar el mensaje de confirmación.
Usar git log
Para mostrar los mensajes actuales de confirmación, luego encuentre el commit_id
antes de El compromiso que desea eliminar, no el compromiso que desea eliminar.
Si desea mantener los archivos cambiados localmente y simplemente elimine el mensaje de confirmación:
git reset --soft commit_id
Si desea eliminar todos los archivos cambiados localmente y el mensaje de confirmación:
git reset --hard commit_id
Esa es la diferencia de suave y difícil
Puede decirle a GIT qué hacer con su índice (conjunto de archivos que se convertirán en el próximo directorio de confirmación) y de trabajo al realizar el reinicio de Git utilizando uno de los parámetros:
--soft
: Solo se restablecerán las confirmaciones, mientras que el índice y el directorio de trabajo no están alterados.
--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
: Restablece todo (compromiso, índice, directorio de trabajo) para que coincida con la cabeza.
En tu caso, usaría git reset --soft
Para mantener sus cambios modificados en el índice y el directorio de trabajo. Asegúrese de comprobar esto afuera para una explicación más detallada.
Use el comando a continuación: $ Git RESET Head ~ 1 Después de esto, también puede ver los archivos lo que vuelve a la respuesta a continuación.
Cambios sin escenificar después de restablecer: M Application/config/config.php m Application/config/database.php