Git: eliminar el archivo comprometido después de la inserción
113
¿Existe la posibilidad de revertir un archivo comprometido en Git? Envié una confirmación en GitHub y luego me di cuenta de que hay un archivo que no quería que se enviara (no he terminado los cambios).
verifique el estado anterior (sin cambios) de su archivo; nota el guión doble
git checkout HEAD^ -- /path/to/file
cometerlo:
git commit -am "revert changes on this file, not finished with it yet"
empujarlo, no se necesita fuerza:
git push
vuelve a tu trabajo inconcluso, hazlo de nuevo (flecha 3 veces hacia arriba)
git checkout HEAD^ -- /path/to/file
efectivamente 'sin compromiso':
Para modificar la última confirmación del repositorio HEAD, ofuscando su trabajo accidentalmente empujado, mientras potencialmente se enfrenta a un conflicto con su colega que ya puede haberlo retirado, y que crecerá el cabello gris y perderá mucho tiempo tratando de reconciliar su jefe de sucursal local con el central:
Para eliminar el cambio de archivo de la última confirmación:
para revertir el archivo al estado anterior a la última confirmación, haga lo siguiente:
git checkout HEAD^ /path/to/file
para actualizar la última confirmación con el archivo revertido, haga:
git commit --amend
para enviar la confirmación actualizada al repositorio, haga lo siguiente:
git push -f
Realmente, considere usar el método preferido mencionado anteriormente.
A menos que sea el único desarrollador en un proyecto, realmente no debería usar git push -f. Crea muchos más problemas de los que vale. Simplemente elimine el archivo y luego realice una nueva confirmación.
Richardm
1
@ user553086 no podría estar más de acuerdo. ¿Mejor ahora?
xor
¿Es esto factible con confirmaciones más atrás en la historia? Por ejemplo, ¿podría hacer esto con git checkout HEAD~2 /path/to/file? Editar: Parece que lo que quería en mi caso era simplementegit rm /path/to/file
starscream_disco_party
1
¡Me acabas de salvar 4 horas, hermano!
Tosin Onikute
58
Si desea eliminar el archivo del repositorio remoto, primero elimínelo de su proyecto con la opción --cache y luego empújelo:
(Esto funciona incluso si el archivo se agregó al repositorio remoto hace algunas confirmaciones) Recuerde agregar a .gitignore las extensiones de archivo que no desea enviar.
Restablezca el archivo en un estado correcto, confirme y vuelva a presionar.
Si está seguro de que nadie más ha obtenido sus cambios todavía, puede usarlos --amendal confirmar, para modificar su compromiso anterior (es decir, reescribir el historial) y luego presionar. Sin -fembargo, creo que tendrás que usar la opción al empujar, para forzar el empuje.
Respuestas:
actualización: método más seguro agregado
metodo preferido:
verifique el estado anterior (sin cambios) de su archivo; nota el guión doble
cometerlo:
empujarlo, no se necesita fuerza:
vuelve a tu trabajo inconcluso, hazlo de nuevo (flecha 3 veces hacia arriba)
efectivamente 'sin compromiso':
Para modificar la última confirmación del repositorio HEAD, ofuscando su trabajo accidentalmente empujado, mientras potencialmente se enfrenta a un conflicto con su colega que ya puede haberlo retirado, y que crecerá el cabello gris y perderá mucho tiempo tratando de reconciliar su jefe de sucursal local con el central:
Para eliminar el cambio de archivo de la última confirmación:
para revertir el archivo al estado anterior a la última confirmación, haga lo siguiente:
para actualizar la última confirmación con el archivo revertido, haga:
para enviar la confirmación actualizada al repositorio, haga lo siguiente:
Realmente, considere usar el método preferido mencionado anteriormente.
fuente
git checkout HEAD~2 /path/to/file
? Editar: Parece que lo que quería en mi caso era simplementegit rm /path/to/file
Si desea eliminar el archivo del repositorio remoto, primero elimínelo de su proyecto con la opción --cache y luego empújelo:
(Esto funciona incluso si el archivo se agregó al repositorio remoto hace algunas confirmaciones) Recuerde agregar a .gitignore las extensiones de archivo que no desea enviar.
fuente
Puede revertir solo un archivo a una revisión específica.
Primero puede verificar en qué confirmaciones se modificó el archivo.
git log path/to/file.txt
Luego puede retirar el archivo con el número de revisión.
git checkout 3cdc61015724f9965575ba954c8cd4232c8b42e4 /path/to/file.txt
Después de eso, puedes comprometerte y presionarlo nuevamente.
fuente
Restablezca el archivo en un estado correcto, confirme y vuelva a presionar.
Si está seguro de que nadie más ha obtenido sus cambios todavía, puede usarlos
--amend
al confirmar, para modificar su compromiso anterior (es decir, reescribir el historial) y luego presionar. Sin-f
embargo, creo que tendrás que usar la opción al empujar, para forzar el empuje.fuente
Obtén el código hash de la última confirmación.
git log
git revert <hash_code_from_git_log>
git push
echa un vistazo en el GHR. puede obtener lo que necesita, espero que esto sea útil
fuente