2010-10-15 7 views
8

Disons que j'ai 3 commits non poussés. Maintenant, je veux changer le message de validation du premier ou deuxième commit (les changer pour le troisième est simple en utilisant git commit --amend). Comment faire ça?Comment modifier le message de validation d'une validation dans git?

+1

C'est un peu semblable à http://stackoverflow.com/questions/3926768/amend-a-commit-that-wasnt-the -previous-commit. J'ai essayé (ci-dessous) de voir comment 'commit --amend' pourrait être scripté. Laissez-moi savoir si cela fonctionne. – VonC

Répondre

5

rebondir sur la sous-question: est-il un git commit --amend pour une précédente commit (et pas seulement le dernier), vous pouvez essayer quelque chose comme (non encore testé, mais Colin O'Dell mentionne dans the comments avoir écrit un script pour elle colinodell/git-amend-old):

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

Ce serait comme:

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

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

+1

Pourquoi s'embêter? rebase -i est beaucoup plus simple – CharlesB

+2

@CharlesB: Je suis d'accord, 'rebase -i' est plus simple, mais il est aussi * interactif *. Cela signifie que vous ne pouvez pas l'inclure dans un script ou dans un alias regroupant une séquence de commandes. – VonC

6

Il s'agit d'un travail pour la puissante commande git rebase -i. Consultez également la section Interactive Rebasing du livre Git.

+0

Peut-être une question stupide, mais 'git rebase -i' peut-il être utilisé de manière non interactive? – Mot

+2

Non, pas en tant que tel. Cependant, tout ce que 'git rebase -i' peut faire (en théorie) en utilisant d'autres commandes Git scriptables. Il serait donc possible d'écrire un script pour modifier un message de commit précédent, mais je ne sais pas si une telle chose existe encore. –

+0

félicitations sur votre 15ème badge d'or;) Vous êtes maintenant un vrai git! (Err ... git-guru, je voulais dire) (je veux dire, gourou sur le nom de l'outil git) (je veux dire, vous savez ce que je veux dire) – VonC

Questions connexes