I have a Git repository with few branches and dangling commits. I would like to search all such commits in repository for a specific string.
I know how to get a log of all commits in history, but these don’t include branches or dangling blobs, just HEAD’s history. I want to get them all, to find a specific commit that got misplaced.
I would also like to know how to do this in Mercurial, as I’m considering the switch.
You can see dangling commits with
git log -g.So you could do this to find a particular string in a commit message that is dangling:
Alternatively, if you want to search the changes for a particular string, you could use the pickaxe search option, “-S”:
Git 1.7.4 will add the -G option, allowing you to pass -G<regexp> to find when a line containing <regexp> was moved, which -S cannot do. -S will only tell you when the total number of lines containing the string changed (i.e. adding/removing the string).
Finally, you could use gitk to visualise the dangling commits with:
And then use its search features to look for the misplaced file. All these work assuming the missing commit has not “expired” and been garbage collected, which may happen if it is dangling for 30 days and you expire reflogs or run a command that expires them.