【Github】…or create a new repository on the command lineとは何か?処理内容を実例で解説

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

Githubでレポジトリを作成すると最初に以下のような画面が表示されます。

ここでは、表示される2番目のセクション

の中で実行している各コードの内容について実例で解説しています。

create a new repository on the command lineとは何か?

2つ目のセクションは「create a new repository on the command line」です。

「コマンドライン(黒画面)を使って新たなレポジトリを作成する」という意味です。

各コードを実行する前(コマンドをコピペする前)に、ローカル環境でプロジェクトがあるディレクトリに移動しておく必要があります。

以下で各コードの内容について解説しています。


echo “# test” >> README.md

echo “# test” >> README.mdは、READMEファイルを作成するコマンドです。

echo "# test" >> README.md

この処理で、今いるディレクトリにREADME.mdファイルを作成し、中身に「# test」を書き込んでいます

「>>」はリダイレクト(追記)を指示する記号で、指定したファイルに内容を出力する指示です。指定したファイルがない場合はファイルを新規作成します。

README.mdの拡張子「.md」はマークダウン形式のファイルであることを表しています。

マークダウンはHTMLをより簡単に記述する書き方です。例えばh1タグで囲む場合、冒頭に「#」を記述するだけでh1タグになります。


git init

2行目のgit initは自分のPCにローカルレポジトリを作成するためのコマンドです。

gitが存在していないプロジェクトで、gitを使用するために使用します。initはinitializeの略で初期化という意味です。

git init


コード実行例

コードを実行すると以下のように表示されます。

$ git init
Initialized empty Git repository in 現在のディレクトリパス/.git/

現在のディレクトリ配下に「.git」という隠しディレクトリを作成し、空のGitレポジトリーを初期化しましたという内容です。

フォルダ名の前の「.(ドット)」は隠しフォルダであることを表しています。

中にはフォルダやファイルなど、gitを使うために必要なもの一式が入っています。

ここら辺のファイルを直接いじることはあまりありません。変更が発生しやすい処理はコマンドが用意されています。

.gitというフォルダが作成され、その中にGitの関連ファイルが入っていることを認識してれば問題ありません。


git add README.md

3行目のgit add README.mdは、1行目のecho "# test" >> README.mdで作成したreadmeファイルをステージに追加する処理です。

git add とは何か?

Gitの中でも最もよく使うコードの一つgit addが使われています。

git add パス

Gitではコードやファイルに作成や変更があった場合に、いきなりローカルレポジトリに反映させず、まずはステージング(またはインデックス)という状態を挟みます。

本番前といったニュアンスで、ステージングの段階ではまだコードの変更履歴には何も追加されません。

リモートレポジトリ(Github)
  ↑ push
ローカルレポジトリ
   ↑ commit
ステージ(インデックス)
   ↑ add   ← ココ
作業中のディレクトリ

git addすると指定したファイルやディレクトリがステージに追加されます。ステージに追加することを動名詞でステージングと呼びます。


git commit -m “first commit”

4行名はgit commit -m "first commit"です。git commitもGitの中でも最もよく使うコードの一つです。

git commitはステージにあるコードをレポジトリに反映する処理です。この処理にGitのコード履歴に変更内容が反映されます。

リモートレポジトリ(Github)
  ↑ push
ローカルレポジトリ 
   ↑ commit  ← ココ
ステージ(インデックス) 
   ↑ add
作業中のディレクトリ

git commitの「-m」オプションも非常によく使います。これは「message」の略で、 コードの変更履歴にメッセージをつけます

コミットに対するメッセージなので、コミットメッセージと呼びます。

ここでは、3行目の処理 git add README.md でステージングした変更内容(README.mdの新規追加)をGitのコード履歴に反映しています。

その際、コミットメッセージを「first commit」としています。

first commitは、慣習的に第1回目のコミットで使われるメッセージです。ここは空欄でなければfirst commit以外でも問題ありません。(誰が見ても作業内容がわかる端的なメッセージをつけるのが一般的です)

なお、メッセージが空だと「Aborting commit due to empty commit message.」というエラーが発生し、コミットできません。


コード実行例

$ git commit -m "first commit"
[master (root-commit) dc53f35] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 README.md


git branch -M main

5行目はgit branch -M mainです。これは、作業中のブランチの名前をmainに強制変更するコマンドです。

git branchはブランチに関するコマンドで、オプションによってブランチの作成、移動、名前変更などができます。

「-M」オプションは、強制的にブランチ名を変更するというオプションです。

git branch -M <ブランチ名>
-Mの補足

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

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


コード実行例

$ git branch -M main


コードを実行しただけでは何も表示されません。現在のブランチ名を確かめるには、git branchコマンドを実行します。

$ git branch
* main

ブランチ名が「main」になっていることがわかります。

なお、「*」は現在のブランチを表しています。


git remote add origin https://github.com/~/レポジトリ名.git

6行目のコマンドは git remote add origin https://github.com/~/レポジトリ名.git です。

これまでの作業はすべて自分が作業しているローカルレポジトリで行ったものです。まだ他のユーザーたちと共有できるGithub上のレポジトリ(リモートレポジトリ)には何も変更を加えていません。

リモートレポジトリに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 push -u origin main

最後の7行目はgit push -u origin mainです。ローカルレポジトリのGitのコード履歴をリモートレポジトリ(Github)にプッシュする処理です。

リモートレポジトリ(Github)
  ↑ push   ← ココ
ローカルレポジトリ
   ↑ commit
ステージ(インデックス)
   ↑ add
作業中のディレクトリ

git pushも最も頻繁に使用するコードの一つです。git pushは以下のように使います。

git push [オプション] <リモートレポジトリ名> <ブランチ名>

git push -u origin mainは、6行目で登録したリモートレポジトリに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


-uと–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ブランチを上流ブランチとしてセットしたことを示してます。

これにより次回以降ローカルレポジトリのmainブランチから、リモートレポジトリoriginのmainブランチにプッシュするときはgit pushのみで実行できます。


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