493

エイリアスやスクリプトを書く以外に、特定のコミットの差分を取得するための短いコマンドはありますか?

git diff 15dc8^..15dc8

コミット id を 1 つだけgit diff 15dc8指定すると、そのコミットが HEAD と比較されます。

4

8 に答える 8

674

を使用しgit show $COMMITます。コミットのログ メッセージと、その特定のコミットの差分が表示されます。

于 2009-01-12T18:06:26.960 に答える
468

使用する:

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^..15dc8git diff 15dc8^ 15dc815dc8^15dc8

: man ページの説明では、複数の親を持つマージ コミットでも機能する必要があるgit-rev-parse(1)リビジョン範囲について説明しています。それならr1^!r1 --not r1^@」つまり「r1 ^r1^1 ^r1^2 ...


また、git show COMMITコミットの説明と差分を取得するために使用できます。差分のみが必要な場合は、 を使用できますgit diff-tree -p COMMIT

于 2009-01-16T00:43:23.973 に答える
58

どれくらい前にさかのぼるかがわかっている場合は、次のようなことを試すことができます。

# 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

詳しくはこちらのページをご覧ください

于 2009-01-12T19:34:29.653 に答える
11

mipadiが指摘しているように、 を使用できますgit show $COMMITが、これにはいくつかのヘッダーとコミット メッセージも表示されます。単純な差分が必要な場合は、 を使用しますgit show --pretty=format:%b $COMMIT

これは明らかに非常に短い手ではないため、このエイリアスを .gitconfig に保持しています

    [alias]
      sd = show --pretty=format:%b

これにより、diffgit sd $COMMITを表示するために使用できます。

于 2012-03-14T09:16:05.753 に答える
3
git diff 15dc8 15dce~1

~1 は「親」、~2 は「祖父母」などを意味します。

于 2012-11-26T15:40:51.450 に答える
3

ポールのソリューションは、私が望んでいたことを行いました。

$ git diff HEAD^1

また、前述のホブのようなエイリアスを追加すると便利です。~/.gitconfigファイルの [alias] セクションに次のように記述した場合、短縮形を使用して head と previous の間の差分を表示できます。

[alias]
    diff-last = diff HEAD^1

$ git diff-lastを実行すると、結果が得られます。これには、コミット間の差分だけでなく、まだコミットしていない変更も含まれることに注意してください。まだコミットしていない変更を無視したい場合は、diff を使用して HEAD をその親と直接比較できます。

$ git diff HEAD^1 HEAD
于 2013-12-06T12:08:44.813 に答える
0

これはエイリアスを使用しているため、質問に正確に答えることはできませんが、これらは意図したことを行うのに役立ちます...

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"
于 2012-05-02T06:28:45.773 に答える