Edite la confirmación de raíz en Git?

Hay forms de cambiar el post de confirmaciones posteriores:

git commit --amend # for the most recent commit git rebase --interactive master~2 # but requires *parent* 

¿Cómo se puede cambiar el post de confirmación de la primera confirmación (que no tiene padre)?

Suponiendo que tiene un tree 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 

A partir de la versión 1.7.12 de Git, ahora puede usar

 git rebase -i --root 

Para expandir la respuesta de ecdpalma , ahora puede usar la opción --root para decirle a rebase que desea reescribir la confirmación de la raíz / primer bash:

 git rebase --interactive --root 

A continuación, la confirmación raíz se mostrará en la list REPARAR rebase, y puede seleccionar editar o volver a networkingactarla:

 reword <root commit sha> <original message> pick <other commit sha> <message> ... 

Esta es la explicación de --root from the git rebase docs (énfasis mío):

Rebase todos los commits accesibles desde <branch> , en lugar de limitarlos con un <upstream> . Esto le permite volver a establecer la base de la (s) confirmación (es) raíz (es) en una twig .

Otra forma de evitar este problema si sabe que va a realizar una nueva configuration en la parte superior de la "primera" confirmación en el futuro, es hacer una confirmación vacía al principio:

 git commit --allow-empty -m "Initial commit" 

y solo entonces comience a hacer commits "reales", entonces usted puede fácilmente rebasear sobre eso cometer la manera estándar usando algo como git rebase -i HEAD^

Puede 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