ファイルの現在の作業コピーを別のブランチのコミットされたコピーと比較する


158

私はfooマスターブランチにファイルのあるリポジトリを持っています。バーブランチに切り替えて、に変更を加えましたfoogit diffこのコピー(まだコミットされていません)とマスターブランチのコピーの間でどのように実行できますか?

回答:


151

次は私のために働きます:

git diff master:foo foo

過去には、次のような状況でした。

git diff foo master:foo


9
に関するあなたの答えを見るたびにgit diff、私は常にstackoverflow.com/questions/5256249/git-diff-doesnt-show-enough/…を
思い出し

@VonC:ありがとう、それを描く価値があったことを知ってうれしいです:)ちなみに、私が私の答えを更新した奇妙さをたまたま理解していますか?
Mark Longair、2012

2
--パス引数からパラメーターを分離するために、aを試しましたか?git diff -- master:foo foo
VonC、

1
1.8ではgit diff -- master:foo foo機能しません-arg master:fooをブランチ内のファイルではなく、存在しないファイル名として扱い(無視し)ているようです。最後の2つの引数を切り替えてみてください-うまくいった場合、差分比較は逆になりますが、出力は変わりません。
ケルビン

9
私にとってはそれは逆です-私はできますgit diff master:foo fooが、その逆はできません。よくわかりません。git 1.7.9.5 / Ubuntu 12.04を使用すると、少なくともgit diff -R master:foo foo実際に必要な差分を取得できます。私は、x64 1.9.4 / Windows 7のmsysgitと私が得ることをしようとしますfatal: unable to read 0000000000000000000000000000000000000000。なければ-R私はgitの1.7.9.5であなたと同じエラーメッセージが出ますが、1.9.4で、私が得ますfatal: master:foo: no such path in the working tree
JMM

100

作業ツリーを特定のブランチ名と比較しようとしているので、次のようにします。

git diff master -- foo

これは、この形式のgit-diffからのものです(git-diffのマンページを参照)

   git diff [--options] <commit> [--] [<path>...]
       This form is to view the changes you have in your working tree
       relative to the named <commit>. You can use HEAD to compare it with
       the latest commit, or a branch name to compare with the tip of a
       different branch.

参考までに、作業ツリーのすべてではなく、ステージングしたものの差分を表示する--cached(別名--staged)オプションもあります。

   git diff [--options] --cached [<commit>] [--] [<path>...]
       This form is to view the changes you staged for the next commit
       relative to the named <commit>.
       ...
       --staged is a synonym of --cached.

2
ありがとう。理由はわかりませんが、Linuxでgit 1.8.1を使用すると、この答えだけが機能しました。
14

優れたありがとう。現在のブランチの名前をdiffコマンドに含めたいと思ってハングアップしましたが、それは必要ないようです。
ヨーヨー、2015

これは数か月前はうまくいきましたが、今はうまくいかないようです。現在私はgitバージョン2.7.4(Apple Git-66)です。以前何があったかわかりません。
hBrent 2016年

@hBrentこれは、OSX 10.11とgit 2.7.3で動作します。これが役立つ場合の手順を含む簡単なサンプルリポジトリです:github.com/jordan-brough/git-diff-test
Jordan Brough

@JordanBroughに感謝します。
hBrent 2016年

14

また: git diff master..feature foo

git diff foo master:foo私のためのディレクトリでは動作しませんので。


私もダメ。それはWindowsのものですか?
スコットスタッフォード

@ScottStafford私はUbuntuを使用しているので、いいえ、それは単なるWindowsのものではないようです。
ArtBIT 2013

両方のブランチ名(ウィンドウ)を明示的に指定している限り、私にとっては機能します git diff branch1:foo master:foo
Meep

12
git difftool tag/branch filename

これは、ファイルのローカル作業コピーと、リモートリポジトリ(「origin」ではない)のそのファイルバージョンとを比較するために私のために機能した唯一の回答です。おかげで、アディールとバズ
マウス

git difftool-vdocs git-scm.com/docs/git-difftoolによるとオプションはありません。もしかして-y
ks1322

10
git diff mybranch master -- file

うまくいくはず


4
これは、mybranchにコミットされたファイルでのみ機能し、ファイルの現在の作業コピーでは機能しません。
ヨーヨー、2015

上記の「-」の意味
Pushparaj

これは、両方の方向に比較できますgit diff deployment master -- fileし、git diff master deployment -- file期待どおりに動作している任意の2つの支店を持ちます
viktorkho

0

ローカルの変更を確認するには、現在のブランチと比較してください

git diff .

ローカルの変更を確認するには、他の既存のブランチと比較してください

git diff <branch-name> .

特定のファイルの変更を確認するには

git diff <branch-name> -- <file-path>

必ずgit fetch最初に実行してください。

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