Mi problema es que he cambiado un archivo, por ejemplo: README, agregué 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 este commit.
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 el contenido para estar allí. ¿Hay alguna manera de retener el contenido y cancelar mi confirmación local?
git
git-reset
git-commit
Amal Kumar S
fuente
fuente
git revert
, lo que crea una nueva confirmación con la diferencia inversa de la confirmación revertida. El reinicio simplemente apunta su rama actual a una confirmación diferente, en este caso, la anterior a la confirmación que desea "olvidar".git-commit
puede abortar si deja el mensaje en blanco, por lo que si realmente no ha terminado la confirmación, podría ser útil.Respuestas:
Solo use
git reset
sin la--hard
bandera:PD: en los sistemas basados en Unix puedes usar el
HEAD^
cual es igual aHEAD~1
. En WindowsHEAD^
no funcionará porque^
señala una continuación de línea. Entonces su símbolo del sistema simplemente le preguntaráMore?
.fuente
--mixed
en el manual .@^
como abreviaturaHEAD^
.Usar en
--soft
lugar de--hard
bandera:fuente
git reset --soft HEAD^
eliminará último local (unpushed) comprometerse pero mantener los cambios que has hechogit reset --soft HEAD~
en windowsSi está en medio de una confirmación (es decir, en su editor ya), puede cancelarla eliminando todas las líneas sobre la primera
#
. Eso abortará el commit.Por lo tanto, puede eliminar todas las líneas para que el mensaje de confirmación esté vacío, luego guarde el archivo:
Luego recibirá un mensaje que dice
Aborting commit due to empty commit message.
.EDITAR :
También puede eliminar todas las líneas y el resultado será exactamente el mismo.
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 y luegodG
elimine todas las líneas. Finalmente, escriba y salga del archivowq
y su confirmación se cancelará .fuente
rebase -i mybranchname
Lo primero que debe hacer es determinar si desea conservar los cambios locales antes de eliminar el mensaje de confirmación.
Use
git log
para mostrar los mensajes de confirmación actuales, luego encuentre elcommit_id
antes de la confirmación que desea eliminar, no la confirmación que desea eliminar.Si desea conservar los archivos modificados localmente y simplemente eliminar 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 blando y duro
fuente
Puede decirle a Git qué hacer con su índice (conjunto de archivos que se convertirá en el próximo commit) y el directorio de trabajo al realizar el restablecimiento de git utilizando uno de los parámetros:
--soft
: Solo las confirmaciones se restablecerán, mientras que el índice y el directorio de trabajo no se alteran.--mixed
: Esto restablecerá el índice para que coincida con el HEAD, 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 (commits, index, directorio de trabajo) para que coincida con el HEAD.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 obtener una explicación más detallada.fuente
Utilice el siguiente comando:
Después de esto, también puede ver los archivos que se revierten, como la respuesta a continuación.
fuente