Eliminación de una confirmación de git

Cuando trabaje con Git, encontrará que a veces las confirmaciones deben eliminarse ya que han introducido un error o necesitan ser reelaboradas.

Si es así el último compromiso es muy sencillo. Simplemente ejecute:

git reset HEAD^

Esto mostrará la última confirmación, pero dejará todos los cambios en los archivos intactos.

Si necesita eliminar algo más que la última confirmación, hay dos métodos que puede utilizar. La primera es usar rebase, esto te permitirá eliminar una o más confirmaciones consecutivas, la otra es cherry-pick, que te permite eliminar confirmaciones no consecutivas.

Ejemplo de registro de git

Número Hash Confirmar mensaje Autor
1 2c6a45b (HEAD) Añadiendo método público para acceder al método protegido Tom
2 ae45fab Actualizaciones en la interfaz de la base de datos Contratista 1
3 77b9b82 Mejora de la interfaz de la base de datos Contractor 2
4 3c9093c Se fusionó la rama de desarrollo en el maestro Tom
5 b3d92c5 Adición de un nuevo módulo CMS de eventos Paul
6 7feddbb Adición de archivos y clases CMS Tom
7 a809379 Agregar proyecto a Git Tom

Usando Rebase

Usando el registro de git anterior queremos eliminar las siguientes confirmaciones; 2 & 3 (ae45fab & 77b9b82). Como son confirmaciones consecutivas, podemos usar rebase.

git rebase --onto <branch name>~<first commit number to remove> <branch name>~<first commit to be kept> <branch name>

Por ejemplo, para eliminar las confirmaciones 2 & 3 anterior

git rebase --onto repair~3 repair~1 repair

Usando Cherry Pick

Paso 1: Encuentra la confirmación antes de la confirmación desea eliminar git log

Paso 2: Verifique que confirme git checkout <commit hash>

Paso 3 : Crea una nueva rama usando tu confirmación de pago actual git checkout -b <new branch>

Paso 4: Ahora necesitas agregar la confirmación después de la confirmación eliminada git cherry-pick <commit hash>

Paso 5: Ahora repita el Paso 4 para todas las demás confirmaciones que desee mantener.

Paso 6: Una vez que se hayan agregado todas las confirmaciones a su nueva rama y sido cometido. Compruebe que todo esté en el estado correcto y que funcione según lo previsto. Verifique que todo se haya confirmado: git status

Paso 7: cambie a su rama rota git checkout <broken branch>

Paso 8: Ahora realice un restablecimiento completo en la rama rota a la confirmación antes de la que desea eliminar git reset --hard <commit hash>

Paso 9: Combine su rama fija en esta rama git merge <branch name>

Paso 10: Empuje los cambios combinados de regreso al origen. ADVERTENCIA: ¡Esto sobrescribirá el repositorio remoto! git push --force origin <branch name>

Puede realizar el proceso sin crear una nueva rama reemplazando el Paso 2 & 3 con el Paso 8 y luego no realizar el Paso 7 & 9.

Ejemplo

Digamos que queremos eliminar las confirmaciones 2 & 4 del repositorio.

  1. git checkout b3d92c5 Verifique la última confirmación utilizable.
  2. git checkout -b repair Cree una nueva rama para trabajar.
  3. git cherry-pick 77b9b82 Ejecute la confirmación 3.
  4. git cherry-pick 2c6a45b Ejecutar a través de la confirmación 1.
  5. git checkout master Checkout master.
  6. git reset --hard b3d92c5 Restablecer master a la última confirmación utilizable.
  7. git merge repair Fusionar nuestra nueva rama con master.
  8. git push --hard origin master Empuje el master al repositorio remoto.

Nota final

Git rebase & cherrypick son peligrosos pero poderosos soluciones que solo deben usarse como último opción y solo puede ser asumido por alguien que sepa lo que está haciendo. Tenga en cuenta que ambas soluciones podrían tener efectos adversos en otros usuarios que estén trabajando en el mismo repositorio / rama.

¡Por último, recuerde tener cuidado y buena suerte!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *