Buttons840
Buttons840

Reputation: 9657

How can I view the output of `git show` in a diff viewer like meld, kdiff3, etc

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

Answers (6)

fiorentinoing
fiorentinoing

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

MateuszL
MateuszL

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

John Gliksberg
John Gliksberg

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

Michael Szczepaniak
Michael Szczepaniak

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

sagittarian
sagittarian

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

georgebrock
georgebrock

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:

  1. Create a file called git-showtool somewhere on your $PATH with the following contents:

    git difftool $1~1 $1
    
  2. Give that file execute permissions:

    chmod +x ~/path/to/git-showtool
    
  3. Use the command git showtool <sha1 or tag or ...>

  4. Profit.

Upvotes: 77

Related Questions