リモートにブランチを送る
新しいブランチを送るには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、ということです。