【Github】…or push an existing repository from the command lineとは何か?処理内容を実例で解説

github-prograshi(プロぐらし)-kv git/github
記事内に広告が含まれていることがあります。
[PR]

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 <ブランチ名>
-Mの補足

「-M」オプションは「-m」オプションと「-f」オプションを合わせたものです。

-m: ブランチ名の変更 (--move)
-f: 強制実行 (--force)

注意点

git branch -M main を実行すると、現在のブランチ名がmain以外の場合、強制的にmainに変わってしまうので注意してください。

なお、mainブランチで実行しても、ブランチ名はmainのままで変化はおこりません。


コード実行例

$ 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だけでプッシュできるということです。

注意点

上流ブランチはローカルレポジトリのブランチ毎に設定するものです。 git push -u origin main は、ローカルのmainブランチの上流ブランチにoriginのmainブランチを指定するという意味です。

このため、他のブランチでブランチ名を省略した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」はコミットメッセージです。

リモートブランチ確認時の注意点

リモートブランチを確認するコマンド git branch -vv は「v」が2つ必要です。

「v」が一つだけだと、上流ブランチが設定されていても画面上に表示されません。

#「v」が2つの場合
$ git branch -vv
* main dc53f35 [origin/main] first commit
#「v」が1つの場合
$ git branch -v
* main dc53f35 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ブランチを上流ブランチとしてセットしたことを示してます。


タイトルとURLをコピーしました