Git小技:実例で見る、別ブランチの差分をrebaseやmerge以外で取り込む方法
ブランチを切ってから時間が経過し、大本のmasterないしdevelopブランチのコミット内容を取り込みたい時のお役立ちメモ。
使えるシーン
fast-forwardでの取り込みはこんな時に便利です。
- 緊急リリースなどで、git-flowのお約束であるdevelopブランチを経由せずに
masterにマージされてしまったものを、developブランチに取り込みたい - GitHubでフォークしてから時間が経ち、フォーク元の更新をまるっと取り込みたい
手順
作業スペースにて、リモートをoriginではなく、upstreamとして登録します。
$ git remote add upstream <リポジトリのURL>
リポジトリとブランチ名を指定して取り込みます。
$ git pull upstream master
実例
fork元のmasterブランチを、手元にあるforkリポジトリのmasterブランチに取り込みます。
大分前にforkしたmroongaのリポジトリが手元にあるので、それを使います。
それでは、ステップを追って説明します。
リモートリポジトリの登録を行う
リポジトリのディレクトリにて、git remote add upstream <repo-url>
を実行します。
$ git remote add upstream https://github.com/mroonga/mroonga.git
リモートリポジトリの登録内容を確認する
リモートリポジトリを認識させる事が出来ました。
$ git remote show upstream * remote upstream Fetch URL: https://github.com/mroonga/mroonga.git Push URL: https://github.com/mroonga/mroonga.git HEAD branch: master Remote branch: master new (next fetch will store in remotes/upstream) Local ref configured for 'git push': master pushes to master (local out of date)
リモートリポジトリとの差分を取り込む
fast-forwardで差分を取り込みます。
$ git pull upstream master remote: Counting objects: 123, done. remote: Compressing objects: 100% (58/58), done. remote: Total 86 (delta 48), reused 58 (delta 21) Unpacking objects: 100% (86/86), done. From https://github.com/mroonga/mroonga * branch master -> FETCH_HEAD Updating c18d77f..fd164eb Fast-forward .gitignore | 1 + doc/files.am | 4 + doc/locale/en/LC_MESSAGES/reference.po | 1340 +++++++++++++++++++++++++--------------------- doc/locale/ja/LC_MESSAGES/reference.po | 1395 ++++++++++++++++++++++++++---------------------- doc/source/reference.rst | 1 + doc/source/reference/troubleshooting.rst | 42 ++ ha_mroonga.cpp | 176 ++++-- ha_mroonga.hpp | 4 + plugin_version | 2 +- test/sql/suite/mroonga/storage/column/date/r/zero_date.result | 27 + test/sql/suite/mroonga/storage/column/date/t/zero_date.test | 38 ++ test/sql/suite/mroonga/storage/column/datetime/r/zero_date.result | 27 + test/sql/suite/mroonga/storage/column/datetime/t/zero_date.test | 38 ++ .../sql/suite/mroonga/storage/fulltext/boolean_mode/pragma/weight/r/three_or_more_sections.result | 21 + test/sql/suite/mroonga/storage/fulltext/boolean_mode/pragma/weight/t/three_or_more_sections.test | 44 ++ version | 2 +- version_in_hex | 2 +- version_micro | 2 +- 18 files changed, 1864 insertions(+), 1302 deletions(-) create mode 100644 doc/source/reference/troubleshooting.rst create mode 100644 test/sql/suite/mroonga/storage/column/date/r/zero_date.result create mode 100644 test/sql/suite/mroonga/storage/column/date/t/zero_date.test create mode 100644 test/sql/suite/mroonga/storage/column/datetime/r/zero_date.result create mode 100644 test/sql/suite/mroonga/storage/column/datetime/t/zero_date.test create mode 100644 test/sql/suite/mroonga/storage/fulltext/boolean_mode/pragma/weight/r/three_or_more_sections.result create mode 100644 test/sql/suite/mroonga/storage/fulltext/boolean_mode/pragma/weight/t/three_or_more_sections.test
自分のリポジトリへpush
リモートへpushしても、rejectedとはなりません。
$ git push origin master Counting objects: 123, done. Delta compression using up to 8 threads. Compressing objects: 100% (79/79), done. Writing objects: 100% (86/86), 27.31 KiB, done. Total 86 (delta 51), reused 1 (delta 0) To git@github.com:y-ken/mroonga.git c18d77f..fd164eb master -> master
簡単ですね!
参考記事
GitHubでプルリクエスト用ブランチを保守するメモ
http://tanakahisateru.hatenablog.jp/entry/20120208/1328632127