現在のバージョンと最後のバージョンの違いを見つける


670

Gitを使用して、現在のバージョンと最後のバージョンの違いをどのようにして見つけることができますか?

git diff last version:HEAD

1
リポジトリのクラウドの場所にGitHubを使用する場合、それは非常に簡単です。プロジェクトに移動し、プロジェクトを表示する表の見出し「commits」をクリックします
David Lundquist

1
「現在と最後のバージョン」の意味は、質問で本当に明確にされるべきです。
かすかな信号

回答:


1170

「最終版」の意味がよくわかりません。

以前のコミットはHEAD ^でアクセスできるため、次のようなものを探していると思います。

git diff HEAD^ HEAD

Git 1.8.5以降、はの@エイリアスであるためHEAD、以下を使用できます。

git diff @~..@

以下も機能します:

git show

ヘッドとコミットの違いを知りたい場合は、以下を使用できます。

git diff commit_id HEAD

そして、これはあなたのビジュアル差分ツールを起動します(設定されている場合):

git difftool HEAD^ HEAD

HEADとの比較はデフォルトなので、省略できます(Orientで指摘されています)。

git diff @^
git diff HEAD^
git diff commit_id

警告

  • @ScottFおよび@Panzercrisisは、Windowsでは~文字の代わりに文字を使用する必要があることをコメントで説明しています^

コミットされたバージョンとその前のバージョンのようなものが欲しかった... git diff head head-1
Rajeev

7
Git 1.8.5以降、はの@エイリアスですHEAD。そして、1つのコミットだけを戻す場合も同じなので~、タイプするの^git diff @~..@はるかに簡単です。
アンドリュー

80
@Andrew git show@~..@デフォルトで表示されるため、さらに簡単です。
アマロイ2014年

3
git showコミットメッセージを出力するだけで、少なくともGit 2.5.4(Apple Git-61)では特定の変更の差分を出力しないため、実際にはOPの質問に対する答えにはなりません。
user1944491

1
問題がgit showあればということでHEADあるマージはマージが変更自体を持たないかもしれない自分自身をコミットするので、あなたが期待するもの得ることはありませんコミット。git diff HEAD^ HEADバージョン間の実際の変更が表示されます
RubenLaguna 2018

157

「現在のバージョン」が作業ディレクトリ(コミットされていない変更)であり、「最後のバージョン」がHEAD(現在のブランチの最後にコミットされた変更)であると仮定して、単に

git diff HEAD

次のクレジットはユーザーに付与されますCerran

また、-aコミット時にステージング領域を常にスキップする場合は、単にを使用できますgit diff

概要

  1. git diff ステージングされていない変更を示します。
  2. git diff --cached 段階的な変更を示します。
  3. git diff HEAD すべての変更を表示します(段階的および非段階的)。

出典:git-diff(1)マニュアルページ– Cerran


16
また、-aコミット時にステージング領域を常にスキップする場合は、単にを使用できますgit diff。<1> git diffは、段階的でない変更を示しています。<2> git diff --cached段階的な変更を示しています。<3> git diff HEADすべての変更を示します(ステージングされたものとステージングされていないものの両方)。出典:git-diff(1)マニュアルページ
Cerran

1
これは、質問の意図に答えるため、受け入れられる答えになるはずです。
tgoneil 2018

gitの「現在のステージされていないバージョン」の名前は何ですか?名前はありますか?
Mathieu CAROFF

118

上で指摘したようにコメントすることによりamalloy、あれば「現在、最後のバージョン」で、あなたが最後のコミットを意味し、その前にコミットし、あなたが使用するだけでし

git show

5
これは私が探していたものです。すばらしい答えです。
CodeManiak

12
git show HEAD~1最後の1つのコミットを表示するために使用しgit show HEAD~2、古いコミットの場合はなどを使用します。で1つのファイルのみを表示しますgit show HEAD~2 my_file
Florian Brucker

60

最後の1回のコミットと最後のコミットの差分(さらに、存在する場合は現在の状態):

git diff HEAD~

または(タイプしやすい)

git diff @~

@は、HEAD現在のブランチのシノニムであり、~「言及されたリビジョンの親を与える」ことを意味します。


git diff HEAD^(同等のHEAD~形式ではなく)私はかなり好きです。私のような "古いgit"の方が覚えやすい
でしょう

3
ニンジンはいくつかのターミナルで問題です。オプションがあると
便利

1
~@は何を意味するかを説明することで、回答を改善できます。
Bob Stein

1
最後のコミットで何がコミットされたかを確認したいだけの場合は、これを使用しないでください(ダーティな変更はdiffに影響するため)。構文はもっと短くするdiff HEAD^ HEADべきですgit diff @^!git-scm.com/docs/gitrevisions forr1^!
Johnny Wong

@JohnnyWong説明をありがとうございます。読者を混乱させないために「現状」について述べました。
Tomilov Anatoliy

53

次の方法でも行うことができます。

以前のコミットと比較する

git diff --name-status HEAD~1..HEAD

現在および以前の2つのコミットと比較する

git diff --name-status HEAD~2..HEAD

16

cached追加したがまだコミットしていない場合は、フラグを使用してください。

git diff --cached --color

1
これは、この質問を見つけたときに私が探していたものとまったく同じでした。ありがとう!
ウィリアムロジャース、

7

あなたがマスターにいると仮定すると、素早く簡単です:

    git diff (checkout_id):file.txt file.txt

例:

    git diff asdfioei91819280din198:file.txt file.txt

4

まず、「git log」をしてリポジトリのログを一覧表示します。

次に、2つのコミットに関連する2つのコミットIDを選択します。違いを確認したい場合( -最上位のコミットと一部の古いコミット(現在のバージョンと一部の古いバージョンの期待どおり))。

次に、以下を使用します。

git diff <commit_id1> <commit_id2>

または

git difftool <commit_id1> <commit_id2>

3

トップコミットがHEADによってポイントされている場合、次のようなことができます。

commit1 -> HEAD
commit2 -> HEAD~1
commit3 -> HEAD~2

最初と2番目のコミットの違い:

git diff HEAD~1 HEAD

最初と3番目のコミットの違い:

git diff HEAD~2 HEAD

2番目と3番目のコミットの違い:

git diff HEAD~2 HEAD~1

等々...


2

Eclipse EGitプラグインがインストールされたEclipse IDEでBitbucketを使用します。

その履歴の任意のバージョン(SVNなど)のファイルを比較します。

メニュープロジェクトエクスプローラ→ ファイル →右クリック→ チーム履歴に表示

これにより、そのファイルのすべての変更の履歴が表示されます。次にCtrl、任意の2つのバージョンをクリックして選択します→ 「相互に比較」


2

これはタグでも機能します(すべての変更を確認する必要がある場合は、以下の「uniq」およびその他の部分を削除してください)。

 git diff v1.58 HEAD 

以下は同じで、モノリシックリポジトリ内のマイクロサービスの継続的インテグレーション(CI)に役立ちます。

git diff v1.58 HEAD  --name-only | sort -u | awk 'BEGIN {FS="/"} {print $1}' | uniq
<Folder Name> 

(クレジット-https://dzone.com/articles/build-test-and-deploy-apps-independently-from-a-mo

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.