Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the fastest way to edit hundreds of Git commit messages?

Tags:

git

I have a fairly large Git repository with 1000s of commits, originally imported from SVN. Before I make my repo public, I'd like to clean up a few hundred commit messages that don't make sense in my new repo, as well as to remove all that git-svn informational text that got added.

I know that I can use 'git rebase -i' and then 'git commit --amend' to edit each individual commit message, but with hundreds of messages to be edited, that's a huge pain in the you-know-what.

Is there any faster way to edit all of these commit messages? Ideally I'd have every commit message listed in a single file where I could edit them all in one place.

Thanks!

like image 443
Walt D Avatar asked Jan 15 '13 06:01

Walt D


2 Answers

That's an old question but as there is no mention of git filter-branch, I just add my two cents.

I recently had to mass-replace text in commit message, replacing a block of text by another without changing the rest of the commit messages. For instance, I had to replace Refs: #xxxxx with Refs: #22917.

I used git filter-branch like this

git filter-branch --msg-filter 'sed "s/Refs: #xxxxx/Refs: #22917/g"' master..my_branch 
  • I used the option --msg-filter to edit only the commit message but you can use other filters to change files, edit full commit infos, etc.
  • I limited filter-branch by applying it only to the commits that were not in master (master..my_branch) but you can apply it on your whole branch by omitting the range of commits.

As suggested in the doc, try this on a copy of your branch. Hope that helps.


Sources used for the answer

  • Use case on when to use the function : https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History#The-Nuclear-Option:-filter-branch
  • Function reference (with the list of options) : https://git-scm.com/docs/git-filter-branch
  • Examples of rewrite : https://davidwalsh.name/update-git-commit-messages
like image 171
Lex Lustor Avatar answered Sep 23 '22 03:09

Lex Lustor


This is easy to do as follows:

  • Perform first import.
  • Export all commits into text:

    git format-patch -10000 

    Number should be more than total commits. This will create lots of files named NNNNN-commit-description.patch.

  • Edit these files using some script. (Do not touch anything in them except for top with commit messages).
  • Copy or move edited files to empty git repo or branch.
  • Import all edited commits back:

    git am *.patch 

This will work only with single branch, but it works very well.

like image 45
mvp Avatar answered Sep 22 '22 03:09

mvp