【GitHub超初心者入門】この前初めてGitHubを使い始めたエンジニア見習いが書くGitHubの使い方と実践～とりあえず一緒に動かしてみようぜ！～

たくさんの「LGTM」ありがとうございます。
ちょっと別視点からバージョン管理システムの記事を書いてみました。
そちらもよろしければごらんくださいませ。
[【Git】オレならこう説明する！Git初心者への用語説明](https://qiita.com/nnahito/items/e546b27f73e7be131d4e)

後、[個人ブログ](https://nnahito.com/)もはじめましたのでよろしければ（宣伝）

3年ぶりにこの記事の続きをnoteで書きました。
https://note.mu/nahito/n/nded6e4dd7382

# はじめに
「勝利にコミットせよ！」「結果にコミットせよ！」
……は？
何を言ってるかさっぱりわかりません．
コミットって何？つーかコミットって日本語で言うと何？言ってみろよ！！！
そんなエンジニア見習いがとうとうGitHubを勉強し始めました．
一緒にターミナルをいじりながら読んでいくと，理解が深まるかもしれません．


# GitHubとは？
要は自分の書いたコードを公開するツールです．
企業では，その会社の中だけで公開し，[バグ](http://tsumari.zapto.org/detail.php?id=73)やセキュリティ上の問題がないかなどを他の社員に見てもらい，レビューしてもらったりもしています．


#GitHubのおおまかな仕組み
![大まなかな仕組み](https://qiita-image-store.s3.amazonaws.com/0/63338/10f08e65-d53a-7615-a892-3cfc459394af.png)

## 用語の説明
まず先に，訳の分からない用語の説明からしておきます．
すべて私なりの解釈なので，間違っていたら，ご指摘をお願い致します．

**インデックス**
これから登録するファイルが，以前とどう変わったかを登録する一時的な場所です

**リポジトリ**
貯蔵庫．データなどを保存しておく場所です

**リモートリポジトリ**
GitHub上の，データを保存している場所を指します

**ローカルリポジトリ**
GitHubに送信するデータを登録しておく，自身のPC上の場所を指します

**コミット**
GitHubでは，GitHubにデータを送信する前に一時的にローカル環境にデータを登録し，その後一気にGitHub上に送信します．
そのローカル環境にデータを登録することをコミットといいます．

**プッシュ**
ローカル環境に登録していた（コミットされた）データをGitHubに送信＆公開することを言います．


## GitHubの流れ
ここでは，GitHubにデータを送信するまでの大まかな流れと仕組みを説明します．

1）あなたのPCで開発した物を，ローカルリポジトリのインデックスに追加（アッド）します．
2）あなたのPCで開発した物を，ローカルリポジトリに登録（コミット）します
3）全て登録し終えた後，それらをGitHubに送信（プッシュ）します

以上です


# 実際に使ってみる
とりあえずMacintoshでやってみます．
GitHubのアカウントは適当に作れると思いますので，割愛します．

## GitHubにリポジトリを作る（リモートリポジトリ）
ではまず，GitHub上にリポジトリを作ります．
TOPページ右下の，「＋New Repository」を押してください・
![＋New Repository](https://qiita-image-store.s3.amazonaws.com/0/63338/faa4a8e6-8532-5cb3-747f-7ac135f266e1.png)

次に，項目をうめて，「Create Repository」を押します．
これでリポジトリの作成が完了です．
![Create Repository](https://qiita-image-store.s3.amazonaws.com/0/63338/9bc5cbc4-793b-cea2-784c-beaec0aadeb7.png)

表示されたページのURIを使いますので，とりあえずそのことを覚えておいてください．
![URI](https://qiita-image-store.s3.amazonaws.com/0/63338/50a29036-5aa8-8f98-3dcf-f8f330cc855e.png)



## ローカル環境にリポジトリを作る（ローカルリポジトリ）
次にローカルリポジトリを作成します．
作る場所はどこでも良いのですが，とりあえずHOMEディレクトリの下にでも作っておきましょうか．

ターミナルで以下のコマンドを叩いていきます

```bush:terminal
$ mkdir github
$ cd github
$ mkdir gittest
$ cd gittest
$ git init
```

`$ git init`を叩くと，ローカルリポジトリが作成されます．


## ファイルをローカルリポジトリに登録（コミット）してみる
では実際にファイルをローカルリポジトリに登録してみましょう．
適当にテキストファイルを作成します．
私はこれを作成した`ホームディレクトリ/github/gittestフォルダ`に保存しました．

```text:test.txt
hello git!
```

次に，データの変更点を追加します．
今回の場合は「新規作成」ということになりますね．
これらはgitのコマンドで全部勝手にやってくれます．

`$ git add test.txt`

上記のコマンドを叩くと，変更点を勝手にインデックスに追加してくれます．
何もエラーが表示されなければ成功です．
例えば
`fatal: Not a git repository (or any of the parent directories): .git`
が表示されたら，`git init`が失敗している（ローカルリポジトリが作成できてない）ということになります．

インデックスにデータを追加したら，登録（コミット）します．

`$ git commit -m "初めてのGitHub！"`

このコマンドで，インデックスの内容が全てローカルリポジトリに登録されます．
ワオ簡単！

この時点では，『ローカル』リポジトリなので，GitHub上には反映されておりません．


# GitHubにデータを送信する（リモートリポジトリにデータをプッシュする）
では，GitHubにデータを公開してみましょう．
先ほどのURIを使います．
![URI](https://qiita-image-store.s3.amazonaws.com/0/63338/50a29036-5aa8-8f98-3dcf-f8f330cc855e.png)

まず，インデックス（ファイルの変更点などのリスト？）をGitHubに作成．
`$ git remote add origin https://github.com/あなたのUSER_ID/HelloGit.git`

そしてコミットされたデータをGitHubに送信（プッシュ）します．
`$ git push origin master`
※ GitHubは、最近作ったリポジトリだとmasterではなく`main`の場合があります。
※ mainブランチの場合は`$ git push origin main`に適宜読み替えてください！

ここまでエラーなく進めると，GitHubにデータが登録されていると思います．
![Push](https://qiita-image-store.s3.amazonaws.com/0/63338/5574f758-9933-831a-977e-cbb27ca6e955.png)


## とりあえずここまでのまとめ
さあ，いろいろコマンドが出てきたのでまとめてみます．（自分用も兼ねて

1）ローカルリポジトリを作成する
`$ git init`

2）ローカルリポジトリにファイルの変更点を追加（インデックスに追加）
`$ git add ファイル名`

3）ローカルリポジトリにインデックスに追加したファイルを登録
`$ git commit -m "変更点などのコメント"`

4）追加したインデックス（ファイルの変更点など）をGitHubに作成
`$ git remote add origin リポジトリのURI`

5）ローカルリポジトリのファイルをGitHubのリポジトリに送信
`$ git push origin master`

勝利にコミットせよ！
勝利に，ローカルリポジトリにデータを追加せよ！
うん，やっぱり意味わかりませんね．


# プッシュしたデータを変更・更新してみる
せっかくGitHubにデータを公開したのですから，変更してみましょうか．
先ほどのtest.txtを編集してからプッシュしてみましょう．

```text:test.txt
hello git!
Edit test!
```

1）変更をインデックスに追加
`$ git add test.txt`

2）ファイルを登録（コミット）
`$ git commit -m "変更してみたよ"`

3）データの送信
`$ git push origin master`

エラーなく進めたら，更新出来ていると思います．
![変更](https://qiita-image-store.s3.amazonaws.com/0/63338/dce62661-cddd-2aab-147f-2c3f8dd7048a.png)


# ブランチ（枝）とは？
ブランチを切る……マージする……これまたGitにはよく出てくるワードではないでしょうか？
枝を切って結合する？
ってか，「マージ」ってそもそも動詞だから「マージする」 = 「結合するする」じゃねーの？

## 用語説明
**マージ**
「結合する」という意味．
複数に分岐させた物をつなぎます

**ブランチ**
その名の通り「枝」．
一気にバージョンを上げる時などに，失敗した時用にコピーを作っておくイメージ

![06.png](https://qiita-image-store.s3.amazonaws.com/0/63338/e60dea30-4fd1-c3bd-1d43-31e2b1236208.png)


## 実際にブランチを作ってみる
まあ，まずはブランチを作ってみましょうか．

`$ git branch testbranch`

これで「testbranch」という名前のブランチが作成されます．
上図で言うところの「Ver.2.0β」のイメージですね．

なお，今ある（存在する）ブランチは，

`$ git branch`

で確認できます．


## ブランチを移動する

`$ git branch`でブランチを確認すると，
「master」と「testbranch」というブランチがありますね？

![ブランチを作ってチェックしてみた](https://qiita-image-store.s3.amazonaws.com/0/63338/19fdaece-ad9d-87eb-42d9-57cbedd86210.png)

今は「master」というブランチに「\*」がついています．
これは今プッシュ（GitHubにデータを送信）すると，
**masterブランチに全部データが書き込まれますよ**という意味になります．

いやいや，せっかくコピーを取ったのだからそっちに書き込んでいってもらわないと
困りますよね？

参照＆書き換え先のブランチをtestbranchに変えてみます．

`$ git checkout testbranch`

これで再度`$ git branch`をすると，「\*」の位置がtestbranchに移っていることが確認できます．

![ブランチの移動の確認](https://qiita-image-store.s3.amazonaws.com/0/63338/b732a454-842b-dad7-cc23-10db8c2fac81.png)


## 作ったブランチにデータを送信してみる
では，testbranchにデータを送信（プッシュ）してみます．
まずはテキストを書き換えましょうか…

```text:test.txt
hello git!
Edit test!
branch test!
```

1）インデックスに変更点を登録
`$ git add test.txt`

2）ファイルをローカルリポジトリに登録（コミット）
`$ git commit -m "ブランチを作ってそのブランチにプッシュ！"`

3）GitHubにローカルリポジトリのデータを送信（プッシュ）
`$ git push origin testbranch`
！注意！
今回は「testbranch」にデータを送信するので，
$ git push origin **testbranch**
です！

ではGitHub上に送信されているかどうかを確認してみます．
左のブランチのプルダウンから「testbranch」を選んでください．

![ブランチの確認](https://qiita-image-store.s3.amazonaws.com/0/63338/c4b866a5-bb19-7062-c8b0-c61b3bddd9c3.png)

すると，先ほどプッシュしたものが反映されていると思います．

![ブランチの確認](https://qiita-image-store.s3.amazonaws.com/0/63338/a31f82c2-b1fa-64c2-ec0e-36e4dd2c74c9.png)


## ブランチを本筋に統合する
所謂「マージ」と言うものをしてみます．
ブランチを本筋に反映させます．

masterブランチに，testbranchを取り込みます．

1）まずは取り込み先のブランチを選択します．
`$ git checkout master`

2）そして，materにtestbranchを結合します．
`$ git merge testbranch`

3）最後に，結合情報をGitHubに送ります（プッシュ）
`$ git push origin master`
今回は「master」ブランチにデータをプッシュするため，コマンドは「master」になっています．

では反映されているかを確認してみます．
![ブランチの確認](https://qiita-image-store.s3.amazonaws.com/0/63338/b649b579-362f-6940-276d-03a37b60c07a.png)

反映されていますね！
このようにしてバージョンデータを管理できるっぽいです．
いやー…便利！！
なのかな？


## ここまでのまとめ
今回もコマンドをまとめてみます．

1）新しいブランチを作る
`$ git branch ブランチ名`

2）今あるブランチを確認する
`$ git branch`

3）ブランチを移動する
`$ git checkout ブランチ名`

4）ブランチを結合（マージ）する
※`$ git checkout`で，結合したいブランチに移動して…
`$ git merge 取り込むブランチ名`

で，「ブランチを切る」ってどのことですか…？


# 一旦ここまで
次はGitHub上のデータをローカルリポジトリにダウンロードする「プル（pull）」というのをやってみます．

続きをnoteで書きました！
よかったらぜひ！！
https://note.mu/nahito/n/nded6e4dd7382