0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

git merge --dry-run 相当? gitで実際にマージされる内容を表示するコマンド(エイリアス)

Posted at

概要

ローカルのgitで実際にマージされる内容をdiff表示するコマンド(エイリアス)。

コマンド(エイリアス)

GitHubではトリプルドットdiffが使われるので、実際にマージされる内容と Files changed タブの表示内容が異なる問題は解決できない。

しかしローカルでgitに以下エイリアスを登録してコマンド実行することで、(作業コピーは更新せずに)実際にマージを実行してマージ前とマージ結果をdiffできる。これにより、実際にマージされる内容を表示することができる。

.gitconfig
[alias]
	merge-diff = "!f() { git show $1 > /dev/null; git merge-tree HEAD $1; git diff HEAD `git merge-tree HEAD $1 | head -1`; }; f" # 最初のshowは、ブランチ名の補完が効くようにするため
	merge-df = "!f() { git show $1 > /dev/null; git merge-tree HEAD $1; git difftool -d HEAD `git merge-tree HEAD $1 | head -1`; }; f" # 最初のshowは、ブランチ名の補完が効くようにするため
# 使い方

# 実際にマージされる内容を、コンソールにdiff表示する
git merge-diff 《マージ先ブランチ》

# 実際にマージされる内容を、ツールを使ってdiff表示する
git merge-df 《マージ先ブランチ》

説明

以下のような処理をすることで、実際にマージを実行して、マージ前とマージ結果をdiffすることができる。
それをエイリアスとして使いやすく登録したのが上の.gitconfig内容になる。

# staging領域や作業ツリーは更新せずにマージを実行して、マージ結果のgitオブジェクトを作成する
git merge-tree HEAD 《マージ先ブランチ》

# ここに《マージ結果のgitオブジェクトID》が表示される

# マージ前の内容とマージ結果の差分を表示する
git diff HEAD 《マージ結果のgitオブジェクトID》

git merge --dry-run はこれでいいのでは?

git merge --dry-runというオプションは存在しない。
検索するとgit merge --no-ff --no-commitを代わりに使えという記事がひっかかるが、ドライランで行いたいことは『マージで衝突が発生するかと、マージされる内容を、ブランチを更新せずに確認したい』というものだと思うので、--dry-run でやりたいことは上記コマンドで実現できる気がする。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?