web-dev-qa-db-ja.com

2つの異なるブランチからファイルを比較する方法

あるブランチではうまく機能し、別のブランチでは機能しないスクリプトがあります。 2つのバージョンを並べて見て、何が違うのかを確認したいと思います。これを行う方法はありますか?

明確にするために 私は比較ツールを探していない(私はBeyond Compareを使用しています)。変更点を確認するために、マスターバージョンと現在のブランチバージョンを比較できるようにするgit diffコマンドを探しています。私はマージ中などではありません。私はちょうど何かのように言いたいです

git diff mybranch/myfile.cs master/myfile.cs
1283
Micah

git diffは2つのコミットの違いをあなたに示すことができます。

git diff mybranch master -- myfile.cs

または、同等に

git diff mybranch..master -- myfile.cs

後者の構文を使用して、どちらかの側がHEADである場合、それは省略することができます(例えばmaster..masterHEADと比較します)。

mybranch...masterにも興味があるかもしれません( git diff docs から):

このフォームは、2つの<commit>の共通の先祖から始めて、2番目の<commit>を含むブランチの変更を表示するためのものです。 git diff A...Bgit diff $(git-merge-base A B) Bと同等です。

言い換えれば、これはmasterから分岐しているのでmybranchの変更の差分を示します(ただし、それ以降はmybranchに新しい変更はありません)。


すべての場合において、ファイル名の前の--区切り文字はコマンドラインフラグの終わりを示します。引数がコミットまたはファイルを参照している場合にGitが混乱しない限り、これはオプションですが、それを含めることは悪い習慣ではありません。いくつかの例については https://stackoverflow.com/a/13321491/54249 を参照してください。


同じ引数をgit difftoolに渡しても構いません。

1781
dahlbyk

これができます: git diff branch1:file branch2:file

Difftoolが設定されている場合は、次のこともできます。 git difftool branch1:file branch2:file

関連質問: どのようにしてビジュアルdiffプログラムでgit diffの出力を見るのですか

341
Tim Henigan

より現代的な構文:

git diff ..master path/to/file

二重ドットの接頭辞は「現在の作業ディレクトリから」までを意味します。と言うこともできます:

  • master..、つまり上記の逆。これはmasterと同じです。
  • 現在の作業ツリー以外の状態を明示的に参照するmybranch..master
  • v2.0.1..master、つまりタグの参照.
  • [refspec]..[refspec]、基本的にgitのコード状態として識別可能なもの。
135
Joe Atzberger

2つの異なるブランチからファイルを比較する方法はたくさんあります。

  • オプション1: n特定のブランチから別の特定のブランチへファイルを比較したい場合:

    git diff branch1name branch2name path/to/file
    

    例:

    git diff mybranch/myfile.cs mysecondbranch/myfile.cs
    

    この例では、“ mybranch”ブランチのファイルと“ mysecondbranch”ブランチのファイルを比較しています。

  • オプション2: 簡単な方法:

     git diff branch1:file branch2:file
    

    例:

     git diff mybranch:myfile.cs mysecondbranch:myfile.cs
    

    この例は、オプション1と似ています。

  • オプション3: /現在の作業ディレクトリを他のブランチと比較したい場合:

    git diff ..someBranch path/to/file
    

    例:

    git diff ..master myfile.cs
    

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

15
Javier C.

私は単にgit diff branch1 branch2 path/to/fileをします

これはファイル間の違いをチェックします。 branch1の変更は赤字になります。 branch2の変更は緑色になります。

branch1は過去、branch2は未来です。 diffのブランチの順番を逆にすることでこれを逆にすることができます:git diff branch2 branch1

8
iGbanam

@dahlbykが提案した答えに同意する。コードレビュー用に差分を差分ファイルに書き込む場合は、次のコマンドを使用します。

git diff branch master -- filepath/filename.extension > filename.diff --cached
3
Azad

現在のブランチに対して差分を作成したい場合は、それを省略して使用できます。

git diff BRANCH -- path/to/file 

このようにして、それは現在のブランチから参照されているブランチ(BRANCH)へと拡散します。

1
Paulo Fidalgo

私の場合は、下記のコマンドを使用します。

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

このコマンドは、2つの異なるブランチで同じファイルを比較するのに役立ちます。

1
SKT

これを行う最良の方法は、次のようにgit diffを使用することです。 git diff <source_branch> <target_branch> -- file_path

それらのブランチのファイル間の違いをチェックします。 gitコマンド およびそれらがどのように機能するかについての詳細はこの記事を見てください。

0
Nesha Zoric

このようにコミットハッシュを使用します。

git diff <hash1> <hash2> <filename>

ここで hash1 は任意のブランチからの任意のコミットで、 hash2 と同じです。

0
prometeu

Git bash内の2つのファイルを比較するためには、以下のコマンドを使用する必要があります。

git diff <Branch name>..master -- Filename.extension   

このコマンドはbash自体の2つのファイルの違いを表示します。

0
Rishav_SO