Saltar al contenido

¿Cómo funciona git commit –amend exactamente?

Te damos la bienvenida a nuestra página web, en este lugar vas a encontrar la respuesta a lo que buscas.

Solución:

Suponga que está en un estado de trabajo limpio y que su repositorio tiene el siguiente aspecto:

ingrese la descripción de la imagen aquí

Si luego corres

git commit --amend

escriba un mensaje de confirmación, guarde y salga de su editor, sucede lo siguiente:

  1. Su área de preparación, que, si no ha realizado ningún cambio nuevo, será idéntica a la de confirmación f42c5—se utiliza para crear una nueva confirmación: 31b8e. Sus padres serán los mismos que los de la confirmación que está modificando: f42c5.
  2. los master la referencia de rama se mueve para apuntar a esa nueva confirmación (31b8e).
  3. los HEAD referencia sigue master.

ingrese la descripción de la imagen aquí

Tenga en cuenta que el compromiso modificado (f42c5) ahora no se puede acceder desde ninguna referencia en su repositorio (de ahí su estilo “transparente” en mi gráfico). Todavía vive en la base de datos de objetos de su repositorio, pero eventualmente se eliminará definitivamente, cuando Git ejecute su limpieza periódica, o si lo activa explícitamente ejecutando git gc (recolección de basura).


Apéndice (basado en el comentario de Jason Baker): tenga en cuenta que, siempre que el compromiso modificado, f42c5todavía existe en su repositorio y tiene una forma de averiguar su ID de compromiso (por ejemplo, sacándolo del master reflog de la sucursal), todavía puede comprobarlo. Correr

git checkout master # just to be sure that master is the current branch
git reset --hard f42c5

o (suponiendo que, mientras tanto, no haya realizado ningún compromiso nuevo en masterReiniciar mastero de otro modo movió el master referencia de sucursal)

git checkout master # just to be sure that master is the current branch
git reset --hard [email protected]1

te pondría en la siguiente situación:

ingrese la descripción de la imagen aquí

Pero ahora, comprométete 31b8e se volvería inalcanzable.


Digamos que acabas de cometer “B”

... --- A --- B
              ^
              |
            master
             HEAD

La modificación de “B” creará una confirmación paralela que se convierte en el nuevo encabezado de rama.

        +---- B
        |
... --- A --- B'
              ^
              |
            master
             HEAD

B’ es la confirmación resultante de una combinación de los cambios de B más los cambios que había preparado cuando emitió el git commit --amend.

Si aceptas, tienes la libertad de dejar un enunciado acerca de qué te ha gustado de este artículo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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