gitでコンフリクトした時に変更を一括で反映する
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