2つのリビジョン間で変更されたファイルを表示する


2105

しばらく分離されていて、どのファイルが変更されたかを知りたい2つのブランチをマージしたいと思います。

このリンクに出くわした:http : //linux.yyz.us/git-howto.htmlこれは非常に便利でした。

私が出会ったブランチを比較するツールは次のとおりです。

  • git diff master..branch
  • git log master..branch
  • git shortlog master..branch

「git status master..branch」のようなものが2つのブランチ間で異なるファイルのみを表示するかどうか疑問に思っていました。

新しいツールを作成せずに、これが今すぐ実行できる最も近いものだと思います(もちろん、ファイルが複数回変更された場合は繰り返し表示されます)。

  • git diff master..branch | grep "^diff"

私が逃したものがあるかどうか疑問に思っていました...


12
他に何人がこの質問のタイトルを誤解していると思いますか?実際には、2つのブランチ間のファイルの違いを見つけることです。ここで探していたのは、同じブランチの2つのリビジョン間のファイルの違いを確認する方法でした。それとも私だけですか?
Sandeepan Nath

4
@SandeepanNath:gitでは違いはありません。あなたは常に個々のコミットを参照しています。
Samuel O'Malley 2016年

@ SamuelO'Malley私はgitに慣れていないため、すべてのブランチが最終的にマスターブランチにマージされ、最終的にマスターがロールアウトされるという一見一般的な分岐戦略を検討しています。ここで、プロダクションがすでにマスターにあるが、ヒントの後ろにあるロールアウトのイベント(最後のロールアウトが最後のマスターマージの後に発生した場合は1つのリビジョンによる)を考慮して、これら2つのリビジョンの違いを確認します。何がロールアウトされるかを調べます。最後にマージされたブランチは見たくありません。私が間違っていたら訂正してください。
Sandeepan Nath

2
@SandeepanNath:ブランチ名を使用する代わりに、以下の回答を使用して、代わりにコミットIDを指定できます。または、ロールアウト時にタグを作成する場合は、コミットをタグ名で参照します。
Samuel O'Malley 2016年

1
@SandeepanNath 2つのブランチを比較することはできません。リビジョンを指定する必要があります。したがって、2つのブランチを比較すると、2つのリビジョンが比較されます。
Bastien Vandamme 2017

回答:


2575

現在のブランチとmasterブランチを比較するには:

$ git diff --name-status master

2つのブランチを比較するには:

$ git diff --name-status firstbranch..yourBranchName

上に読んgit diff公式ドキュメント


2
左側の各インデックスはどういう意味ですか(MとDがたくさんあります)。
gogogadgetinternet 2013

15
@ user446936-git status manページ@ kernel.org/pub/software/scm/git/docs/git-status.htmlで文字の意味を確認できます-特に、M ==変更、D ==削除
ジェームス・マニング

12
git diff --name-status your_branch...masteryour_branchがマスターから作成されてからマスターで発生した変更を出力します
Radu

1
ダブルドット演算子は、差分がペアワイズであるため、ここでは不要です。
jub0bs 2015

2
作業ツリーにない不明なリビジョンまたはパスを取得しました。
SuperUberDuper 2015年

408

試す

$ git diff --stat --color master..branchName

これにより、同じ行数を使用しながら、各変更に関する詳細情報が得られます。

別の方法でマージする場合は、ブランチを反転して、違いをさらに明確に把握することもできます。

$ git diff --stat --color branchName..master

