Githubでレポジトリを作成すると最初に以下のような画面が表示されます。
ここでは、表示される3番目のセクション
の中で実行している各コードの内容について実例で解説しています。
push an existing repository from the command lineとは何か?
3つ目のセクションは「push an existing repository from the command line」です。
既にGit管理されたローカルレポジトリがある場合に、コマンドライン経由でリモートレポジトリ(Github)にプッシュする処理です。
コードは以下のようになっています。
$ git remote add origin https://github.com/~/レポジトリ名.git
$ git branch -M main
$ git push -u origin main
以下でそれぞれのコードについて解説しています。
git remote add origin https://github.com/~/レポジトリ名.git
1行目のコマンドは git remote add origin https://github.com/~/レポジトリ名.git
です。
リモートレポジトリにGitのコード履歴をプッシュするためには、まずリモートレポジトリをローカル環境に登録する必要があります。
それが、git remote addの処理です。
git remote add <任意のリモートレポジトリ名> <リモートレポジトリのURL>
リモートレポジトリのURLを毎回指定してプッシュするのは大変なので、リモートレポジトリ名いわゆる、ニックネームをつけます。
慣習的に「origin」が使われるのが一般的ですが、origin以外でもなんでもかまいません。名前を変えれば、push先のリモートレポジトリを複数設定することもできます。
詳細については 【Git】リモートレポジトリ(origin)を変更・削除・上書き・追加する方法 をご参考ください。
コード実行例
$ git remote add origin https://github.com/~/レポジトリ名.git
コードを実行しただけでは何も表示されていません。リモートレポジトリが登録されているかを確認するには、git remote -v
コマンドを実行します。
$ git remote -v
origin https://github.com/〜/レポジトリ名.git (fetch)
origin https://github.com/〜/レポジトリ名.git (push)
originというリモートレポジトリ名で指定したURLが登録されていることがわかります。
git branch -M main
2行目はgit branch -M main
です。これは、作業中のブランチの名前をmainに強制変更するコマンドです。
git branchはブランチに関するコマンドで、オプションによってブランチの作成、移動、名前変更などができます。
「-M」オプションは、強制的にブランチ名を変更するというオプションです。
git branch -M <ブランチ名>
コード実行例
$ git branch -M main
コードを実行しただけでは何も表示されません。現在のブランチ名を確かめるには、git branch
コマンドを実行します。
$ git branch
* main
ブランチ名が「main」になっていることがわかります。
なお、「*」は現在のブランチを表しています。
git push -u origin main
最後の3行目はgit push -u origin main
です。ローカルレポジトリのGitのコード履歴をリモートレポジトリ(Github)にプッシュする処理です。
リモートレポジトリ(Github)
↑ push ← ココ
ローカルレポジトリ
↑ commit
ステージ(インデックス)
↑ add
作業中のディレクトリ
git pushはGitで最も頻繁に使用するコードの一つです。
git pushは以下のように使います。
git push [オプション] <リモートレポジトリ名> <ブランチ名>
git push -u origin main
は、1行目で登録したリモートレポジトリにmainブランチの内容をプッシュするという処理です。
ブランチ名の省略
git push origin main
という記述はよく使いますが、一つ知っておくべき重要なことがあります。それはブランチ名が省略されているということです。
git pushは本来次のように使います。
$ git push <リモートレポジトリ名> <ローカルブランチ名>:<プッシュ先のリモートレポジトリ名>
ブランチ名はローカルレポジトリのブランチ名と、push先のリモートレポジトリ名を記述します。
ローカルレポジトリのブランチ名と、push先のリモートレポジトリ名が同じ場合に、「:リモートレポジトリ名」の記述を省略することができます。
git push origin main
↓↑ 同じ
git push origin main:main
仮に、ローカルレポジトリのmainブランチの内容を、リモートレポジトリのtestブランチに送りたい場合は以下のように記述します。
git push origin master:test
「-u」オプションと上流ブランチ
「-u」は、指定したリモートレポジトリのブランチを上流ブランチ(upstream)として設定するオプションです。
上流ブランチとして設定すると、git push するときにリモートレポジトリ名とブランチ名を省略できます。
すなわちgit push
だけでプッシュできるということです。
上流ブランチがある場合とない場合のpushの違い
上流ブランチを指定していない場合はpushは以下のようになります。
git push <リモートレポジトリ名> <ブランチ名>
↓ 上流ブランチが設定してある場合
git push
上流ブランチの確認方法
上流ブランチが設定してあるかどうかはgit remote -vv
コマンドを実行することで確認できます。
#上流ブランチがない場合
$ git branch -vv
* main dc53f35 first commit
#上流ブランチある場合
$ git branch -vv
* main dc53f35 [origin/main] first commit
上流ブランチがある場合は、[リモートレポジトリ名/リモートレポジトリのブランチ名] が表示されます。
よって、このローカルレポジトリのmainブランチでgit push
を実行すると、リモートレポジトリ名originのmainブランチにpushを行います。
なお、ブランチ名の横の 数値(例 dc54f35)は最新のコミット番号、末尾の「first commit」はコミットメッセージです。
–set-upstream
なお「-u」オプションは「--set-upstream
」オプションの省略形です。
オプションの前にハイフンが2つ「--
」つくものをロングオプションと呼びます。冗長な書き方でオプションの実行内容が記載されている場合がほとんどです。
オプションの前にハイフンが1つ「-」つくものをショートオプションと呼びます。ハイフンの後にアルファベット1文字が続く、省略形の記述方法です。
git push -u origin main
↓↑ 同じ
git push --set-upstream origin main
同じ処理でも人によってショートオプションとロングオプションのどちらを使うかが分かれたりしますが、驚く必要はありません。
コード実行例
「-u」つきのgit pushを実行すると以下のようになります。
$ git push -u origin main
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 228 bytes | 228.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/〜/レポジトリ名.git
* [new branch] main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.
・*[new branch] main -> main
新規にブランチを作成し、ローカルブランチmainのデータを、リモートブランチmainにプッシュしていることを示しています。
・Branch 'main' set up to track remote branch 'main' from 'origin'.
ローカルレポジトリのmainブランチに、リモートレポジトリ名originのmainブランチを上流ブランチとしてセットしたことを示してます。