Copyright © 2023 - All right reserved by Junpei K.

Photo by Martin Sanchez

    🖌️ Table of Contents

    🖌️ TOC

  1. "git push origin...
    "git push ...
  2. master:master
    master:mas...
  3. 参考
    参考

【Git】refspecを世界一かみくだいて説明する

Push/Pullで実は必ず活用している、Gitにおける「refspec」の概念を紹介します。なおここでは、Gitのpush/pullについての解説はしません。

"git push origin master"

git pushをする場合を考えます。初学者さん向けの記事では、その構文は以下のように書かれていると思います。

1git push origin master
2

解説としては、「”origin”という名前で登録してあるGitHub上のリポジトリにmasterブランチをプッシュする」というかたちになるでしょうか。私も、まだ慣れてない人向けにはそういう風に言うことが多いです。

が、ここではもう少し深掘りしてみたいと思います。4語目”master”の部分です。これは正確にはrefspec(多分reference specificationの略)と呼ばれるもので、「参照元と参照先との情報」を表しています。git pushの時には参照元=ローカルブランチで、参照先=リモートブランチです。git pullする際にはこの関係が逆になります。

master:master

上にあげたように”master”ひと単語で済ますのは、実はrefspecの省略記法で、以下のコマンドと同値です。

1git push origin master:master
2

「ローカルのmasterブランチを、リモートのmasterブランチにプッシュする」ということですね。

こうしてみた時、何らかの事情でローカルに”master”ブランチがないにも関わらず、リモートのmasterブランチにプッシュするつもりでgit push origin masterすると、以下のようなエラーになります。

1git push origin master
2# error: src refspec master does not match any
3

エラーメッセージの”src”(=source)は、refspecの参照元、つまり master:masterと正式に書いたときの左側を指します(ちなみに右側が”dst”=destinationです)。つまりこのエラーは、「おいジェームズ、ローカルには”master”ブランチないのに、そこを参照するように言ってくれちゃってるぜ?」と伝えてくれているのです(ジェームズは適宜読み換えてください)。なのでこの場合、(技術的には)以下のように対応できます。

1# developブランチがローカルにあるという想定
2git push origin develop:master
3

参考

  • 5分で分かるgitのrefspec
  • gitをpushする際にエラー発生(error: src refspec ブランチ名 does not match any) - Qiita