Reputation: 13051
How can I get the diff between two commits of the same file using magit
?
Directly form git
one can do this. But I don't know how to do it from within magit
. From magit-status
it seems that d
and D
returns the diff of the whole repository. This is very problematic for me as the repository is huge and it causes magit
(and in turn emacs
) to become unresponsive. Is there a way to ask magit
to restrict the search to only one file from the repository?
I also tried, in the magit-status
buffer to do : diff $start_commit..$end_commit -- path/to/file
. This works, but the output is a simple buffer without any highlighting nor any folding options...
Upvotes: 17
Views: 5693
Reputation: 673
You can also do M-x
and magit-ediff-compare
.
Then enter the SHA of the older commit and then the filename of the file you want to compare to HEAD
, all on the same branch.
Upvotes: 4
Reputation: 1025
Building up from @cdidyk answer, it is also (now) possible to select the range of the diff with text selection to go quicker than typing the hashes of the commits.
So a quicker (and more visual) sequence could be :
C-SPC
(or V
if you use evil-mode)=f
to specify the file (path relative to the project root folder)d
to open the diff popupd
to open the dwim buffer or r
for diff range (They do mostly the same thing in this case, I think)Upvotes: 3
Reputation: 696
In case anyone stumbles across this now, it is now possible to do this in magit (I do this from magit-log but you can probably do it from elsewhere, too):
d
to open the magit-diff-popup=f
to specify the file you want to view (enter path relative to the project root dir)r
to do a diff range. You will be asked for the commit range, for example, 4abcde2..HEAD
. Alternately, if you highlight the range of commits in magit-log, the range will be set for you automatically with no prompt.This way, you end up in a magit-diff buffer complete with highlighting and code folding.
Upvotes: 12
Reputation: 13051
One way to go is to use vc
as suggested by this related answer - in particular C-u C-x v =. However, this return a buffer without the possibility to (un)fold chunks.
Upvotes: 5