specific example commits change all after git git-rebase git-commit git-rewrite-history amend

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