20
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

gitのdiff、mergeをmeldでやる

Posted at

gitで、リビジョンの比較やコンフリクトの解消をmeldでやるには。

やりかた

.gitconfigに以下を追記しておくと、git difftool -dgit mergetoolでmeldが起動するようになる。

[diff]
  tool = meld
[difftool "meld"]
  cmd = meld $LOCAL $REMOTE
[merge]
  tool = meld
[mergetool "meld"]
  cmd = meld $LOCAL $BASE $REMOTE --auto-merge

どういうこと?

[difftool "meld"]に出てくる$LOCAL$REMOTEは、それぞれ変更前と変更後を表している。1つ目のパラメータが左側に表示される。
[mergetool "meld"]$LOCAL$REMOTEは、それぞれ手元のファイルとサーバのファイルとなる。
$BASEは、手元/サーバどちらの変更も入る前のファイルとなる。これだけだと全部手動でマージする羽目になるので、--auto-mergeを追加しおくとコンフリクト以外の部分はmeldがマージしてくれる。

また、$MERGEDというのもあり、gitが自動マージした結果のファイルとなる。こちらはコンフリクト部分以外はマージ済みの状態になる。
ならこれでいいじゃん、という気もするが、コンフリクト部分の表示がこんな風になる。

<<<<<<< HEAD
conflict2
=======
conflict1
>>>>>>> test1

meldでマージする場合、左右に$LOCAL$REMOTEが出ている訳なので、この表示はちょっと冗長な気がする。

ちなみに、$MERGED--auto-mergeをつけると・・・

(??)conflict2
(??)conflict1

こんな風。

なお、[difftool "meld"][mergetool "meld"]の項がなくても、gitが自動でコマンドラインを決めるらしく、それなりに動く。その場合は

[difftool "meld"]
  cmd = meld $LOCAL $REMOTE
[mergetool "meld"]
  cmd = meld $LOCAL $BASE $REMOTE

に相当する動作になっているようだ。

参考資料

http://stackoverflow.com/questions/11133290/git-merging-using-meld
https://git-scm.com/docs/git-difftool

20
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?