2010-10-15 16 views
8

Digamos que tengo 3 commits sin apresurar. Ahora quiero cambiar el mensaje de confirmación del primer o segundo commit (cambiarlos por el tercero es simple usando git commit --amend). ¿Como hacer eso?¿Cómo edito el mensaje de confirmación de cualquier confirmación en git?

+1

Eso es un poco similar a http://stackoverflow.com/questions/3926768/amend-a-commit-that-wasnt-the -previous-commit. Intenté (abajo) para ver cómo un 'commit --amend' podría ser guionado. Déjame saber si funciona. – VonC

Respuesta

5

para rebotar en el sub-pregunta: ¿hay una git commit --amend para una confirmación anterior (y no sólo el último), podría intentar algo así (no determinado todavía, pero Colin O'Dell menciones en the comments haber escrito un guión para que colinodell/git-amend-old):

git checkout -b tmp 
git reset --hard HEAD~2 
git commit -amend 
git rebase --onto tmp [email protected]{1} master 

Eso sería como:

x---x---x---x---x 
       ^
       | 
       (master*) (* = current branch) 

git checkout -b tmp 
x---x---x---x---x 
       ^
       | 
       (tmp*, master) 

git reset --hard HEAD~2 
x---x---x---x---x 
     ^ ^
     |  | 
     (tmp*) (master) 

git commit -amend 
     y (tmp*) 
    /
x---x---x---x---x 
     |  ^
    ([email protected]{1}) | 
      (master) 

git rebase --onto tmp [email protected]{1} master 
    (tmp) 
     y---x'---x' (master*) 
    /
x---x---x---x---x (only referenced in reflog) 
+1

En 'rebase --onto', vea http://stackoverflow.com/questions/1994463/how-to-cherry-pick-a-range-of-commits-and-merge-into-another-branch/1994491 # 1994491 – VonC

+1

¿por qué molestarse? rebase -i es mucho más simple – CharlesB

+2

@CharlesB: estoy de acuerdo, 'rebase -i' es más simple, pero también * interactivo *. Lo que significa que no puede incluirlo en un script o en un alias que agrupe una secuencia de comandos. – VonC

6

Este es un trabajo para el poderoso comando git rebase -i. Además, consulte la sección Interactive Rebasing del libro de Git.

+0

Quizás una pregunta estúpida, pero ¿se puede usar 'git rebase -i' de forma no interactiva? – Mot

+2

No, no como tal. Sin embargo, todo lo que hace 'git rebase -i' puede (en teoría) hacerse usando otros comandos Git con script. Por lo tanto, sería posible escribir un script para modificar un mensaje de confirmación anterior, pero no sé si aún existe. –

+0

felicitaciones por su 15 insignia de oro;) ¡Ahora eres un verdadero idiota! (Err ... git-guru, quise decir) (quiero decir, gurú sobre el nombre de la herramienta git) (quiero decir, ya sabes a qué me refiero) – VonC

Cuestiones relacionadas