vikkeの趣味やらなんやらのごった煮blog

趣味の技術や音楽やバイクや写真のページ

gitで上流branchを取り込む

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/masterorigin/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の話はまだ今度。