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:
Si luego corres
git commit --amend
escriba un mensaje de confirmación, guarde y salga de su editor, sucede lo siguiente:
- 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
. - los
master
la referencia de rama se mueve para apuntar a esa nueva confirmación (31b8e
). - los
HEAD
referencia siguemaster
.
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, f42c5
todaví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 master
Reiniciar master
o 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:
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.