gitの上流branchを取り込む
githubとかでforkしてた場合、そのfork元の上流branch(upstream branch)を取り込まなければならないケースはままある。
が、やり方をいつも忘れるのでメモしておく。
upstream branchとは
ここらへん、自分でも理解があやしいので突っ込んで欲しい。
upstream branch自体はforkとは関係無い。
local branchと紐付いたremote branchを指す。
なので、origin/masterのoriginはlocal branch masterのremote branchと言える。
upstream branchの追加
1
| $ git branch <local branch> --set-upstream-to=<remote branch>
|
あるいは、現在のbranchがlocal branchで良ければ、
1
| $ git branch --set-upstream-to=<remote branch>
|
fork元のremote upstreamを追加する
1
| $ git remote add <remote名> branch
|
fork元を取り込んでみる
git@github.com:qmk/qmk_firmware.git
を fork 元とした git@github.com:vikke/qmk_firmware.git
がある。このfork元を取り込む。
clone直後
1 2 3 4
| vikke@kosanji:~/vcswork/qmk_firmware [master]$ git remote -v origin git@github.com:vikke/qmk_firmware.git (fetch) origin git@github.com:vikke/qmk_firmware.git (push)
|
1 2 3 4 5 6 7 8 9
| vikke@kosanji:~/vcswork/qmk_firmware [master]$ git remote add upstream git@github.com:qmk/qmk_firmware.git
vikke@kosanji:~/vcswork/qmk_firmware [master]$ git remote -v origin git@github.com:vikke/qmk_firmware.git (fetch) origin git@github.com:vikke/qmk_firmware.git (push) upstream git@github.com:qmk/qmk_firmware.git (fetch) upstream git@github.com:qmk/qmk_firmware.git (push)
|
無事リモートが追加された。
次にupstreamの変更を取り込む。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| [master]$ git fetch upstream Warning: untrusted X11 forwarding setup failed: xauth key data not generated remote: Enumerating objects: 10933, done. remote: Counting objects: 100% (10933/10933), done. remote: Total 78956 (delta 10932), reused 10932 (delta 10932), pack-reused 68023 Receiving objects: 100% (78956/78956), 32.71 MiB | 9.27 MiB/s, done. Resolving deltas: 100% (42191/42191), completed with 1735 local objects. From github.com:qmk/qmk_firmware * [new branch] arm-dac-work -> upstream/arm-dac-work * [new branch] arm_audio_fixes -> upstream/arm_audio_fixes * [new branch] arm_rgb -> upstream/arm_rgb * [new branch] arm_split -> upstream/arm_split * [new branch] audio_out -> upstream/audio_out * [new branch] autogen_usb_description -> upstream/autogen_usb_description * [new branch] automate_kc_prefix -> upstream/automate_kc_prefix * [new branch] b6_b7_audio -> upstream/b6_b7_audio * [new branch] better_chibios_wait -> upstream/better_chibios_wait * [new branch] breaking_update -> upstream/breaking_update ..... ..... `
|
これで、upstreamが取得出来た。
次はupstream/master
をorigin/master
にmergeする。
1 2 3 4 5 6 7 8 9 10 11
| [master]$ git merge upstream/master Removing util/new_project.sh Removing util/install_dependencies.sh Removing tmk_core/protocol/usb_hid/USB_Host_Shield_2.0/readme.md Removing tmk_core/protocol/usb_hid/USB_Host_Shield_2.0/examples/testusbhostFAT/readme.md Removing tmk_core/protocol/ps2_io_mbed.c Removing tmk_core/protocol/mbed/mbed_driver.h Removing tmk_core/protocol/mbed/mbed_driver.cpp .... .... Automatic merge failed; fix conflicts and then commit the result.
|
あちゃー。conflict起きた。まー、1年以上放置してたからしょうがないか。でも一応merge出来た。
git mergetool
の話はまだ今度。