Find a Git branch containing changes to a given file

I have 57 local branches. I know I made a change to a certain file in one of them, but I’m not sure which one. Is there some kind of command I can run to find which branches contain changes to a certain file?

  • Git workflow for a single developer on a local repository
  • Hook git command into visual studio pre build step
  • Prevent direct commits on master branch in git repository and accept merges only?
  • How can I get 'git clone --recursive' to clone submodules locally?
  • GitHub and Git extensions - push on commit
  • GitHub default README markup
  • Your local changes to the following files would be overwritten by merge
  • Get gitk to show full tag names
  • Should I use `git push --force` in my build step
  • git line endings, need the best option
  • git aws.push: No module named boto
  • How to push changes as a branch to remote server not in Main line
  • 3 Solutions collect form web for “Find a Git branch containing changes to a given file”

    Find all branches which contain a change to FILENAME (even if before the (non-recorded) branch point)

    git log --all --format=%H $FILENAME | while read f; do git branch --contains $f; done | sort -u

    Manually inspect:

    gitk --all --date-order -- $FILENAME

    Find all changes to FILENAME not merged to master:

    git for-each-ref --format="%(refname:short)" refs/heads | grep -v master | while read br; do git cherry master $br | while read x h; do if [ "`git log -n 1 --format=%H $h -- $FILENAME`" = "$h" ]; then echo $br; fi; done; done | sort -u

    All you need is

    git log --all -- path/to/file/filename 

    If you want to know the branch right away you can also

    git log --all --format=%5 -- path/to/file/filename | xargs -I{} -n 1 echo {} found in && git branch --contains {}

    Further, if you had any renames, you may want to include --follow for the git log command.

    hope this helps.

    This is an inelegant brute-force method but I expect it should work. Make sure you’ve stashed any uncommitted changes first as it will switch which branch you are currently on.

    for branch in $(git for-each-ref --format="%(refname:short)" refs/heads); do
        git checkout $branch && git grep SOMETHING
    Git Baby is a git and github fan, let's start git clone.