- 更新日: 2015年7月30日
- Git
gitマージのコンフリクトで片方ブランチのファイル変更内容を採用
git でブランチの merge 時に conflict が生じた場合は、基本的には手動で1ファイルずつエディタで修正をかけていくわけですけど、場合によってはどちらか一方のブランチのファイルの変更内容を全面的に採用したいケースがあります。
git merge でコンフリクトが生じると、ファイルに以下のようにコンフリクト箇所がマークされる。この場合に HEAD(現在のブランチ)または another-branch(マージしようとしたブランチ)のどちらかのブランチのファイル変更のみを全面的に採用したい場合の話です。
1 2 3 4 5 |
<<<<<<< HEAD # ... ======= # ... >>>>>>> another-branch |
git checkout を –theirs / –ours オプションとともに使う
Rails プロジェクトの場合で例を挙げますと、Gemfile.lock や db/schema.rb などのファイルがよくコンフリクトして、片方のブランチの変更を全面的に採用したいケースが多いです。Gemfile.lock は、Ruby – BUNDLED WITH で Gemfile.lock が更新されてしまう件 – Qiita のために、近頃よくコンフリクトが発生します。
git checkout を –theirs / –ours オプションとともに使うと、conflict が生じた場合に、片方のブランチのファイル変更内容のみを全面的に採用することが可能です。以下のように feature-branch で作業中で another-branch をマージしようとしたところ、Gemfile.lock や db/schema.rb がコンフリクトした場合と仮定します。
1 2 3 4 5 6 7 |
$ git branch * feature-branch another-branch $ git merge another-branch # Gemfile.lock や db/schema.rb がコンフリクト! |
another-branch のファイル変更内容を全面的に採用する場合。
1 2 3 4 |
$ git checkout --theirs Gemfile.lock $ git checkout --theirs db/schema.rb |
feature-branch のファイル変更内容を全面的に採用する場合。
1 2 3 4 |
$ git checkout --ours Gemfile.lock $ git checkout --ours db/schema.rb |
そして、その後コミット。
1 2 3 4 5 |
$ git add Gemfile.lock $ git add db/schema.rb $ git commit |
以上の手順で、コンフリクトが発生した場合に、片方のブランチの変更内容のみを採用することができます。
- – 参考リンク –
- マージでコンフリクトした際にどちらかのブランチの内容を適用 (git merge, conflict, checkout, –ours, –theirs) – いろいろ備忘録日記
- [git]マージ時のコンフリクトで片側の変更だけ適用する方法 – Qiita
- Railsで良くコンフリクトするファイルの対処方 – Qiita
- Git の関連記事
- git cleanでUntracked files(未追跡ファイル)をまとめて削除
- .gitignoreを自動生成するgiboとgi(gitignore.io)コマンド
- git管理ファイルを.gitignoreに追加してgit管理から外す
- git logコマンドで他ブランチにマージされていないコミットのみを確認
- Bitbucketで作成済みWikiページの一覧リストを確認
- GitHubのgh-pages (github.io)でWebページを公開
- git diffで長い行を折り返し表示
- git diffでブランチ間のファイル差分を確認するあれこれ
- Git の履歴からファイルを完全に削除する – git filter-branch
- Bitbucketアカウント作成〜ローカルのGit既存プロジェクトをインポート(push)
Leave Your Message!