Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to rename last N commits messages in git?

Tags:

git

I have 30 commits and I want to add "Bug XXXXXXX" at the beginning of all the messages, can I do this in a single action/command?

I'm trying to avoid squashing them.

like image 628
talabes Avatar asked Jan 07 '13 18:01

talabes


People also ask

How do I change the last commit message in git?

There are many ways to rewrite history with git. Use git commit --amend to change your latest log message. Use git commit --amend to make modifications to the most recent commit. Use git rebase to combine commits and modify history of a branch.

How do I rename a commit message?

On the command line, navigate to the repository that contains the commit you want to amend. Type git commit --amend and press Enter. In your text editor, edit the commit message, and save the commit.


2 Answers

Use git rebase -i HEAD~<N> where N is the number of commits to go back, and -i will make it interactive, ie it will open in vim or whatever your default editor is. See Scott Chacon's Book. Then you can change the commit message.

If you need it automated, then you may need to try filter-branch:

another history-rewriting option that you can use if you need to rewrite a larger number of commits in some scriptable way

In this case you would use:

git filter-branch --msg-filter <command>

See man git-filter-branch

Here is the example given in the manual to append "Acked-by" to a range of commits. You can change it to "BUG XXXXXXX"

git filter-branch -f --msg-filter '
    echo "Bug XXXXXXX: \c"
    && cat
    ' HEAD~<N>..HEAD

where N is the number of commits to go back and append "BUG XXXXXXX"

like image 79
Mark Mikofski Avatar answered Oct 22 '22 15:10

Mark Mikofski


It might be better not to depend on either of the following:

echo -n "Bug XXXXXXX: "

echo "Bug XXXXXXX: \c"

The behavior of echo is dependent on which version of echo is being used. See the linked stackoverflow question below:

'echo' without newline in a shell script

A better solution might be:

git filter-branch -f --msg-filter '
    printf "%s" "Bug XXXXXXX: "
    && cat
    ' HEAD~<N>..HEAD
like image 34
Sudeep Shakya Avatar answered Oct 22 '22 15:10

Sudeep Shakya