Is there a quick way to "git diff" from the point or branch origin?
You can diff the current branch from the branch start point using:
git diff (start point)...
Where (start point) is a branch name, a commit-id, or a tag.
Eg if you're working on a feature branch branched from develop
, you can use:
git diff develop...
for all changes on the current branch since the branch point.
This was already mentioned in a comment, but I think it deserves answer status. I don't know what it will do since last rebase.
For diffs, you want the three-dot notation. If your branch is called dev
and it branched from master
:
% git diff master...dev
For log, you want the two-dot notation:
% git log master..dev
The revision syntax r1..r2
(with two dots) means "everything reachable from r2
(inclusive) but not reachable from r1
(inclusive)". The normal way to use this is to think of r1
and r2
as specifying a range in a sequence of commits (r1
exclusive, r2
inclusive), so if you have 10 revisions, 3..7
will show you changes 4, 5, 6, and 7. It's {1, 2, 3, 4, 5, 6, 7}
minus {1, 2, 3}
. But r1
doesn't necessarily have to be an ancestor of r2
. Think of it more like a set operation where r1
represents the entire ancestry from r1
backwards, and r2
represents the entire ancestry from r2
backwards, and you're subtracting the first set from the second set.
So then:
git log master..dev
is the entire history of the branch minus the entire history of master. In other words, just the branch.
You can find the branch point using git merge-base
. Consider master
the mainline and dev
the branch whose history you are interested in. To find the point at which dev
was branched from master
, run:
git merge-base --fork-point master dev
We can now diff dev
against this basis:
git diff $(git merge-base --fork-point master dev)..dev
If dev
is the current branch this simplifies to:
git diff $(git merge-base --fork-point master)
For more information see the git-merge-base
documentation.
Use git diff @{u}...HEAD
, with three dots.
With two dots, or with HEAD
omitted, it will show diffs from changes on both sides.
With three dots, it will only show diffs from changes on your side.
Edit: for people with slightly different needs, you might be interested in git merge-base
(note that it has plenty more options than the other answer uses).