ブランチ間のgit visual diff


196

この回答は、gitにチェックインされた2つのファイル間の視覚的な差分を確認するのに最適 です。視覚的な差分プログラムで「git diff」の出力を表示するにはどうすればよいですか?

ただし、2つのブランチ間の視覚的な違いを見たいのですが。これまでのところ、私の最善の策は次のようです:

git diff --name-status master dev

これはあまり有益ではなく、あまり視覚的ではありません。

そこにもっと良いものはありますか?


以前はここで取り上げられていなかったビジュアルを含め、以下に回答を追加しました:ブランチに含まれるコミットを確認する方法(共通または一意にかかわらず)。gitのコア機能でできることはたくさんあります。視覚的な差分に何を含めたいかを指定するとよいでしょう。ほとんどの回答は、コミットの行ごとの相違に焦点を当てています。この例では、特定のコミットで影響を受けるファイルの名前に焦点を当てています。
Kay V

回答:


227

範囲で使用git diffます

git diff branch1..branch2

これは、各ブランチのヒントを比較します。

GUIソフトウェアが本当に必要な場合は、Mac OS XとWindowsをサポートするSourceTreeのようなものを試すことができます。


27
それは視覚的なことではありません。;)
海兵隊員

35
Linuxシステムでは、をインストールMeldしてからデフォルトdifftoolで設定しgit config --global diff.tool meld、最後にプレーンdiffでではなく起動することをお勧めしますgit difftool branch1..branch2。その結果、見栄えが格段に良くなります。
ガブリエル

8
git設定なしでMeldビジュアルdifftoolを使用:git difftool -t meld branch1..branch2
user3780389

2
読者の方へ:私の投稿の時点で、ここでのすべての回答は、この回答を除いて、ユーザーが要求したこと(GUIの差分)を実行する方法を提供します。
G Huxley 2017年

3
@GHuxley OPはGUIソリューションをどこに求めますか?
アレックス

97

2つのブランチ間のすべての違いの視覚的な違いを確認するには、マージをコミットせずに2つのブランチをマージしてから、git guiまたはgit Extensionsを使用して違いの概要を取得します。

コミットせずにマージするためのGitコマンドライン:

git checkout branchA
git merge --no-commit --no-ff branchB

その後、完了したら、マージを元に戻すことができます

git merge --abort

(コメント用の@jcugatへのh / t)


10
IDE(または他の常に簡単ではない、Git GUIとの統合が簡単なdifftool)を使用する場合は、このアプローチの関連性を過小評価しないでください。Intellijを使用しており、IDEで変更されたファイルを構文で強調表示し、エラーで強調表示し、デッドコードで強調表示し、その場で編集できる栄光でスピンできることを非常に好むため、このオプションは私にとって素晴らしいです。私はすべてのコードレビューにこのアプローチを使用しており、GitHubの深遠なプルリクエスト比較ツールをはるかに残しています。必要に応じて編集することもできます。完了したら、「-code-review」が追加された新しいブランチを作成してコミットするだけです!
kghastie 2014

2
マージの競合がない限り機能し、マージの競合があると失敗します。
ナガキラン2014年

1
私はそのアプローチがとても好きです!また、少なくとも私にとってgit guiは、競合はステージングされていないこと、非競合はステージングされていることを示しているので、あなたも区別がつきます。一流の回答よりも多くの助けになります:D
DJGummikuh

55

Intellij Idea IDEを使用している場合は、ブランチで比較オプションを使用できます。

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


この比較を変更するための構成/オプション/設定はありますか?(git diffの--ignore-space-at-eolのように)
スーパーロール

49

これはgitkでも簡単に行えます。

> gitk branch1 branch2

まず、branch1の先端をクリックします。次に、branch2の先端を右クリックし、[これを比較->選択]を選択します。


7
を使用gitk branch1..branch2すると、2つのリビジョン間のコミットのみが表示されます。
T3rm1 2014年

ブランチで行ったすべての変更を確認するには、gitk(branch1 branch2なし)を使用します。
mikewasmike

31