77
(強くお勧めしますが、imho)git colorをオンにしている場合(config --global color.ui true)、- color をスキップできます。(私は
lks-

25
私はあなたと一緒に色についています!ところで私は言うつもりだったgit config --global color.ui true-完全にするために。
Art Swri

2
:仕事はエラーをスローし、しないfatal: ambiguous argument 'master..branchName': unknown revision or path not in the working tree.
トマーシュZato -復活モニカ

7
@TomášZato申し訳ありませんが、「branchName」をブランチの名前に置き換える必要があります。
Gerry

161

また、gitは安価で簡単に分岐できることにも注意してください。マージに問題があると思われる場合は、マージのブランチを作成します。したがって、masterマージしたい変更baがあり、マスターからのコードを必要とする私のブランチである場合、次のようにすることができます。

git checkout ba
git checkout -b ba-merge
git merge master
.... review new code and fix conflicts....
git commit
git checkout ba
git merge ba-merge
git branch -d ba-merge
git merge master

最終結果は、自分のブランチをねじ込む前に、使い捨てブランチでマージを試してみなければならないということです。自分が絡まった場合は、ba-mergeブランチを削除してやり直すことができます。


4
驚くばかり。私はそのように分岐することを考えたことはありません。これは、マージする際の「ベストプラクティス」の一部と見なす必要があると思います。
egelev 2015

ba-margeをbaにマージすると、再び競合を修正しなければならない可能性はありませんか?
Josef.B 2017年

2
@EricAndersonそうですね、それはグラフです。SVNは学校の机の下にガムのようにくっついています。THX。
Josef.B 2017年

1
ba-mergeに既にマスターがある場合、なぜ最後のステップ「git merge master」を実行する必要があるのですか
qwebek

省略できます。masterコードのレビューと競合の修正に取り組んでいる間に新しいものが到着した場合、それが役立つ唯一の理由です。
エリックアンダーソン

58

誰かが2つのブランチからdiffファイルを生成しようとしている場合:

git diff master..otherbranch > myDiffFile.diff

2
これは、多くの違いを含む大きなブランチで特に便利です。
vandsh 2015

これは、差が本当に大きい場合に役立ちます。デフォルトでは、コンソールにすべてのdiffが表示されるわけではありません(なぜだろうと思っていました)。そのような場合は、diffをファイルに渡すことをお勧めします。
rotimi-best

42

GUIベースの方法もあります。

gitkを使用できます。

  1. 実行:

    $ gitk --all
    
  2. ブランチのコミットを右クリックし、ポップアップメニューで[ このコミットマーク]を選択します。

  3. 別のブランチのコミットを右クリックして、[ これ比較->コミットをマーク]または[コミットをマーク->これを比較 ]を選択します。

次に、右下のパネルに変更されたファイルのリストが表示され、左下のパネルに差分の詳細が表示されます。


3
@Orwellophile私はそれを行う方法を示すためにビデオをアップロードします。お役に立てれば幸いです。
Yantao Xie

うわー、私だけでも特別な気分です。今後の参照と追加のgoogle-fooのために、delicious.comにブックマークしました。
Orwellophile 2015年

非常に過小評価されている答え。ありがとう!
Koshinae

36

この場合meldを使用するもう1つのオプション:

git difftool -d master otherbranch

これにより、ファイル間の違いを確認できるだけでなく、特定のファイルをポイントしてクリックする簡単な方法も提供されます。


6
meldをデフォルトのdifftoolとして設定できます:git config --global diff.tool meld
bwv549

1
設定したdifftoolを使用するため、これが私のお気に入りです。
ジョサイア

OSXではサポートされていません。:-(
マイクS.

@MikeS。OSXの手順が含まれているこの回答stackoverflow.com/a/12815806/151918をチェックアウトしてください 。それは少なくとも私にとってはうまくいきます。
rsilva4

いいね。しかし、-dオプションは何ですか?
Scotty.NET 2018

29

gitを使用すると、マージを試してみて、結果が気に入らなければ問題から戻ることが簡単にできることに注意してください。事前に潜在的な問題を探すよりも簡単かもしれません。


10
デビッド、それは良い点ですが、事前に何が行われているのかを知っておくのは良いことです...
johannix 2009

18

また、特定のファイル間でのみ変更を探す場合は、次のようにします。

git diff branch1 branch2 -- myfile1.js myfile2.js

branch1はオプションであり、branch1が指定されていない場合、現在のブランチ(現在のブランチ)がデフォルトで考慮されます。例えば:

git diff master -- controller/index.js

15

共同で、または一度に複数の機能で作業する場合、アップストリームまたはマスターにブランチに含まれていない作業が含まれ、基本的な差分に誤って表示されることがよくあります。

アップストリームが移動した可能性がある場合は、これを行う必要があります。

git fetch
git diff origin/master...

git diff masterを使用するだけで、関連する変更が含まれたり、含まれなかったりする可能性があります。



8

2つのブランチがあります

  • A(作業しているブランチ)
  • B(比較する別のブランチ)

タイプAのブランチAにいる

git diff --color B

その後、これはあなたに出力を与えます

ここに画像の説明を入力してください

これに関する重要な点は

  1. 緑色のテキストはブランチAの内部にあります

  2. 赤のテキストはブランチBにあります


8

ここにはたくさんの答えがありますが、私がよく使うものを追加したかったのです。比較したいブランチの1つにいる場合、通常は次のいずれかを行います。この答えのために、私たちは二次ブランチにいると言います。その時点で必要なビューに応じて、どちらを選択するかによって異なりますが、ほとんどの場合、2つのオプションの2番目を使用しています。最初のオプションは、元のコピーに戻そうとする場合に便利です。どちらにしても、どちらも作業を完了できます。

これにより、マスターが現在のブランチ(セカンダリ)と比較され、元のコードが追加された行になり、新しいコードは削除された行と見なされます

git diff ..master

または

これにより、マスターと現在のブランチ(セカンダリ)が比較され、元のコードが古い行になり、新しいコードが新しい行になります

git diff master..

1

Github / Github Enterpriseを使用している場合/compareは、リポジトリパスのURL (例:https://github.com/http4s/http4s/compare)をクリックしてWeb UIを使用できます。比較するブランチ/コミット/タグを選択できます: Github Compareスクリーンショット

そして、diffは、URLでgithubのインターフェースで提示され/compare/{x1}...{x2}ているx2x1:ブランチはコミット/ /あなたは、例えば、比較したいタグをある https://github.com/http4s/http4s/compare/release-0.18.x ...主人

詳細はGithub Docで確認できます。


0

GUIソリューションを探している人のために、Git Colaには非常に優れた「Branch Diff Viewer(Diff- > Branches ..)」があります。


-1
git diff revision_n revision_m

連続したコミットの場合revision_nrevision_m次のように出力されます git show revision_m



-2

GUIが好きでWindowsを使用している場合、簡単な方法を次に示します。

  1. WinMergeをダウンロード
  2. 2つのブランチを異なるフォルダーにチェックアウトする
  3. WinMergeを使用してフォルダー比較をフォルダーごとに実行します。また、ブランチの1つが作業中のブランチである場合は、簡単に変更できます。

これは最も単純な方法ではありません。実際には、ブランチを比較するためにリポジトリをダウンロードする必要はありません。
stefgosselin 19/07/19

これは確かに最も単純な方法ではありませんが、GUIの方法であり、多くの場合、特にすべてのファイルの差分を確認するのに非常に簡単です
Marius Matioc

-3

TortoiseGitなどを使用して、変更されたファイルのブランチを簡単に比較することもできます。[ 参照の参照 ]をクリックして、比較するブランチを選択するだけです。

あなたが比較する場合たとえば、あなたのブランチをして、マスター、あなたは変更されるファイルの結果リストとして取得しますマスターマージすることを決定した場合、あなたの枝をマスター

例えるならば、あなたは異なる結果を持っていることRemmber マスターをして、あなたの分岐あなたのブランチマスター


1
質問はネイティブのgitユーティリティに関するようです
Vladimir Hraban
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.