Git:異なるブランチの2つの異なるファイルを比較する方法は?


170

異なるブランチに2つの異なるファイルがあります。1つのコマンドでそれらをどのように比較できますか?

何かのようなもの

# git diff branch1/foo.txt branch2/foo-another.txt

他のファイルをチェックアウトして、差分を取り、復元することもできますが、これはかなり汚い解決策です。


3
@EugenKonkovこの質問は異なるブランチの異なるファイルを比較する方法を尋ねているため、重複ではありません。リンクされた質問は、異なるブランチで同じファイルを比較する方法を尋ねるだけです。
スティーブ

回答:


214
git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt

相対パスを使用することもできます。

git diff branch1:./relative/path/to/foo.txt branch2:./relative/path/to/foo-another.txt

9
驚くばかり!私は確かにそれを推測することができませんでしたgit help diff。ちなみに、これらはコロンの前のブランチ名である必要はありませんが、あらゆる種類のコミット参照(SHA-1値など)にすることができます。
Steve Jorgensen

3
重要な注意:WindowsのGitでは、完全なitemspecをUNIX名にする必要があります。つまり、branch1:full \ path \ to \ foo.txtは失敗しますが、branch1:full / path / to / foo.txtは、full \ path \ to \ foo.txt(ブランチなし)と同様に正常に機能します
Eris

を使用git difftoolしてからドロップするbranch2:と、現在の作業ツリー内のファイルを編集できます(からの変更を引き継ぐためbranch1
gMale

Linuxでgitバージョン1.8.3.1を試しましたが、相対パスのみが許可されています。
ソラヤン

21

補足:絶対パスは必要ありません./。相対パスから始めることができます。時々重宝します。

git diff branch1:./relative/path/to/foo.txt branch2:./relative/path/to/foo-another.txt

2

2つの異なるブランチからのファイルを比較する多くの方法があります。例えば:

  • 名前が同じか異なる場合:

     git diff branch1:file branch2:file
    

    例:

     git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt
    
  • 名前が同じで、現在の作業ディレクトリをいくつかのブランチと比較したい場合のみ:

    git diff ..someBranch path/to/file
    

    例:

    git diff ..branch2 full/path/to/foo.txt
    

    この例では、実際のブランチのファイルをマスターブランチのファイルと比較しています。

この応答を確認できます。

Gitの2つの異なるブランチのファイルを比較する


1

トピック外の回答-コメントを参照

それを追加するためだけに、それは非常に簡単な構文だと思います:

git diff <branch1> <branch2> <filepath>

以下のような相対参照でも機能します。

# compare the previous committed state from HEAD with the state branch1 was 3 commits ago
git diff HEAD^ <branch1>~3 <filepath>

1
OPは特に「異なるファイル」を要求しました。あなたの答えは、2つの異なるブランチで同じファイルを比較することです。
Etienne Miret、

@EtienneMiret正解です。その重要なポイントを逃しました。主題外の答え。
RomainValeri、

-1

git diff適用する開始と範囲を指定できます。範囲は..表記で示されます。

branch1=somebranch
branch2=someotherbranch
git diff ${branch1}..${branch2} -- file_path

これは、2つのブランチで同じファイルを比較するだけです。問題は、2つのブランチにある2つの異なるファイルについてでした。
ピラン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.