回答:
git diff
2つのコミットの違いを示すことができます:
git diff mybranch master -- myfile.cs
または、同等に:
git diff mybranch..master -- myfile.cs
いずれの側である場合には、後者の構文を使用してHEAD
、それが省略されてもよい(例えば、master..
比較master
しますHEAD
)。
興味があるかもしれませんmybranch...master
(git diff
docsから):
このフォームは
<commit>
、両方の共通の祖先から始まり、2番目までのブランチの変更を表示するためのもの<commit>
です。git diff A...B
と同等git diff $(git-merge-base A B) B
です。
言い換えると、これはmaster
からの変更の差分を提供しますmybranch
(ただし、からの新しい変更はありませんmybranch
)。
すべての場合において、--
ファイル名の前のセパレータは、コマンドラインフラグの終わりを示します。引数がコミットまたはファイルを参照する場合にGitが混乱しない限り、これはオプションですが、それを含めることは悪い習慣ではありません。いくつかの例については、https://stackoverflow.com/a/13321491/54249を参照してください。
git difftool
構成済みの場合、同じ引数を渡すことができます。
--
ます。よくある間違いは簡単です。)
git diff --name-status branch1..branch2
(おそらく明白ですが、他の誰かが私と同じ問題を抱えている場合に備えて言及しておきたいと思います)のように、ファイルへの完全パスを含めない限り、これは私にとってはうまくいきませんでした。
あなたはこれを行うことができます:
git diff branch1:path/to/file branch2:path/to/file
difftoolを構成している場合は、次のこともできます。
git difftool branch1:path/to/file branch2:path/to/file
branch1:./file
。これは、ファイルがブランチ間の別の場所にある場合にも役立ちます(例:)git diff branch1:old/path/to/file branch2:new/path/to/file
。
git diff branch1 branch2 path/to/file
。
より現代的な構文:
git diff ..master path/to/file
二重ドットの接頭辞は、「現在の作業ディレクトリから」を意味します。次のように言うこともできます:
master..
、つまり上記の逆。これはと同じmaster
です。mybranch..master
、現在の作業ツリー以外の状態を明示的に参照します。v2.0.1..master
つまり、タグを参照します。[refspec]..[refspec]
、基本的にはgitのコード状態として識別可能なもの。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
この例では、実際のブランチのファイルをマスターブランチのファイルと比較しています。
私は単にします git diff branch1 branch2 path/to/file
これにより、ファイル間の違いがチェックされます。の変更はbranch1
赤で表示されます。の変更はbranch2
緑色になります。
それbranch1
が過去でありbranch2
未来であると想定されています。差分のブランチの順序を逆にすることでこれを逆にすることができます:git diff branch2 branch1
ファイルを比較するシナリオは2つあります。
シナリオ1:リモートブランチでファイルを比較します(両方のブランチがリモートリポジトリに存在する必要があります)
シナリオ2:ローカルファイル(ローカル作業領域のコピー)とリモートリポジトリのファイルを比較します。
ロジックは簡単です。diffに2つのブランチ名を指定すると、常にリモートブランチが比較されます。ブランチ名を1つだけ指定すると、ローカルの作業コピーとリモートリポジトリ(指定したもの)が常に比較されます。範囲を使用して、リモートリポジトリを提供できます。
例:ブランチをチェックアウトする
git checkout branch1
git diff branch2 [filename]
この場合、ファイル名を指定すると、ファイル名のローカルコピーが「branch2」という名前のリモートブランチと比較されます。
git diff branch1 branch2 [filename]
この場合には、それは「という名前のリモートブランチからのファイル名を比較します支社」対「BRANCH2」
git diff ..branch2 [filename]
この場合も、それは「という名前のリモートブランチからのファイル名を比較します支社」対「BRANCH2」。したがって、上記と同じです。ただし、別のブランチからブランチを作成したばかりで、「master」と言っていて、現在のブランチがリモートリポジトリに存在しない場合、リモート「マスター」とリモート「branch2」が比較されます。
その有用を願っています。
git diff branch1 branch2 myfile.cs
。(--
最大2つのリビジョン引数を取ることができるため、これはもう必要ありません。)