¿Cómo solucionar el compromiso con la rama Git incorrecta?

Resuelto mikewilliamson asked hace 14 años • 14 respuestas

Acabo de hacer un compromiso perfectamente bueno con la rama equivocada. ¿Cómo deshago la última confirmación en mi rama maestra y luego tomo esos mismos cambios y los incorporo a mi rama de actualización?

mikewilliamson avatar May 31 '10 12:05 mikewilliamson
Aceptado

Si aún no ha realizado los cambios, también puede realizar un restablecimiento parcial:

git reset --soft HEAD^

Esto revertirá la confirmación, pero devolverá los cambios confirmados a su índice. Suponiendo que las ramas estén relativamente actualizadas entre sí, git le permitirá realizar un pago en la otra rama, tras lo cual simplemente podrá confirmar:

git checkout branch
git commit -c ORIG_HEAD

La -c ORIG_HEADparte es útil para no volver a escribir el mensaje de confirmación.

Blair Holloway avatar May 31 '2010 05:05 Blair Holloway

4 años de retraso en el tema, pero esto podría ser útil para alguien.

Si olvidó crear una nueva rama antes de confirmar y confirmó todo en el maestro, sin importar cuántas confirmaciones haya realizado, el siguiente enfoque es más sencillo:

git stash                       # skip if all changes are committed
git branch my_feature
git reset --hard origin/master
git checkout my_feature
git stash pop                   # skip if all changes were committed

Ahora tienes tu rama maestra igual a origin/mastery todas las confirmaciones nuevas están activadas my_feature. Tenga en cuenta que my_featurees una sucursal local, no remota.

fotanus avatar Feb 06 '2014 14:02 fotanus

Si tiene una copia de trabajo limpia (sin modificar)

Para revertir una confirmación (asegúrese de anotar el hash de la confirmación para el siguiente paso):

git reset --hard HEAD^

Para llevar ese compromiso a una rama diferente:

git checkout other-branch
git cherry-pick COMMIT-HASH

Si ha modificado o no se han realizado cambios

También tenga en cuenta que esto git reset --hardeliminará cualquier cambio modificado y sin seguimiento que pueda tener, por lo que si los tiene, tal vez prefiera:

git reset HEAD^
git checkout .
Michael Mrozek avatar May 31 '2010 05:05 Michael Mrozek