177

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

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

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

メルドで同じ結果を得る簡単な方法はありませんか?変更を確認するためだけに必要であり、主にマージするためには必要ありません。

4

8 に答える 8

360

短くて甘い:

git config --global diff.tool meld

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

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

git difftool master..devel

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

git difftool -d ABC
于 2010-01-05T13:21:42.810 に答える
108

git v1.7.11以降ではgit difftool --dir-diff、ディレクトリ差分を実行するために使用できます。これは、 https://github.com/wmanley/git-meldスクリプトなしで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
于 2012-10-10T09:11:14.093 に答える
60

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

于 2010-11-30T09:24:41.527 に答える
15

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

git difftool -d branchname

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

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

git difftool -d stash

git stash pop/apply次に、このコマンドによって引き起こされる可能性のある面倒な競合解決を使用および回避することなく、いくつかの変更をstash(左側のウィンドウ)から現在の作業コピー(右側のウィンドウ)に転送できます。

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

于 2014-03-20T14:28:28.907 に答える
5

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

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

git checkout branch_a
git checkout -b do_diff
git reset --soft branch_b
meld .
于 2011-09-09T09:19:20.467 に答える
5

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

http://gist.github.com/498628

もちろん、meldを介して行われた変更はすべて失われますが、違いの概要を簡単に説明できるのは非常に便利だと思います。

于 2010-07-29T16:53:08.670 に答える
3

MacOS上のMeldの場合、macOSアプリケーションのメンテナであるyoussebが~/.gitconfig推奨するように、これをに追加します。

[diff]
  tool = meld
[difftool]
  prompt = false
[difftool "meld"]
  trustExitCode = true
  cmd = open -W -a Meld --args \"$LOCAL\" \"$REMOTE\"
[merge]
  tool = meld
[mergetool]
  prompt = false
[mergetool "meld"]
  trustExitCode = true
  cmd = open -W -a Meld --args --auto-merge \"$LOCAL\" \"$BASE\" \"$REMOTE\" --output=\"$MERGED\"

必要に応じて、構成を省略できmergeます。

@GutenYeの答えは、自動エスケープや。が付いているものが原因でうまくいきませんでしたzsh

于 2020-06-04T18:22:16.553 に答える
0

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

'git gui'編集オプションでグローバルに構成する必要があります:「マージツールを使用する:meld」。

gitkを起動し、コミットを選択して、別のコミットを右クリックします> " diffthis->selected "。「パッチ」の下で、ファイルを右クリック>「外部差分」。

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

于 2014-02-03T21:46:54.857 に答える