Git初心者あるある
誰もが最初に苦戦するコンフリクトの話です。
テキストファイルは無理矢理直すことができると思いますが、バイナリファイルがコンフリクトすると一気解消できなくなる人が急増する印象です。
今回はそのバイナリファイルのコンフリクト解消を比較的工数少なく行うことができる方法を紹介します。
例: masterブランチと開発ブランチがコンフリクトしてプルリクエストでマージできない
1. 開発ブランチにmasterブランチを取り込む
$ git pull --rebase origin master
2. どのファイルがコンフリクトしているか確かめる
$ git status
3. コンフリクトしていたファイルをmasterブランチ側に寄せる
$ git restore --ours <コンフリクトしているバイナリファイル>
- oursオプション、theirsオプションについてはこちらを参考にしてください。
4. コンフリクトしていたファイルを開き、自身が追加したい差分を追加・編集する
- ファイルを開いたら、masterのファイルと同じ状態のものが表示されるはずです。
5. コンフリクトしていたファイルをステージングに上げる
$ git add <コンフリクトしていたバイナリファイル>
6. ステータスを確認し、全てのファイルがステージングに上がっているか確認する
$ git status
7. リベースを続ける(コンフリクト解消完了)
$ git rebase --continue
8. プッシュする(強制)
$ git push --force-with-lease origin <ブランチ名>
注意
-
開発ブランチに複数の開発コミットがありrebaseでコンフリクトした場合、複数回コンフリクト解消しなければいけないときがあります。事前に開発コミットをまとめてからコンフリクト解消することをおすすめします。
- コミットをまとめる方法はこちら
-
バイナリファイルのコンフリクトは一旦どちらかに寄せなければいけないので、修正した差分を忘れてしまいそうな場合はGit管理外のフォルダーにバックアップを取っておくことをおすすめします。
まとめ
- Gitの操作で時間を無駄にしてしまうのは勿体無いので、効率の良い方法を覚えて素早く開発していきましょう!