example - git squash
Editar el root commit en Git? (5)
Hay formas de cambiar el mensaje de confirmaciones posteriores:
git commit --amend # for the most recent commit
git rebase --interactive master~2 # but requires *parent*
¿Cómo puede cambiar el mensaje de confirmación de la primera confirmación (que no tiene padre)?
A partir de la versión 1.7.12 de Git, ahora puede usar
git rebase -i --root
Otra forma de evitar este problema si sabe que se volverá a basar en el "primer" compromiso en el futuro, es hacer un compromiso vacío al principio:
git commit --allow-empty -m "Initial commit"
y solo entonces comience a hacer confirmaciones "reales", entonces puede volver a hacer una base de datos fácilmente encima de esa forma estándar usando algo como git rebase -i HEAD^
Para expandir la respuesta de ecdpalma , ahora puede usar la opción --root
para decirle a rebase
que desea volver a escribir la raíz / primer compromiso:
git rebase --interactive --root
Luego, la confirmación de la raíz se mostrará en la lista de tareas pendientes de reorganización, y puede seleccionar editarla o reformularla:
reword <root commit sha> <original message>
pick <other commit sha> <message>
...
Esta es la explicación de --root
de los documentos de --root
de Git (énfasis mío):
Cambie de base todas las confirmaciones accesibles desde
<branch>
, en lugar de limitarlas con un<upstream>
. Esto le permite reajustar la (s) confirmación (es) raíz en una rama
Podrías usar git filter-branch
:
cd test
git init
touch initial
git add -A
git commit -m "Initial commit"
touch a
git add -A
git commit -m "a"
touch b
git add -A
git commit -m "b"
git log
-->
8e6b49e... b
945e92a... a
72fc158... Initial commit
git filter-branch --msg-filter /
"sed /"s|^Initial commit|New initial commit|g/"" -- --all
git log
-->
c5988ea... b
e0331fd... a
51995f1... New initial commit
Suponiendo que tiene un árbol de trabajo limpio, puede hacer lo siguiente.
# checkout the root commit
git checkout <sha1-of-root>
# amend the commit
git commit --amend
# rebase all the other commits in master onto the amended root
git rebase --onto HEAD HEAD master