by shigemk2

当面は技術的なことしか書かない

git mergeでコンフリクトが発生するか前もって調べる

git mergeでコンフリクトが発生するか前もって調べる方法 - Qiita

直前のbranchを現在のbranchにマージできるかチェックする

git format-patch `git rev-parse --abbrev-ref HEAD`..`git rev-parse --abbrev-ref @{-1}` --stdout | git apply --check

流れ

  1. 直前のbranchを現在のbranchにマージするパッチを用意する。
  2. 標準出力で出された結果をパイプでつなげてgit apply --checkでコンフリクトなしでmergeできるかどうかを確認する。

なんだけど、なんだかよくわからないコマンドがいっぱい出てきたよ。

rev-parse

Git - リビジョンの選択

あるブランチがいったいどの SHA を指しているのか、あるいはその他の例の内容が結局のところどの SHA に行き着くのかといったことを知るには、Git の調査用ツールである rev-parse を使います。こういった調査用ツールのより詳しい情報は第 9 章で説明します。rev-parse は低レベルでの操作用のコマンドであり、日々の操作で使うためのものではありません。しかし、今実際に何が起こっているのかを知る必要があるときなどには便利です。

なるほど。わからん。

現在のブランチを知る。

git rev-parse --abbrev-ref HEAD

git-rev-parseのabbrev-refオプションにはこのように書いてある。

--abbrev-ref[={strict|loose}]
           A non-ambiguous short name of the objects name.

上のやつだと、HEADファイルからこねこねして現在のブランチ名をとってます。

参考:oh-my-zshのcurrent_branch関数

function current_branch() {
  ref=$(git symbolic-ref HEAD 2> /dev/null) || \
  ref=$(git rev-parse --short HEAD 2> /dev/null) || return
  echo ${ref#refs/heads/}
}

最終形

$ git format-patch `git rev-parse --abbrev-ref HEAD`..master --stdout | git apply --check

現在のブランチがmasterにmergeできるかどうかを確認する。