How do I reword the very first git commit message?

GitMessageGit RebaseGit CommitRevision History

Git Problem Overview


I have a working tree containing 3 commmits:

➜ ~myproject git:(master) git log

commit a99cce8240495de29254b5df8745e41815db5a75
Author: My Name <my@mail.com>
Date:   Thu Aug 16 00:59:05 2012 +0200

    .gitignore edits

commit 5bccda674c7ca51e849741290530a0d48efd69e8
Author: My Name <my@mail.com>
Date:   Mon Aug 13 01:36:39 2012 +0200

    Create .gitignore file

commit 6707a66191c84ec6fbf148f8f1c3e8ac83453ae3
Author: My Name <my@mail.com>
Date:   Mon Aug 13 01:13:05 2012 +0200

    Initial commit (with a misleading message)

Now I wish to reword the commit message of my first commit (6707a66)

➜ ~myproject git:(master) git rebase -i 6707

(…entering vim)

pick 5bccda6 Create .gitignore file
pick a99cce8 .gitignore edits

# Rebase 6707a66..a99cce8 onto 6707a66
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

In this case, I wish to correct (reword in git parlance) the commit message in question:

> Initial commit (with a misleading message)

…to something appropriate.

Unsurprisingly, my attempt above didn't succeed since the first commit obviously doesn't have any parent commit. (And when you rebase, you need to reference the next oldest commit prior to the one you wish to reword, right?)

The gist of my question, thus, can you achieve this by any other means of doing it?

Git Solutions


Solution 1 - Git

Do git rebase -i --root

(point to root instead of pointing to a specific commit)

This way, the first commit is also included and you can just reword it like any other commit.

The --root option was introduced in Git v1.7.12 (2012). Before then the only option was to use filter-branch or --amend, which is typically harder to do.

Note: see also this similar question and answer.

Solution 2 - Git

pcreux's gist has a good way to reword the first commit:

# You can't use rebase -i here since it takes the parent commit as argument.
# You can do the following though:
git checkout FIRST_COMMIT_SHA && git commit --amend && git rebase HEAD master

Solution 3 - Git

You can always use git filter-branch --msg-filter:

git filter-branch --msg-filter \
  'test $GIT_COMMIT = '$(git rev-list --reverse master |head -n1)' &&
echo "Nice message" || cat' master

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionHenrikView Question on Stackoverflow
Solution 1 - GitflorislaView Answer on Stackoverflow
Solution 2 - GitDouglasView Answer on Stackoverflow
Solution 3 - Gitfork0View Answer on Stackoverflow