tener - ¿qué hace git log-oneline?
¿Cómo reescribo el primer mensaje de cometer git? (3)
Do git rebase -i --root
(apuntar a la root
lugar de apuntar a una confirmación específica)
De esta forma, la confirmación raíz también se incluye y puede reword
como cualquier otra confirmación.
Existen otros enfoques más elaborados, pero la mayoría de estos son anteriores a la adición de la opción ''--root'' en ''v1.7.12'', a partir de 2012.
Tengo un árbol de trabajo que contiene 3 commmits:
My ~ myproject git: (maestro) git log
commit a99cce8240495de29254b5df8745e41815db5a75
Author: My Name <[email protected]>
Date: Thu Aug 16 00:59:05 2012 +0200
.gitignore edits
commit 5bccda674c7ca51e849741290530a0d48efd69e8
Author: My Name <[email protected]>
Date: Mon Aug 13 01:36:39 2012 +0200
Create .gitignore file
commit 6707a66191c84ec6fbf148f8f1c3e8ac83453ae3
Author: My Name <[email protected]>
Date: Mon Aug 13 01:13:05 2012 +0200
Initial commit (with a misleading message)
Ahora deseo reword
a reword
el mensaje de confirmación de mi primer commit (6707a66)
My ~ myproject git: (maestro) git rebase -i 6707
(... entrando vim)
pick 5bccda6 Create .gitignore file
pick a99cce8 .gitignore edits
# Rebase 6707a66..a99cce8 onto 6707a66
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit''s log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
En este caso, deseo corregir ( reword
en el lenguaje git) el mensaje de compromiso en cuestión:
Confirmación inicial (con un mensaje engañoso)
... a algo apropiado.
Como era de esperar, mi intento anterior no tuvo éxito ya que el primer commit obviamente no tiene ningún compromiso de los padres . (Y cuando rebase
, necesita hacer referencia al siguiente compromiso más antiguo anterior al que desea reword
, ¿no?)
La esencia de mi pregunta, por lo tanto, ¿puede lograr esto por cualquier otro medio de hacerlo?
Siempre puedes usar git filter-branch --msg-filter
:
git filter-branch --msg-filter /
''test $GIT_COMMIT = ''$(git rev-list --reverse master |head -n1)'' &&
echo "Nice message" || cat'' master
La esencia de pcreux tiene una buena manera de volver a redactar el primer compromiso:
# You can''t use rebase -i here since it takes the parent commit as argument.
# You can do the following though:
git checkout FIRST_COMMIT_SHA && git commit --amend && git rebase HEAD master