gitでコンフリクトが発生して手動ではなく一括で変更を反映したかったのでやり方を調べました。
結論
git checkout --ours ファイルパス
、git checkout --theirs ファイルパス
を使う。
--ours
: 取り込み側の変更を残す--theirs
: 取り込まれる側の変更を反映するmerge
とrebase
で取り込み側の向き逆になるので注意が必要
merge
カレントブランチ(branch_B)が取り込み側になる。
branch_B
<- branch_A
のイメージ。
$ git checkout branch_B $ git merge branch_A # branch_A の内容を取り込む $ git checkout --theirs ファイルパス # branch_B の内容を残す $ git checkout --ours ファイルパス
rebase
マージ先のブランチ(branch_A)が取り込み側になる。
branch_A
<- branch_B
のイメージ。
$ git checkout branch_B $ git rebase branch_A # branch_A の内容を取り込む $ git checkout --ours ファイルパス # branch_B の内容を残す $ git checkout --theirs ファイルパス
まとめ
便利な機能だが使い方を間違えるととんでもないことになるので慎重に使っていこう。
参照
Git - git-checkout Documentation
git の merge, rebase, revert で衝突した際の ours, theirs はどんな状態になるか - Qiita