diff current working copy of a file with another branch's committed copy

Solution 1:

The following works for me:

git diff master:foo foo

In the past, it may have been:

git diff foo master:foo

Solution 2:

You're trying to compare your working tree with a particular branch name, so you want this:

git diff master -- foo

Which is from this form of git-diff (see the git-diff manpage)

   git diff [--options] <commit> [--] [<path>...]
       This form is to view the changes you have in your working tree
       relative to the named <commit>. You can use HEAD to compare it with
       the latest commit, or a branch name to compare with the tip of a
       different branch.

FYI, there is also a --cached (aka --staged) option for viewing the diff of what you've staged, rather than everything in your working tree:

   git diff [--options] --cached [<commit>] [--] [<path>...]
       This form is to view the changes you staged for the next commit
       relative to the named <commit>.
       ...
       --staged is a synonym of --cached.

Solution 3:

git difftool tag/branch filename

Solution 4:

Also: git diff master..feature foo

Since git diff foo master:foo doesn't work on directories for me.

Solution 5:

git diff mybranch master -- file

should also work