ほげほげ見聞録

技術メモ、備忘録、使い方はそのうち覚える

git:マージ

まず、取り込みたいブランチmasterに移動する。branch1をマージすると、masterのHEADがbranch1と同じ位置に移動する。

$ git checkout master
$ git merge <branch1> --no-ff

ファストフォワード

masterに変更がなく、branch1がmasterの履歴をすべて含んでいる場合。masterは移動するだけでbranch1の内容を取り込める。
ログが一つになり、トピックブランチの情報がなくなる。オプションがない場合のデフォルト。

$ git merge <branch> --ff

ノンファストフォワード

masterの変更がbranch1の分岐点よりも進んでいる場合。それぞれのブランチの変更点をまとめる必要がある。
ログは別々になり、トピックブランチの情報は残る。

$ git merge <branch> --no-ff

スカッシュ

トピックブランチの情報もコミットログも残らない。

$ git merge <branch> --squash

 マージやり直し

カレントディレクリ配下すべてについてやり直し。

$ git checkout --merge

マージを取り消したい場合

例えば、no-ffでやり直したい場合など。
「ORIG_HEAD」でマージする以前のHEADに戻す。その後マージを再実行する。

$ git reset --hard ORIG_HEAD
$ git merge --no-ff

バイナリファイルがコンフリクト

masterブランチにいてdevelopブランチをマージした場合。masterブランチのファイルを採用する場合は、以下のコマンド入力はしなくてもいい(デフォルトでmasterのファイルになっている)。

# developブランチの対象ファイルを採用
git checkout --theirs <filename>
# masterブランチの対象ファイルを採用 git checkout --ours <filename>