HEADと現在の状態の違いをmeld .
で表示できることを知っています。しかし、ブランチ間の違い、たとえばmaster
とdevel
をmeldでどのように表示できますか?
現時点では、次の手順を実行します。
mv /projectA /projectA_master
)git clone url
devel
ブランチに切り替えcd projectA && git -b devel Origin/devel
meld /projectA_Master projectA
メルドで同じ結果を得る簡単な方法はありませんか?主にマージのためではなく、変更をレビューするためにのみ必要です。
また、この問題に悩まされることがわかったため、作業ツリーまたはステージング領域に対して任意のコミットをより快適に差分できるgit meldを作成しました。 https://github.com/wmanley/git-meld で見つけることができます。 Markのスクリプトに少し似ていますが、任意のコミット、ステージング領域、または作業ディレクトリを他のいずれかと比較するために機能します。比較対象の1つが作業ツリーである場合、それも読み取り/書き込みであるため、変更が失われることはありません。
短くて甘い:
git config --global diff.tool meld
これにより、Gitがmeld
をdiffツールとして使用するように構成されます。 (コマンドライン引数を指定する必要はありません。meld
のサポートはGitに組み込まれています。)
次に、テキストの代わりにグラフィカルな差分が必要な場合は、git difftool
ではなくgit diff
を呼び出します(両方とも同じ引数を取ります)。あなたの場合:
git difftool master..devel
更新:一度に1ファイルずつ差分を表示したくないが、代わりに2つのブランチ間のすべての変更でmeldの「サブディレクトリ」ビューを使用する場合は、-d
または--dir-diff
git difftool
のオプション。たとえば、ブランチXYZにいて、これとブランチABCの違いを確認したい場合、次を実行します。
git difftool -d ABC
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
git difftool -d
を使用するとまだ編集可能 Meldの作業ファイルと保存と言うことが重要です。これを実現するには、いくつかのブランチを現在の作業ツリーと比較する必要があります。例えば:
git difftool -d branchname
Meldは、左と右の両方のディレクトリが/ tmpにあることを示します。ただし、正しいディレクトリ内のファイルは、実際には現在の作業ディレクトリ内のファイルへのシンボリックリンクです(Windowsには適用されません)。したがって、Meldで直接編集することができ、保存すると、変更が作業ディレクトリに保存されます。
さらに興味深いオプションは、現在の作業ディレクトリとstashの比較です。次のように入力するだけでこれを実行できます。
git difftool -d stash
その後、git stash pop/apply
を使用せずに、このコマンドによって引き起こされる可能性がある面倒な競合解決を回避しながら、一部の変更をstash(左ウィンドウ)から現在の作業コピー(右ウィンドウ)に転送できます。
スタッシュでワークフローを大幅に向上させることができると思います。変更をstashから作業コピーに徐々に転送し、それらを1つずつコミットして、必要に応じて別の変更を導入できます。
他の回答からは、現時点ではgitリポジトリで直接これを行う方法はないように見えますが、( 別の質問 :)への回答のおかげで) 2つのコミットのツリーを一時ディレクトリに抽出し、それらに対してmeldを実行し、meldの終了時に両方のディレクトリを削除します。
もちろん、meldで行った変更はすべて失われますが、違いの概要を簡単に確認できるのは素晴らしいことです。
これを行う簡単な方法はgit reset --soft
を使用することだと思います:
目標:branch_aとbranch_bの違いをmeldと比較する
git checkout branch_a
git checkout -b do_diff
git reset --soft branch_b
meld .
Piort Jurkiewicz answer pykissのコメントにコメントできません:「ブランチから作業ディレクトリに新しいファイルをコピーしても動作しません:()、しかし:
File.txtをbranch_Bから作業ブランチbranch_Aにコピーするソリューションは次のとおりです。
git chechout branch_B -- file.txt
from this answer to this question meld自体でそれを行う方法はわかりません。
きれいな作業ディレクトリときれいなインデックスがある場合(または気にする必要がない場合)、次のようにします。
git diff master..devel | patch -p1 && meld . && git reset --hard
Git V1.7.9では、コマンドラインなしで2つのコミットを比較できます。
「git gui」編集オプションでグローバルに設定する必要があります:「Use merge tool:meld」。
開始gitk、コミットを選択し、別のコミットを右クリック> "diff this-> selected"。 「パッチ」の下でファイルを右クリックし、「external diff」を選択します。
meldが開始され、まだ選択されている最初のコミットが右側に表示されます。