Omitir un compromiso y en Git

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.