¿Cómo se git revert
usa?
Esto puede sonar como una pregunta duplicada, pero cuando la gente lo hace, la respuesta suele ser, ¿usar git reset
según Revertir a una confirmación por un hash SHA en Git?
Luego, cuando alguien pregunta cómo usar, la git reset
gente responde diciendo que debe usar git revert
según Git: cómo revertir
Antes de que te des cuenta, aparecieron 8 personas diferentes con sus propias formas únicas de salvar el trasero del OP, todo lo cual está sobre tu cabeza.
Así que intentemos ceñirnos al escrito y escribir una guía para principiantes git revert
.
Un escenario: te has comprometido dos veces a dominar y es malo. Has presionado y otras personas tienen tus malos cambios.
Quieres deshacerlo. No es algo que pueda deshacer manualmente en el código usted mismo, digamos que algún asistente o administrador de paquetes cambió toneladas de cosas por todas partes, solo quiere dejarlo todo como estaba.
De esto se trata el control de fuente. Estoy seguro de que es fácil.
Está bien, lo vas a usar git revert
pero ¿cómo?
¿Y después de correr git revert
tienes que hacer algo más después? ¿Tiene que confirmar los cambios revertidos o revertir directamente al repositorio o qué?
Obviamente, tendrás que presionar de nuevo y probablemente anunciar tus bolas al equipo.
git revert -n <commitToRevet>
ogit revert --no-commit <commitToRevet>
Usa git revert así:
git revert <insert bad commit hash here>
git revert
crea una nueva confirmación con los cambios que se deshacen.git reset
borra tu historial de git en lugar de realizar una nueva confirmación.Los pasos posteriores son los mismos que para cualquier otra confirmación.
fuente
La razón
reset
yrevert
tienden a surgir mucho en las mismas conversaciones es porque diferentes sistemas de control de versiones los usan para significar cosas diferentes.En particular, las personas que están acostumbradas a SVN o P4 que quieren deshacerse de los cambios no confirmados en un archivo, a menudo buscarán
revert
antes de que se les diga lo que realmente quierenreset
.De manera similar, el
revert
equivalente en otros VCSes a menudo se llamarollback
o algo similar, pero "rollback" también puede significar "Quiero descartar por completo las últimas confirmaciones", lo cual es apropiado parareset
pero norevert
. Por lo tanto, existe mucha confusión cuando las personas saben lo que quieren hacer, pero no tienen claro qué comando deberían usar para ello.En cuanto a sus preguntas reales sobre revert ...
git revert first-bad-commit..last-bad-commit
De forma predeterminada, le
git revert
solicita un mensaje de confirmación y luego confirma los resultados. Esto se puede anular. Cito la página del manual :En particular, de forma predeterminada crea una nueva confirmación para cada confirmación que está revirtiendo. Puede usar
revert --no-commit
para crear cambios revertirlos todos sin realizar esos cambios como confirmaciones individuales, luego realizar la confirmación cuando lo desee.fuente
git revert first-bad-commit..last-bad-commit
: Creo que esto debería sergit revert parent-of-first-bad-commit..last-bad-commit
.La pregunta es bastante antigua pero revertir todavía confunde a la gente (como yo)
Como principiante, después de algunas pruebas y errores (más errores que pruebas), tengo un punto importante:
git revert
requiere la identificación de la confirmación que desea eliminar manteniéndola en su historialgit reset
requiere la confirmación que desea mantener y, en consecuencia, eliminará cualquier cosa posterior del historial.Es decir, si usa
revert
con la primera identificación de confirmación, se encontrará en un directorio vacío y una confirmación adicional en el historial, mientras que con el reinicio su directorio será ... revertido a la confirmación inicial y su historial se volverá como si las últimas confirmaciones nunca sucedieron.Para ser aún más claro, con un registro como este:
El uso
git revert cb76ee4
traerá de forma predeterminada sus archivos a 01b56c6 y agregará una confirmación adicional a su historial:git reset 01b56c6
en su lugar, devolverá sus archivos a 01b56c6 y limpiará cualquier otra confirmación posterior de su historial:Sé que estos son "la base", pero fue bastante confuso para mí, al ejecutar la
revert
primera identificación ('primer compromiso') esperaba encontrar mis archivos iniciales, me tomó un tiempo entender que si necesita sus archivos de vuelta como 'primer compromiso', debe usar la siguiente identificación.fuente
Revertí algunas confirmaciones ejecutando 'git revert commit id' como:
Luego se me pidió que confirmara la reversión (tal como lo haría al ejecutar 'git commit'). Mi programa de terminal predeterminado es Vim, así que ejecuté:
Finalmente empujé el cambio al repositorio con:
fuente