git diff
などを使用してmeldなどのdiffビューアでgit difftool
コマンドの出力を表示する方法を示すSOの質問がたくさんあります。ただし、git diff
については質問していません。
Meldなどのdiffビューアでgit show <previous commit sha1>
の出力を表示したい。これどうやってするの?
git difftool
を使用して、単一のコミットを表示できます。
Sha1 abc123
でコミットを見たいとしましょう:
git difftool abc123~1 abc123
(~1
は前のコミットに移動するようにgitに指示するため、abc123~1
はabc123
の前のコミットです)
これを定期的に使用する場合は、カスタムgitコマンドを作成して簡単にすることができます。
git-showtool
のどこかに$PATH
というファイルを作成し、次の内容を含めます。
git difftool $1~1 $1
そのファイルに実行権限を与えます。
chmod +x ~/path/to/git-showtool
コマンドgit showtool <sha1 or tag or ...>
を使用します
Georgebrockの応答に基づいて、.gitconfigに次のようなエイリアスを作成できます。
showtool = "!showci () { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1"
次に、git showtool abc123
を使用して実行できます(このための個別のシェルスクリプトを作成する必要はありません)。リビジョンを省略すると、デフォルトでHEADになります。
Gitの知識が少ない方のためのsagittarianの提案を翻訳するには、これをグローバルに追加しますC:\ Users [user name]にあるグローバル。gitconfigファイル:Windowsユーザーの場合:
[alias]
showtool = "!showci () { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1"
または、get bashシェルで次のコマンドを実行できます。
git config --global alias.showtool '!showci () { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1'
。gitconfigファイルが変更されます。
Sagitarrianの答えに基づいて、より一般的なrev構文の小さな変更を以下に示します。
showtool = "!showci () { rev=$(git rev-parse \"${*:-HEAD}\"); git difftool $rev~1 $rev; }; showci"
rev-parse
を使用して、複雑なrev式を透過的に許可します。
エイリアスが呼び出されて引数が続くため、最後に$1
を削除しました。 $1
のみを使用すると、気付かれずに通過しますが、$*
の動作が壊れます。
これにより、次のような素晴らしいことを行うことができます。
git showtool :/some nasty bug
Geogrebrockの回答は問題ありませんが、次のように改善できます。
commit=$1
shift
git difftool $commit~1 $commit $@
$ PATHのどこかにある実行可能(chmod + x)ファイルに入れます。
これで、追加の引数を渡すことができます。たとえば、表示するファイルを指定します(他のファイルは無視します)。
$ git showtool 6a40ec6ffb9338b0548aefab92fded1bffb1648a -- src-cmn/
PATHのgit-showcommit
ファイル(実行可能ファイル)は次のようになります。
#!/bin/bash
git difftool --dir-diff $1^..$1
その後、git showcommit HEAD
またはgit showcommit a5b26d5
で新しいツールを呼び出すだけです。