#はじめに
Gitでの共同開発の中でpushでミスった経験からしっかりpushの挙動を確認してみました。
#対象者
pushは使っているけど、実際にどんなことをしているのかあまりわかっていない方。
#実際に試した内容
testディレクトリに空のindex.htmlファイルがあるとする。
ローカルブランチは下記だとする。
master
hoge
fuga
hogeブランチにはindex.htmlに「hogehoge」と入力してコミット
fugaブランチにはindex.htmlに「fugafuga」と入力してコミット
###実験1
今いるブランチ以外のブランチをpushできるか?
master
*hoge
fuga
hogeブランチで
$ git push origin fuga を実行。
###検証結果
pushされたのは「fugafuga」と書かれたindex.html
つまり、hogeブランチでpushしたがfugaブランチの内容がpushされた。
###実験2
ローカルブランチ名以外でpushできるか?
次にfugaブランチに移動。
master
hoge
*fuga
$ git push origin hogehoge を実行。
###検証結果
$ git push origin hogehoge
error: src refspec hogehoge does not match any
error: failed to push some refs to リモートリポジトリ名
となった。
つまり存在しないブランチをpushしようとしたのでエラーが表示された。
#結論
以上の結果からpushの挙動は以下のこととなる。
・カレントブランチがどこにいても他のブランチの内容をpushできる。
・しかしローカルブランチ名が一致しないとエラーが返ってくる。
・どこのブランチでpushを実行するかは関係なく、ローカルブランチ名が存在すれば、そのローカルブランチがpushされる。
#補足
@yonceさんが書かれているこちらの記事が非常にわかりやすいので、ぜひ参考にしてみてください。
https://qiita.com/yonce/items/b09f35ab301befde7803
$ git push origin master
普段pushする時に使っていたこの書き方は
$ git push origin <PUSHしたいローカルブランチ名>:<PUSH先リモートブランチ名>
の省略形だったんですね。
pushしたいローカルブランチ名とリモートブランチ名を一緒にする場合は省略できるんです。
反対に別名でpushしたい場合は、:
の後を任意の名前にすればOKです。