web-dev-qa-db-ja.com

分岐点とメルドの違いを表示しますか?

HEADと現在の状態の違いをmeld .で表示できることを知っています。しかし、ブランチ間の違い、たとえばmasterdevelをmeldでどのように表示できますか?

現時点では、次の手順を実行します。

  1. 作業コピーのフォルダー名を変更する
    たとえばmv /projectA /projectA_master
  2. プロジェクトを再度クローンします
    git clone url
  3. develブランチに切り替え
    cd projectA && git -b devel Origin/devel
  4. メルドとの違いを見る
    meld /projectA_Master projectA

メルドで同じ結果を得る簡単な方法はありませんか?主にマージのためではなく、変更をレビューするためにのみ必要です。

146
Marten Bauer

また、この問題に悩まされることがわかったため、作業ツリーまたはステージング領域に対して任意のコミットをより快適に差分できるgit meldを作成しました。 https://github.com/wmanley/git-meld で見つけることができます。 Markのスクリプトに少し似ていますが、任意のコミット、ステージング領域、または作業ディレクトリを他のいずれかと比較するために機能します。比較対象の1つが作業ツリーである場合、それも読み取り/書き込みであるため、変更が失われることはありません。

53
Will Manley

短くて甘い:

git config --global diff.tool meld

これにより、Gitがmeldをdiffツールとして使用するように構成されます。 (コマンドライン引数を指定する必要はありません。meldのサポートはGitに組み込まれています。)

次に、テキストの代わりにグラフィカルな差分が必要な場合は、git difftoolではなくgit diffを呼び出します(両方とも同じ引数を取ります)。あなたの場合:

git difftool master..devel

更新:一度に1ファイルずつ差分を表示したくないが、代わりに2つのブランチ間のすべての変更でmeldの「サブディレクトリ」ビューを使用する場合は、-dまたは--dir-diffgit difftoolのオプション。たとえば、ブランチXYZにいて、これとブランチABCの違いを確認したい場合、次を実行します。

git difftool -d ABC
298
Jörg W Mittag

Git v1.7.11以降では、git difftool --dir-diffを使用してディレクトリdiffを実行できます。これは、meld wihout https://github.com/wmanley/git-meld スクリプトで非常にうまく機能します。

Gitを構成する

git config --global diff.tool meld

これを使って

git difftool -d topic             // -d is --dir-diff
git difftool -d master..topic

MacOSの場合

brew cask install meld
git config --global difftool.meld.cmd 'open -W -a Meld --args \"$LOCAL\" \"$PWD/$REMOTE\"'
git config --global difftool.meld.trustExitCode true
98
GutenYe

git difftool -dを使用するとまだ編集可能 Meldの作業ファイルと保存と言うことが重要です。これを実現するには、いくつかのブランチを現在の作業ツリーと比較する必要があります。例えば:

git difftool -d branchname

Meldは、左と右の両方のディレクトリが/ tmpにあることを示します。ただし、正しいディレクトリ内のファイルは、実際には現在の作業ディレクトリ内のファイルへのシンボリックリンクです(Windowsには適用されません)。したがって、Meldで直接編集することができ、保存すると、変更が作業ディレクトリに保存されます。

さらに興味深いオプションは、現在の作業ディレクトリとstashの比較です。次のように入力するだけでこれを実行できます。

git difftool -d stash

その後、git stash pop/applyを使用せずに、このコマンドによって引き起こされる可能性がある面倒な競合解決を回避しながら、一部の変更をstash(左ウィンドウ)から現在の作業コピー(右ウィンドウ)に転送できます。

スタッシュでワークフローを大幅に向上させることができると思います。変更をstashから作業コピーに徐々に転送し、それらを1つずつコミットして、必要に応じて別の変更を導入できます。

12

他の回答からは、現時点ではgitリポジトリで直接これを行う方法はないように見えますが、( 別の質問 :)への回答のおかげで) 2つのコミットのツリーを一時ディレクトリに抽出し、それらに対してmeldを実行し、meldの終了時に両方のディレクトリを削除します。

http://Gist.github.com/498628

もちろん、meldで行った変更はすべて失われますが、違いの概要を簡単に確認できるのは素晴らしいことです。

5
Mark Longair

これを行う簡単な方法はgit reset --softを使用することだと思います:

目標:branch_aとbranch_bの違いをmeldと比較する

git checkout branch_a
git checkout -b do_diff
git reset --soft branch_b
meld .
3
realtime

Piort Jurkiewicz answer pykissのコメントにコメントできません:「ブランチから作業ディレクトリに新しいファイルをコピーしても動作しません:()、しかし:

File.txtをbranch_Bから作業ブランチbranch_Aにコピーするソリューションは次のとおりです。

git chechout branch_B -- file.txt

from this answer to this question meld自体でそれを行う方法はわかりません。

0
Geoffroy

きれいな作業ディレクトリときれいなインデックスがある場合(または気にする必要がない場合)、次のようにします。

git diff master..devel | patch -p1 && meld . && git reset --hard
0
sqrt163

Git V1.7.9では、コマンドラインなしで2つのコミットを比較できます。

「git gui」編集オプションでグローバルに設定する必要があります:「Use merge tool:meld」。

開始gitk、コミットを選択し、別のコミットを右クリック> "diff this-> selected"。 「パッチ」の下でファイルを右クリックし、「external diff」を選択します。

meldが開始され、まだ選択されている最初のコミットが右側に表示されます。

0
Stefan Forster