2009-12-10 6 views
85

J'essayais de modifier un ancien message de validation comme expliqué here.Modifier l'ancien message de validation sur Git

La chose est que maintenant, quand j'essaie d'exécuter rebase -i HEAD~5 il est dit interactive rebase already started.

Alors j'essaie: git rebase --continue mais nous avons eu cette erreur:

error: Ref refs/heads/master is at 7c1645b447a8ea86ee143dd08400710c419b945b but expected c7577b53d05c91026b9906b6d29c1cf44117d6ba 
fatal: Cannot lock the ref 'refs/heads/master'. 

Toutes les idées?

Répondre

88

Il dit:

When you save and exit the editor, it will rewind you back to that last commit in that list and drop you on the command line with the following message:

$ git rebase -i HEAD~3 
Stopped at 7482e0d... updated the gemspec to hopefully work better 
You can amend the commit now, with 

Cela ne signifie pas:

type again git rebase -i HEAD~3

Essayez de pas tapant git rebase -i HEAD~3 lorsque vous quittez l'éditeur, et il devrait fonctionner correctement.
(autrement, dans votre situation particulière, un git rebase -i --abort pourrait être nécessaire pour réinitialiser tout et vous permettre d'essayer à nouveau)


Comme Dave Vogt mentions dans les commentaires, git rebase --continue est pour aller à la tâche suivante dans le rebasage processus, après avoir modifié le premier commit.

En outre, Gregg Lind mentions his answer la commande reword de git rebase:

By replacing the command "pick" with the command "edit", you can tell git rebase to stop after applying that commit, so that you can edit the files and/or the commit message, amend the commit, and continue rebasing.

If you just want to edit the commit message for a commit, replace the command " pick " with the command " reword ", since Git1.6.6 (January 2010) .

It does the same thing ‘ edit ’ does during an interactive rebase, except it only lets you edit the commit message without returning control to the shell. This is extremely useful.
Currently if you want to clean up your commit messages you have to:

$ git rebase -i next 

Then set all the commits to ‘edit’. Then on each one:

# Change the message in your editor. 
$ git commit --amend 
$ git rebase --continue 

Using ‘ reword ’ instead of ‘ edit ’ lets you skip the git-commit and git-rebase calls.

+1

travaillé avec la commande --abort. Merci –

+2

Aussi, 'git rebase --continue' va à la tâche suivante dans le processus de rebasage, après avoir modifié la première validation. –

+0

Ajouter le [link] (https://help.github.com/articles/changing-a-commit-message/) à l'article wiki de github pour changer un message de validation – Joy

42

FWIW, git rebase interactif a maintenant une option "reformule", ce qui rend cette muc h moins douloureux!

9

Vous pouvez le faire de cette façon suivante comme @gregg dit utiliser mot reformule

git rebase -i HEAD~n 

Ici n est la liste des derniers n engage.

Par exemple, si vous utilisez git rebase -i HEAD~4

pick e459d80 Do xyz 
pick 0459045 Do something 
pick 90fdeab Do blah blah blah 
pick 90fdeab Do pqr 

remplacer maintenant mot ramasser avec Reformuler pour vous commettras à modifier un message.

pick e459d80 Do xyz 
    reword 0459045 Do something 
    reword 90fdeab Do blah blah blah 
    pick 90fdeab Do pqr 

Maintenant, fermez et enregistrez ce que vous aurez la chance de modifier commettre un message pour lequel vous avez utilisé Reformuler dans les fenêtres suivantes.

Vous pouvez consulter le document officiel here ainsi

+0

C'est en fait la façon la plus simple de le faire. A travaillé comme un charme merci :) –

Questions connexes