web-dev-qa-db-ja.com

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

私はしばらくの間分離されていて、どのファイルが変更されたかを知りたがっていた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"

私が逃した何かがあるかどうか疑問に思いました...

1946
johannix

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

$ git diff --name-status master

任意の2つの分岐を比較するには

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

公式ドキュメントgit diffを読んでください。

2384
JasonSmith

やってみる

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

それでも同じ数の行を使用しながら、各変更についてより多くの情報を得ることができます。

別の方法でマージする場合は、分岐を反転して違いをより明確に把握することもできます。

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

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

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ブランチを削除して最初からやり直すことができます。

150
Eric Anderson

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

git diff master..otherbranch > myDiffFile.diff
52
Paulino III

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

gitk を使うことができます。

  1. 実行します。

    $ gitk --all
    
  2. ブランチのコミットを右クリックして、ポップアップメニューのMark this commitを選択します。

  3. 別のブランチのコミットを右クリックして、Diff this - >マーク付きコミットまたはdiffマーク付きコミット - > thisを選択します。

それから右下パネルに変更されたファイルリストがあり、左下パネルに差分の詳細があります。

35
Yantao Xie

もう1つの選択肢、この場合はmeldを使用します。

git difftool -d master otherbranch

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

31
rsilva4

Gitを使えば、マージを試してみて、結果が気に入らない場合は、問題を回避することが簡単にできます。事前に潜在的な問題を探すよりも簡単かもしれません。

29
David Plumpton

共同作業をしたり、一度に複数の機能を使ったりするとき、上流やマスターにさえブランチに含まれていない作業が含まれていることがよくあります。

上流が移動した可能性がある場合は、これを実行する必要があります。

git fetch
git diff Origin/master...

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

14
Alex Brown

あなたが特定のファイルの間でのみ変更を探しているなら、そしてそれから:

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

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

git diff master -- controller/index.js
14
Mannu

IntelliJ IDEA を使用している場合は、任意のブランチを現在作業中のブランチと比較することもできます。詳細については、 http://www.jetbrains.com/idea/webhelp/merging-deleting-and-comparing-branches.html#d288093e3827 を参照してください。これは free edition でも利用できます。

9
Wim Deblauwe

ここにはたくさんの答えがありますが、私がよく使うものを追加したいと思いました。あなたがあなたが比較したいブランチのうちの1つにいるならば、私は通常以下のうちの1つをします。この答えのために私達は私達が私達の二次ブランチにいると言うでしょう。その時点で必要なビューに応じて、どちらを選択するかによって異なりますが、ほとんどの場合、2つのうちの2番目のオプションを使用します。あなたがオリジナルのコピーに戻ろうとしているなら、最初のオプションは便利かもしれません - どちらの方法でも、両方とも仕事をやり遂げます!

これはmasterと私たちがいるブランチ(secondary)とを比較し、元のコードが追加された行になり、新しいコードが削除された行と見なされます。

git diff ..master

OR

これはまたmasterと私たちがいるブランチ(secondary)とを比較し、元のコードは古い行になり、新しいコードは新しい行になります。

git diff master..
6
Jase

言うことができる2つの枝があります

  • A (Branch on which you are working)
  • B (Another branch with which you want to compare)

支店Aにいると入力できます

git diff --color B

それからこれはあなたの出力を与えるでしょう

enter image description here

これに関する重要な点は

  1. 緑色のテキストは、支店Aの内側にあります

  2. 赤のテキストは支店Bにあります

5
selftaught91
git diff revision_n revision_m

revision_nrevision_mが連続したコミットである場合、git show revision_mと同じように出力されます。

0
Jovo Skorupan

GUIが好きでWindowsを使用している場合は、これが簡単な方法です。

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

visual diffを使用することもできます。

たとえば、 Sourcetree を使用している場合、単純に ログビューで任意の2つのコミットを選択 にできます。

(個人的には、このためにほとんどの場合GUIを使用することを好みます。GUIオプションに慣れていないかもしれない人のためにこれを投稿しています。)

0
sonny

GUIソリューションを探している人のために、 Git Cola にはとても素敵な "Branch Diff Viewer"があります( Diff - > Branches .. )。

0
kerner1000