tipos tener tag remove qué proyecto podemos para oneline nuestros mayor log herramienta hacer hace existen etiquetas crear control git message git-rebase git-commit revision-history

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