En mi proyecto, uno de los commits introdujo un error que no puedo localizar. Quiero ignorar todo lo que contiene y continuar desde otros commits.
Commit1 : funciona bien.
Commit2 : no funciona. Introdujo un error.
Commit3 : no funciona debido a un error en la confirmación 2.
Mi pregunta es ¿cómo pago el compromiso 3 sin cambios realizados en el compromiso 2?
Puede usar la database interactiva para eliminar el commit2
del historial de confirmaciones . Haga los siguientes pasos de detalle (suponga que los 3 commits están en la twig master
):
git checkout master git rebase -i HEAD~3
Luego aparecerá la window interactiva. Ingrese i
y cambie allí confirma como:
pick <commit1 sha-1> commit1 message drop <commit2 sha-1> commit2 message pick <commit3 sha-1> commit3 message
Luego ingrese el button Esc e ingrese :wq
.
Ahora commit2
se elimina y encontrará que el cambio de commit1
se basa en commit1
.
Como la mayoría de las operaciones en Git, puedes hacerlo con varios methods:
Revertir el commit incorrecto
git revert <commit2>
Si esta confirmación incorrecta no se ha enviado al server remoto (de lo contrario, es mejor invertirla y enviarla de inmediato para solucionarla! =), Y desea mantener su trabajo en algún lugar y solucionarlo más tarde, también podría crear una nueva sucursal local, elige el compromiso correcto y continúa tu trabajo
git checkout -b "myNewBranch" <commit1> git cherry-pick <commit3>
si tiene más de un compromiso para seleccionar con precisión, rebase es más conveniente
###create your branch but do not check it out yet. git branch "myNewBranch" <commit1> git rebase <commit2> --onto "myNewBranch"
esto tomará todos los commits comenzando desde commit2 (excluidos) y los aplicará todos uno por uno en su nueva twig.
Si no te sientes cómodo con la command-line de git y utilizas gui, puedes hacerlo fácilmente con gitk. Esto funcionará para una operación simple como reverts y cherrypicks.
Un último consejo, cuando comiences con Git: puedes hacer las cosas mal y arruinar tu espacio de trabajo, siempre puedes volver a una situación anterior, tan pronto como se haya versionado en una confirmación, usando:
git reflog //locate your commit and copy the sha key git reset --hard mykey
Sabiendo esto, no dudes en jugar con los commands, mientras no presiones, estás a salvo;)
Si no se trata de un historial, puede usar git rebase --onto commit1 commit2 commit3
para eliminar commit2 del historial. Si este ya es un historial publicado, simplemente debe revertir los cambios de commit2 con git revert commit2
. O si solo quieres tenerlo temporalmente localmente, puedes salir commit3 y luego git revert commit2 -n
que también deshace los cambios pero no crea un commit.