研究室用に作成したGitHubマニュアルを共有する②~GitHubにpushするまでのコマンドまとめ~

# はじめに
今回の記事は[前回の記事](https://qiita.com/renesisu727/items/cf86b1d2df7f871f383f)の続きです。今回はGitのコマンドについてみていきます。

## とりあえずGitHubにpushする
GitHubにpushするまでの流れをざっと見ていきましょう。自分の場合はIDE（総合開発環境）としてPycharmを用いて、pythonスクリプトをGitHubにpushしていきます。

D:\Users\lesson_gitをプロジェクトファイルとして、lesson.pyというpythonスクリプトを作成します。このpythonファイルをGitHubにpushしていきます。

GitHubにファイルをpushするまでの流れは以下のようになります。
![4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411258/7ab87a16-b0e8-41c3-844b-9e7ce3b5fe57.png)
リポジトリとは、情報を保管する場所だと覚えておきましょう。

まず、ファイルに変更があった場合、git addでステージングエリアという控室のような場所にファイルを追加し、その次にgit commitでローカルの情報の保管場所であるローカルリポジトリに情報を保存します。

そのあとでgit pushコマンドでネット上の情報の保管場所であるリモートリポジトリに情報を保存します。

リモートリポジトリが、GitHubに対応します。

###git initコマンドで.gitファイルの作成
まずはコマンドプロンプトを開いて、lesson.pyが存在するプロジェクトファイルまで移動しましょう。

```
cd D:\Users\lesson_git
```

最初にCドライブにいる場合は、まずDドライブに移動する必要があるので以下のコマンドを打ちましょう。

```
D:
```

プロジェクトファイルまで移動した後は、次のコマンドを打ちましょう。

```
git init
```


このコマンドを打つと、プロジェクトファイル直下に.gitファイルが作成されます。中身をみていきましょう。
![12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411258/335ac26e-9d9f-573d-055e-0d1b5be247fe.png)

.gitファイルの中身には、このように様々なファイルがあります。Gitはプロジェクトファイルごとに.gitファイルを作成し、その.gitファイルの中に様々な情報が保存されます。ローカルリポジトリに情報を保存する場合や、ステージングエリアに情報を保存する場合も、結局はこの.gitファイルに変更が加えられることになります。![3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411258/d48a0a4c-2ce2-a8d4-4ffa-1bf0c4d9009f.png)



### git addコマンドでステージングエリアにファイルを追加
lesson.pyに以下のコードを打ちます。

```
print('Hello GitHub')
```
このコマンドをGitHubにpushしましょう。

次に、git addコマンドでファイルをステージングエリアに追加します。

```
git add lesson.py
```

git add ファイル名　という感じでコマンドを打ちます。すべてのファイルをステージングエリアに追加する場合は

```
git add .
```

としましょう。

### git commitでローカルリポジトリにファイルを追加
ステージングエリアにファイルを追加した後は、次のコマンドでローカルリポジトリにファイルを追加しましょう。

```
git commit
```

このコマンドを打つと、デフォルトではvimエディターが立ち上がります。ここで打つメッセージは、後でファイルの変更履歴を確認するときに見ることになります。Gitは自分一人ではなく多くの人でファイルを管理するためのツールなので、ここに打つメッセージは慣習に従いましょう。

>1行目：変更内容の要約
>2行目 ：空行
>3行目以降：変更した理由

とすることが望ましいです。細かい書き方は[こちらの記事](https://qiita.com/itosho/items/9565c6ad2ffc24c09364)に書かれているので、参考にしましょう。自分は以下のようにコメントを打ちました。
>add lesson.py
(空行)
>practice GitHub

vimエディタの使い方がよく分からない人は、
[テキストエディタVimの使い方【超初心者向け】](https://hajipro.com/vim/vim-how-to-use)
[知識0から始めるVim講座](https://qiita.com/JpnLavender/items/fabcc79b4ab0d52e1f6d)
などの記事を参考にしてください。
:wq でメッセージを保存するとcommitは終了です。

### リモートリポジトリにpush
次はリモートリポジトリにpushしましょう。
まずは[GitHub](https://github.com/)にログインして、右上の＋ボタンからNew repositoryで新しいリポジトリを作成します。PublicとPrivateを選択できますが、これはどちらでも構いません。自分はPublicを選択しました。リポジトリを作成すると、上から三つ目に次のような画面がでると思います。
![13.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411258/7a1374d9-978a-39a8-6729-ff3273d5076f.png)

自分は今回はhangi4343というアカウントでqiita_practice.gitというリポジトリを作成しました。GitHubのコマンド通りに、コマンドラインに入力しましょう。hangi4343/qiita_practice.gitの部分は自分のアカウント名とリポジトリ名に変更して、以下のコマンドを打ってください。

```
git remote add origin https://github.com/hangi4343/qiita_practice.git
git push -u origin master
```

以上のコマンドで、リモートリポジトリにpushすることができたと思います。とりあえず、これで全体の流れは終了です。次は各々のコマンドを細かく見ていきましょう。

## git add と git commitについて
git add やgit commitを実行すると、内部的にはGitオブジェクトというものが作成されます。

Gitオブジェクトには、ファイルを圧縮したblobオブジェクトと、ファイル名とファイルの中身を組み合わせたツリーファイル、「いつ、誰が、何を、何のために変更したか」が分かるコミットファイルの三つが含まれます。

このGitオブジェクトの情報は、全て.gitファイルの中に保存されています。

各々のコマンドで何が起こっているのかを図解します。
![14.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411258/12635ff8-07f0-0df0-20ae-c0c65cebf4ff.png)


git add practice.pyを実行すると、practice.pyファイルの圧縮ファイルであるblobオブジェクトがローカルリポジトリに作成され、ステージにそのblobオブジェクトのファイル名(blobオブジェクトのファイル名はファイルの中身にヘッダーをつけ加えた文字列をハッシュ関数で暗号化したもの）と元々のファイル名であるpractice.pyを組み合わせたものが作成されます。

このステージの組み合わせにより、圧縮前のファイルと圧縮後のファイルの紐づけが可能となります。ここまでがgit addを実行すると内部的に起こります。

次にgit commitを実行すると、リポジトリにツリーファイルとコミットファイルが作成されます。ツリーファイルはblobオブジェクトのファイル名と元々のファイル名であるpractice.pyを組み合わせたものが保管され、コミットファイルには

* ツリーファイルの名前
* 作成者
* 日付
* コミットメッセージ

が記録されます。git addとgit commitにより、以上のことが内部的に起きています。このことはしっかりと頭に入れておきましょう。

## リモートリポジトリにpushする時のコマンドについて
リモートリポジトリにpushする時に以下のコマンドを打ちました。

```
git remote add origin https://github.com/hangi4343/qiita_practice.git
git push -u origin master
```

このコマンドについて解説していきます。

```
git remote add origin https://github.com/hangi4343/qiita_practice.git
```

このコマンドは、originというショートカットに後ろのURLのリポジトリを登録する、という意味のコマンドです。これから何度もリモートリポジトリにアクセスするときにURLをいちいち打つのは面倒くさいので、originというショートカットに割り当てているだけです。

originの部分は、他の単語でも問題ないのですが、慣習的にoriginという名前を用います。というのも、git clone というコマンドを打ち込むときに、クローン元のリポジトリをデフォルトではoriginという名前に割り当てるため、その部分からきている慣習っぽいです。

次のコマンドをみていきましょう。

```
git push -u origin master
```

git push ＜リモート名＞ ＜ブランチ名＞ とすることで、＜リモート名＞のリポジトリに＜ブランチ名＞のローカルのブランチをpushすることになります。ブランチというのは、開発を枝分かれさせたときの枝のひとつのことで、ブランチを増やしていない限り、デフォルトのブランチ名はmasterとなっています。-u オプションを指定することで、次回から git pushとするだけでorigin リポジトリにmasterブランチをpushすることができます。

# 終わりに
次回はブランチとマージと、その他の細かいコマンドについてまとめていきます。ここまで読んで頂きありがとうございました。

[研究室用に作成したGitHubマニュアルを共有する① ～Gitの歴史と環境構築について～](https://qiita.com/renesisu727/items/cf86b1d2df7f871f383f)
[研究室用に作成したGitHubマニュアルを共有する③~ブランチとマージについて~](https://qiita.com/renesisu727/items/39bb2ef75516a97f7e69)