2010-10-15 36 views
8

Diciamo che ho 3 commit non premuti. Ora voglio cambiare il messaggio di commit del primo o del secondo commit (cambiarli per il terzo è semplice usando git commit --amend). Come farlo?Come posso modificare il messaggio di commit di qualsiasi commit in git?

+1

che è un po 'simile a http://stackoverflow.com/questions/3926768/amend-a-commit-that-wasnt-the -precedente-commit. Ho provato (sotto) per vedere come un 'commit --amend' potrebbe essere scriptato. Fammi sapere se funziona. – VonC

risposta

5

a rimbalzo sul sub-domanda: c'è un git commit --amend per un commit precedente (e non solo l'ultima), si potrebbe provare qualcosa di simile (non ancora testato, ma Colin O'Dell menzioni in the comments aver scritto una sceneggiatura per esso colinodell/git-amend-old):

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

sarebbe come:

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

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

+1

perché preoccuparsi? rebase -i è molto più semplice – CharlesB

+2

@CharlesB: Sono d'accordo, 'rebase -i' è più semplice, ma anche * interattivo *. Ciò significa che non puoi includerlo in uno script o in un alias che raggruppa una sequenza di comandi. – VonC

6

Questo è un lavoro per il potente comando git rebase -i. Inoltre, consulta la sezione Interactive Rebasing del libro Git.

+0

Forse una domanda stupida, ma si può usare git rebase -i' in modo non interattivo? – Mot

+2

No, non come tale. Comunque, tutto ciò che 'git rebase -i' può (in teoria) può essere fatto usando altri comandi Git scriptable. Quindi sarebbe possibile scrivere uno script per modificare un precedente messaggio di commit, ma non so se una cosa del genere esiste ancora. –

+0

congratulazioni sul tuo 15esimo distintivo d'oro;) Ora sei un vero idiota! (Err ... git-guru, intendevo) (voglio dire, guru riguardo al nome dello strumento git) (voglio dire, capisci cosa intendo) – VonC

Problemi correlati