エイリアスやスクリプトを作成する以外に、特定のコミットの差分を取得するための短いコマンドはありますか?
git diff 15dc8^..15dc8
単一のコミットIDのみを指定した場合git diff 15dc8
、そのコミットはHEADと比較されます。
エイリアスやスクリプトを作成する以外に、特定のコミットの差分を取得するための短いコマンドはありますか?
git diff 15dc8^..15dc8
単一のコミットIDのみを指定した場合git diff 15dc8
、そのコミットはHEADと比較されます。
回答:
を使用しgit show $COMMIT
ます。コミットのログメッセージと、その特定のコミットの差分が表示されます。
使用する:
git diff 15dc8^!
次のgit-rev-parse(1)マンページ(または最新のgit gitrevisions(7)マンページ)で説明されているように:
コミットとその親コミットによって形成されるセットに名前を付けるための他の2つの省略形が存在します。r1 ^ @表記は、r1のすべての親を意味します。r1 ^!コミットr1を含みますが、そのすべての親を除外します。
これは、リビジョンが必要なgitの任意の場所の15dc8^!
省略形として使用できることを意味します15dc8^..15dc8
。diffコマンドの場合、はとgit diff 15dc8^..15dc8
理解されますgit diff 15dc8^ 15dc8
。つまり、commit(15dc8^
)の親とcommit()の違いを意味し15dc8
ます。
注:git-rev-parse(1)
マンページの説明では、リビジョン範囲について説明しており、複数の親を持つマージコミットでも機能する必要があります。次にr1^!
「r1 --not r1^@
」すなわち「r1 ^r1^1 ^r1^2 ...
」
また、を使用git show COMMIT
して、コミットの説明とコミットの差分を取得することもできます。差分だけが必要な場合は、git diff-tree -p COMMIT
^!
親簡略表記は、通常のコミットのためdifftoolで正常に動作しますが、差分をマージコミットのために逆転されます。なんでそうなの?
どれだけ前に戻ったかわかっている場合は、次のようなことを試すことができます。
# 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
これにより、を使用git sd $COMMIT
してdiffを表示できます。
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"