リモートにブランチを送る
新しいブランチを送るには1
$ git push <remote repository> <branch>
でリモートレポジトリに遅れてGitHubとかならウェブから見れば新しい ブランチが確認できます。
$ git clone [email protected]:rcmdnk/sentaku.git
...
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/install
remotes/origin/master
$ git checkout -b new_br
Switched to a new branch 'new_br'
$ git branch -a
master
* new_br
remotes/origin/HEAD -> origin/master
remotes/origin/install
remotes/origin/master
$ git push origin new_br
Total 0 (delta 0), reused 0 (delta 0)
To [email protected]:rcmdnk/sentaku.git
* [new branch] new_br -> new_br
$ git branch -a
master
* new_br
remotes/origin/HEAD -> origin/master
remotes/origin/install
remotes/origin/master
remotes/origin/new_br
$
こんな感じでoriginにnew_brというブランチを送ることが出来ました。
pullしてみる
さて、この状態で、new_brの中で編集してcommit、pushすると
リモートのorigin/new_brにも正しく反映されます。
普段、この様なブランチはちょっと作ってmasterにmergeしたら消す、
的な事をしてたので知らなかったんですが、
ここでpullをしてみると
$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> new_br
$
という様に、リモートにつながってません。
pushが出来るので当然つながってるもんだと思ってましたが
確かに.git/configを見てみるとない模様。
リモートとの接続を調べる
ここでリモートとどの様に繋がってる見るにはremote showコマンドを使います。
テストのために、一度他で同じレポジトリをチェックアウトして
new_br_2というブランチを別途追加してあります。
上の続きでbranch -aしてみると
$ git branch -a
master
* new_br
remotes/origin/HEAD -> origin/master
remotes/origin/install
remotes/origin/master
となり、new_br_2は見えてない状態です。
ここでremote showしてみると
$ git remote show origin
* remote origin
Fetch URL: [email protected]:rcmdnk/sentaku.git
Push URL: [email protected]:rcmdnk/sentaku.git
HEAD branch: master
Remote branches:
install tracked
master tracked
new_br tracked
new_br_2 new (next fetch will store in remotes/origin)
Local branch configured for 'git pull':
master merges with remote master
Local refs configured for 'git push':
master pushes to master (up to date)
new_br pushes to new_br (up to date)
$
こんな感じです。new_br_2に関してはまだローカルでトラックされてません。
(一度fetchかpullをすれば登録されます。)
その下を見るとgit pull用に設定されているのがmasterだけになってることが
分かります。
その下に行くとgit pushに関してはnew_brも登録されてます。
Gitではダウンロードする側とアップロードする側を別途管理してるため、
上のgit pushだけだとアップロード用だけに登録される、ということです。
remote showの他にも、branch -vvでローカルブランチのpull的な繋がりを見ることも出来ます。
$ git branch -vv
master 6c4e88e [origin/master] added -r option
* new_br 6c4e88e added -r option
となって、masterの方はorigin/masterとつながってますが、
new_brの方はどこともつながってないことが分かります。
pullにも登録する
ここでpullにも登録するには上のメッセージにもあるように
$ git branch --set-upstream-to=origin/new_br new_br
もしくは
$ git branch -u origin/new_br new_br
とします。最後のブランチ名は現在居るブランチを登録するときには省けます。
$ git branch -u origin/new_br
Branch new_br set up to track remote branch new_br from origin.
$ git remote show origin
...
Local branches configured for 'git pull':
master merges with remote master
new_br merges with remote new_br
...
OK。
pushするときに登録する
この様に後から登録しないでも、pushするときに登録することが出来ます。
$ git push -u origin new_br
と、-uオプションを付けるだけ。
なので、この辺を理解出来たらリモートにブランチを送る時は
push -uで送っておけばOK、ということです。
