エイリアスやスクリプトを書く以外に、特定のコミットの差分を取得するための短いコマンドはありますか?
git diff 15dc8^..15dc8
コミット id を 1 つだけgit diff 15dc8
指定すると、そのコミットが HEAD と比較されます。
を使用しgit show $COMMIT
ます。コミットのログ メッセージと、その特定のコミットの差分が表示されます。
使用する:
git diff 15dc8^!
git-rev-parse(1) man ページ (または最新の Git gitrevisions(7) man ページ)の次のフラグメントで説明されているように:
コミットとその親コミットによって形成されるセットに名前を付けるための省略表現が他に 2 つあります。r1^@ 表記は、r1 のすべての親を意味します。r1^! コミット r1 が含まれますが、その親はすべて除外されます。
これは、リビジョンが必要な Gitの任意15dc8^!
の場所の省略形として使用できることを意味します。diffコマンドの場合、15dc8^..15dc8
はとして理解されます。これは、commit ( ) の親と commit ( )の違いを意味します。git diff 15dc8^..15dc8
git diff 15dc8^ 15dc8
15dc8^
15dc8
注: man ページの説明では、複数の親を持つマージ コミットでも機能する必要があるgit-rev-parse(1)
リビジョン範囲について説明しています。それならr1^!
「r1 --not r1^@
」つまり「r1 ^r1^1 ^r1^2 ...
」
また、git show COMMIT
コミットの説明と差分を取得するために使用できます。差分のみが必要な場合は、 を使用できますgit diff-tree -p COMMIT
。
どれくらい前にさかのぼるかがわかっている場合は、次のようなことを試すことができます。
# Current branch vs. parent
git diff HEAD^ HEAD
# Current branch, diff between commits 2 and 3 times back
git diff HEAD~3 HEAD~2
以前のコミットは次のように機能します。
# Parent of HEAD
git show HEAD^1
# Grandparent
git show HEAD^2
コミットを指定する方法はたくさんあります:
# Great grandparent
git show HEAD~3
詳しくはこちらのページをご覧ください。
mipadiが指摘しているように、 を使用できますgit show $COMMIT
が、これにはいくつかのヘッダーとコミット メッセージも表示されます。単純な差分が必要な場合は、 を使用しますgit show --pretty=format:%b $COMMIT
。
これは明らかに非常に短い手ではないため、このエイリアスを .gitconfig に保持しています
[alias]
sd = show --pretty=format:%b
これにより、diffgit sd $COMMIT
を表示するために使用できます。
git diff 15dc8 15dce~1
~1 は「親」、~2 は「祖父母」などを意味します。
ポールのソリューションは、私が望んでいたことを行いました。
$ git diff HEAD^1
また、前述のホブのようなエイリアスを追加すると便利です。~/.gitconfigファイルの [alias] セクションに次のように記述した場合、短縮形を使用して head と previous の間の差分を表示できます。
[alias]
diff-last = diff HEAD^1
$ git diff-lastを実行すると、結果が得られます。これには、コミット間の差分だけでなく、まだコミットしていない変更も含まれることに注意してください。まだコミットしていない変更を無視したい場合は、diff を使用して HEAD をその親と直接比較できます。
$ git diff HEAD^1 HEAD
これはエイリアスを使用しているため、質問に正確に答えることはできませんが、これらは意図したことを行うのに役立ちます...
alias gitdiff-1="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 2|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"
alias gitdiff-2="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 3|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"
alias gitdiff-3="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 4|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"
alias gitlog-1="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 2|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"
alias gitlog-2="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 3|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"
alias gitlog-3="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 4|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"