Shoichi Matsuda's diary

このブログは移転しました。 https://shoma2da.net/ が新しいブログです。

今さら聞けないgit pushコマンド

id:koogawaさんのgitの記事を読みました。
これを読んでそういえばみんな知ってるのかなと思った点があるので書いておきます。

取り上げるのはgitのpush周りのお話です。
(これ以降の記事中のリモートは全てoriginとします。)

このコロンは何??

リモートブランチの削除で以下のようなコマンドを実行すると思います。

git push origin :hoge

コロンが付いていますがこのコロン正体、正しく説明できますか?

実用Git

実用Git

  • 作者: Jon Loeliger,吉藤英明(監訳),本間雅洋,渡邉健太郎,浜本階生
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2010/02/19
  • メディア: 大型本
  • 購入: 7人 クリック: 287回
  • この商品を含むブログ (44件) を見る

pushコマンドの実体

普通、ローカルブランチをリモートに反映する際のコマンドはこんな感じです。

git push origin hoge

実はこのコマンド、省略されていることをご存知ですか??
省略される前のコマンドは以下のとおりです。

git push origin hoge:hoge

コロンが出てきました!!これはどういうことなのでしょうか。


実は以下のような意味になります。

ローカルのhogeブランチをリモートのhogeブランチにpush!です。

コマンドに落としこんでみましょう。

git push {ローカルのhoge}:{リモートのhoge}

2ヶ所あったhogeは前者がローカルブランチ、後者がリモートブランチです。
git push origin hogeはリモート・ローカルのどちらもhogeを指定する、という省略した書き方だったのです!)

これさえわかれば、例えばこんなことも。

git push origin master:test

ローカルのmasterブランチをリモートのtestブランチにpushしています。

ローカル作業中に間違えてmasterブランチでコミットしていた!といった場合に使えそうです。
(ローカルでブランチ整理してからpushするほうが安全そうではありますが...)

でブランチの削除って結局...?

では最初のリモートブランチ削除コマンドをもう一度見てみましょう。

git push origin :hoge

ここまでを理解していただいていればピンとくるのではないでしょうか。

そうです。実はこのコマンド、以下のような指定です。

git push origin {何もない!}:{リモートのhoge}

「何もないものをリモートのhogeにpushする = hogeの存在を何もないものにする = hogeを削除」です。

スッキリですね!!