普通Conflict発生となったら、新旧両方のファイルを開いて、おとなしく手動でマージするもんですが、どうしても片方のファイルでまるっと上書きしたい時があったりします。
私が遭遇したのは、以下のような状況です。
- fileA.txtをbranchAで作成
- masterにbranchAをmerge
- masterでfileA.txtを削除
- branchAでfileA.txtを修正
- branchAをmasterにmergeしようとすると 「fileA.txtはmasterで削除されたファイルです。CONFLICTですよ。」で拒否られる。
...まぁ手違いとはいえ、上のような混乱状況を作った自分が悪いとは言え、masterにはなく、branchAにしかないファイルをどうやってマージするの?単にbranchAのファイルが絶対優先で上書きマージしてほしいだけなのよ。
以下、そのような場合の手順です。
- git clone [マスタのURL] // まずはリポジトリ取り出します
- git fetch origin //
- git checkout -b branchA origin/branchA // branchAも取り出します
- git checkout master // masterに戻って
- git merge --no-ff branchA // これでCONFLICTのワーニング出ます
- git checkout --theirs fileA.txt // branchAのほうのfileA.txtが最優先なのだと宣言
- git add fileA.txt
- git commit
- git push
もしも逆にmaster側のほうが最優先なんだ!って場合は
6. git checkout --ours ..... らしい けどこっちの操作はやってないので確かなことが言えないです。