WindowsでTortoiseGitを使用している場合は、このあいまいな機能により、多少視覚的に比較できます。

  1. 比較するフォルダに移動します
  2. 押したままshift右クリック
  3. TortoiseGit->参照の参照に移動します
  4. ctrl比較する2つのブランチを選択するために使用します
  5. 選択を右クリックし、[選択した参照を比較]をクリックします

出典:http : //wikgren.fi/compare-diff-branches-in-tortoise-git-or-how-to-preview-changes-before-doing-a-merge/


なぜシフトを押さなければならないのですか?
Zero3

1
特定の項目を表示しないようにTortoiseGitを構成している場合に備えて、Shiftキーを押しながら右クリックすると、常にTortoiseGitの完全なメニューが表示されます。
オーバーサーチ2016年

これは素晴らしいです。もっと目立つ機能になってほしい。
ドリュー

22

OSXまたはWindows 7以降を使用している場合、Atlassian SourceTreeはこれに対して非常にうまく機能します。これは無料。

サイドバイサイドの差分設定で段階的な変更を確認でき、ローカルとリモートおよび他の2つのブランチを簡単に比較できます。複数のファイルが選択されている場合、差分は次のように表示されます。

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

機能ブランチをチェックアウトしていて、「マスター」に対する差分を表示したい場合、「マスター」ブランチを右クリックして、「現在との差分」を選択します。

残念ながら、すぐに* nixディストリビューションで利用できるようには思えません。


3
これは、「無料」かもしれないが、それは確かにその使用の登録利用規約を読むためにいくつかの時間を必要とします。atlassian.com/legal/customer-agreementは 私がこれまでのツールを気に入っているが、これは私をオフにプッシュすることができます。
akauppi 2014

@akauppiどの部分があなたを先延ばしにしましたか?私はそれらすべての合意はほとんど同じであると思った
アレックス

それは1年以上前です。はい、合意は似ているかもしれませんが、SourceTreeが私を押し進めていたプロセスでした。変だった。さようなら。詳細はわかりません。申し訳ありません
akauppi

16

「difftool」を試してみてください(diffツールがセットアップされていることが前提です)-https://www.kernel.org/pub/software/scm/git/docs/git-difftool.htmlを参照してください

私が見つけ名ステータス概要については良いが、difftoolは変更を繰り返すだろう(と-d、例えばオプションはあなたにディレクトリビューを提供します)

$ git difftool their-branch my-branch

Viewing: 'file1.txt'
Launch 'bc3' [Y/n]:
...

または、@ rsilva4が-d現在のブランチでデフォルトとして言及しているように、それはただです-たとえばマスターと比較してください:

$  git difftool -d master..

...そしてはい-多くのバリエーションがあります-https://www.kernel.org/pub/software/scm/git/docs/git-reset.html


3
ありがとう、これは役に立ちました。:-dオプションを追加すると、さらに良いものを作るだろうgit difftool -d their-abc my-abc
rsilva4

explainshell.comがあるので、-dオプションを解析することができていないようだ瞬間に、ここでmanページが言うことだ:-d --dir-diff: Copy the modified files to a temporary location and perform a directory diff on them. This mode never prompts before launching the diff tool.
waldyrious

8

githubを使用している場合は、次のWebサイトを使用できます。

github.com/url/to/your/repo/compare/SHA_of_tip_of_one_branch...SHA_of_tip_of_another_branch

その2つの比較を示します。


これは機能します(私はいつもそれを行います)が、コードをgithubリポジトリにプッシュする必要があります。しかし、それは私の意見では実際に許容できる警告ではありません。
adamwong246 2014年

2
またはgithub.com/url/to/your/repo/compare/、ブランチを選択することもできます
caramba

そして、どうすればそのSHAを取得できますか?つまり、ブランチの先端のSHAはどういう意味ですか?
Optimus Prime

8

GitExtensionsであなたは改訂グリッドの両方の分岐を選択することができますCtrl押しました。次に、それらのブランチ間で異なるファイルを確認できます。ファイルを選択すると、その差分が表示されます。

ここから撮影


リビジョングリッドで2つのブランチが選択されていますが、上部のメニューまたは右クリックしても比較コマンドが表示されません。
Eric

1
下のペインの見出しにそれが見つかりました。コミット、ファイルツリー、および差分があります。
エリック

