Reputation: 9657
There are many SO questions that show how to view the output of a git diff
command in a diff viewer like meld using git difftool
or otherwise. I am not asking about git diff
though.
I want to see the output of git show <previous commit sha1>
in a diff viewer like meld. How can I do this?
Upvotes: 70
Views: 17755
Reputation: 1007
The git-showcommit
file (executable) in the PATH should be as follow:
#!/bin/bash
git difftool --dir-diff $1^..$1
then you can simply call the new tool by git showcommit HEAD
or git showcommit a5b26d5
Upvotes: 1
Reputation: 3003
Geogrebrock answer is fine, but can be improved thus:
commit=$1
shift
git difftool $commit~1 $commit $@
Put it in executable (chmod +x) file somewhere in $PATH.
Now you can pass additional arguments, for example specify what files you want to see (and ignore others):
$ git showtool 6a40ec6ffb9338b0548aefab92fded1bffb1648a -- src-cmn/
Upvotes: 3
Reputation: 122
Building on sagitarrian's answer, here's a small change for more generic rev syntax:
showtool = "!showci () { rev=$(git rev-parse \"${*:-HEAD}\"); git difftool $rev~1 $rev; }; showci"
I use rev-parse
to transparently allow complex rev expressions.
I removed the $1
at the end, since the alias is called followed by the arguments; it passes unnoticed when using only $1
but breaks $*
behaviour.
This allows doing nice things like:
git showtool :/some nasty bug
Upvotes: 5
Reputation: 2150
Translating sagittarian's suggestion for the less git savvy, add this to your global .gitconfig file which resides in C:\Users[user name] if you are a windows user:
[alias]
showtool = "!showci () { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1"
or you can execute the following command in the get bash shell:
git config --global alias.showtool '!showci () { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1'
which will make the change to the .gitconfig file for you.
Upvotes: 15
Reputation: 1104
Building on georgebrock's response, you can create an alias in .gitconfig, something like this:
showtool = "!showci () { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1"
Then you can run it with git showtool abc123
(without needing to create a separate shell script for this). If you leave out the revision it will default to HEAD.
Upvotes: 32
Reputation: 30183
You can use git difftool
to show a single commit.
Say you want to see the commit with the sha1 abc123
:
git difftool abc123~1 abc123
(~1
tells git to move to the previous commit, so abc123~1
is the commit before abc123
)
If you use this regularly, you could make a custom git command to make it easier:
Create a file called git-showtool
somewhere on your $PATH
with the following contents:
git difftool $1~1 $1
Give that file execute permissions:
chmod +x ~/path/to/git-showtool
Use the command git showtool <sha1 or tag or ...>
Upvotes: 77