14

My usual workflow with git is to create a new feature branch, do some work with frequent commits, and then merge back into the development branch when the feature is working and/or stable.

Usually, when I do git merge --squash feature-branch, I get a nice "squashed commit of the following" message that auto-populates with all of the commit messages from the feature branch.

However, if there are any merge conflicts (say I finished and merged another feature while working on this one), I seem to lose all of my commit messages from the branch. The auto-populated commit message fills in the conflicts, but not the commit messages. Where did my commit messages go? Can I get them back?

Ryan
  • 9,918
  • 7
  • 42
  • 57
  • Why squash at all? You could just use `rebase --interactive` to clean up, if you regard your commits as too frequent and messy, then do a normal merge - that way you don't lose history. – Cascabel Aug 31 '10 at 03:15

3 Answers3

8

Yes, you can get the squash commit message back. It's stored in .git/SQUASH_MSG.

You can use it as a template with the following command:

git commit -t .git/SQUASH_MSG
MikeK
  • 702
  • 4
  • 11
  • 2
    For some reason this didn't work for me directly, but thanks for the pointer to `.git/SQUASH_MSG` :) – Michael Mior Jun 14 '13 at 15:01
  • I ran the command `git commit --file .git/SQUASH_MSG` and it created the commit message listing all commits within the squashed commit. – Abdull Jun 03 '16 at 16:01
4

This doesn't answer your question directly, but you should be able to avoid the conflict in the first place.

Consider doing a

git rebase master topic

before performing the merge. The DESCTIPTION section of this page http://git-scm.com/docs/git-rebase should be helpful.This may also obviate the need for the squash as an interactive rebase would allow you to to squash commits of your choosing.

EDIT: See also: In git, what is the difference between merge --squash and rebase?

Community
  • 1
  • 1
bc17
  • 181
  • 2
1

Nothing is really lost with git. The list of the commits on the feature branch can be obtained using:

git cherry feature-branch

Then simply pipe this to git cat-file:

git cherry feature-branch | cut -f2 -d' ' | git cat-file --batch

You need to clean-up the output though. I don't know a way to automated it better.

gawi
  • 13,940
  • 7
  • 42
  • 78