7

更新

Mac:SourceTreeを使っています。徹底的にお勧めします。特に、ハンクをステージング/ステージング解除する方法が好きです。

Linux:私は以下で成功しました:

  • smartgit
  • GitKraken
  • meld

例えばsmartgitUbuntu にインストールする場合:


これは仕事をします:

meldのようなGUI差分ツールを備えたgit-diffall。ここのポイント5を参照してください。

http://rubyglazed.com/post/15772234418/git-ify-your-command-line

ここにgitとmeldに関する素晴らしい投稿があります:http : //nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy


4

Eclipseを使用している場合は、ワークスペース上の現在のブランチを別のタグ/ブランチと視覚的に比較できます。

Eclipseワークスペースの比較


個人的には、Eclipseでdiffing sub-parのサポートを見つけましたが、それで十分であれば問題ありません。
ysap

4

PERFORCEの無料のP4Mergeを使用してこれを行うこともできます。

http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools

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

Gitとの統合の詳細については、こちらこちらをご覧ください。

しかし、上記のリンクからの簡単な要約は次のとおりです。

  • あなたの〜/ .gitconfigに次のビットを入れて、あなたが行うことができます$ git mergetoolし、$ git difftoolP4MERGEを使用します
  • ただし$ git diff、デフォルトのインラインdiffビューアのみを使用することに注意してください:)(gitバージョン1.8.2でテスト済み)

.gitconfigの変更

[merge]
  keepBackup = false
    tool = p4merge
[mergetool "p4merge"]
    cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$PWD/$BASE\"" "\"$PWD/$REMOTE\"" "\"$PWD/$LOCAL\"" "\"$PWD/$MERGED\""
    keepTemporaries = false
    trustExitCode = false
    keepBackup = false
[diff]
    tool = p4merge
[difftool "p4merge"]
    cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$REMOTE\"" "\"$LOCAL\""

2

優れたWebStormエディターを使用している場合は、任意のブランチと比較できます。 Webstorm gitの比較


実際、IntelliJ IDEA(おそらくWebStormも)には「ピックされていないコミットを強調表示」する機能があることに気づきました。これにより、ブランチに存在し、他に存在しないコミットが非常に明確になります。
arthurakay

ええ、私はintellijを使用して、「autoformat on save」によってリポジトリ全体で行われた変更の負荷を選択的にロールオフしました。非常に簡単でしたが、「ローカルと比較する」オプションを見つけなければなりませんでした
Tom H

1

見て git show-branch

gitのコア機能でできることはたくさんあります。視覚的な差分に何を含めたいかを指定するとよいでしょう。ほとんどの回答は、コミットの行ごとの相違に焦点を当てています。この例では、特定のコミットで影響を受けるファイルの名前に焦点を当てています。

対処されていないように見えるビジュアルの1つは、ブランチに含まれるコミットの確認方法です(共通または一意にかかわらず)。

このビジュアルでは、私はの大ファンですgit show-branch。ブランチごとによく整理されたコミットのテーブルを作成して、共通の祖先に戻します。-分岐のある複数のブランチを持つリポジトリでそれを試すにはgit show-branch、入力して出力を確認するだけです-例を含む記述については、Gitブランチ間のコミットの比較を参照してください


0

これは、Visual Studio(VS 2017でテスト済み)で、単一のファイルではなく、コミット全体の視覚的な違いを確認する方法です。残念ながら、これは1つのブランチ内のコミットに対してのみ機能します。「チームエクスプローラー」で「ブランチ」ビューを選択し、リポジトリを右クリックして、「履歴の表示」を選択します。

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

次に、現在のブランチの履歴がメイン領域に表示されます。(現在のブランチで以前のコミットとして終了したブランチにはラベルが付けられています。)次に、Ctrl-Leftでいくつかのコミットを選択し、右クリックしてポップアップメニューから[コミットの比較...]を選択します。

Microsoftの世界でのブランチの比較の詳細については、このstackoverflowの質問:Visual Studioを使用したgitブランチの違いを参照してください。


1
単一のブランチの履歴のみを表示するため、ブランチ間を比較できません。
のMichałフィッタ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.