GitHubを用いたバージョン管理方法

# はじめに
GitHubを用いた開発について、様々な記事がありますが、一連の流れが頭で整理できていなかったので、自分なりにまとめてみました。
GitやGitHubとは何か、初期設定はどうすればいいかについては以下の記事を参考にしてください。
<TABLE ALIGN=CENTER>
  <TR>
    <TD WIDTH=400px>
      <A HREF="https://qiita.com/kouatht/items/a851d4cbc0dd76955bba" TARGET="_blank"><strong>GitとGitHubとは　簡単に理解しイチからMacに導入する</strong></a>
      <A HREF="https://qiita.com/kouatht/items/a851d4cbc0dd76955bba" TARGET="_blank">
      <BR>
    </TD>
    <TD WIDTH=150px>
    </TD>
  </TR>
</TABLE>

# GitHubを用いた開発の流れ

GitHubを用いた開発の全体像は以下の図のようにまとめられます。
下の`git checkout -b develop`から始まり反時計回りに進んだ後、`git branch -d develop`を終えると再び初めに戻って作業を繰り返していきます。
以降で詳しい説明を以降で行なっていきます。
![github_chart.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/932675/fbffa28b-f019-1faf-399f-969eff8c5e19.png)

:::note
[追記]2020年、Githubではデフォルトのブランチ名がmasterからmainに変わりました。そのため、以降の説明のmasterを全てmainに置き換えて下さい。
また、それにより、ローカルのデフォルトのブランチ名もmasterからmainに変える必要があります。
ローカルリポジトリ上で下記のコマンドを実行すると、デフォルトのブランチ名を変更できます。
:::

```zsh
$ git config --global init.defaultBranch main
```



# 目次
1. [リモートを追加(初回のみ)](#1-リモートを追加初回のみ)
1. [開発用のブランチの作成と切り替え](#2-開発用のブランチの作成と切り替え)
1. [変更をステージに追加](#3-変更をステージに追加)
1. [変更を記録する(コミット)](#4-変更を記録するコミット)
1. [リモートリポジトリ(GitHub)へ送信する](#5-リモートリポジトリgithubへ送信する)
1. [変更をmasterブランチに統合(プルリクエスト)](#6-変更をmasterブランチに統合プルリクエスト)
1. [ブランチの切り替え](#7-ブランチの切り替え)
1. [リモートの情報の取得と反映](#8-リモートの情報の取得と反映)
1. [開発用ブランチの削除](#9-開発用ブランチの削除)

## 1. リモートを追加(初回のみ)
まず、リモートリポジトリの登録を行います。[GitHub](https://github.com)を開き、新たに作成した空のリポジトリを開きます。
緑のcodeというボタンを押すとURLが表示されるので、右の四角の部分をクリックしてコピーしましょう。

![copy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/932675/1fdeae31-f2ea-2857-53c9-3f6e4a217d2f.png)

その後、ターミナルでローカルリポジトリのディレクトリに移動し、下記コマンドでリモートの登録を行います。

```zsh
$ git remote add origin "リモートURL"
```



## 2. 開発用のブランチの作成と切り替え
次に、`git init`を行ったディレクトリ上でブランチを作成します。下記コマンドで現在いるブランチを確認できます。アスタリスクがついているのが現在のブランチです。

```zsh
$ git branch
* master
```

下記コマンドで開発用のdevelopブランチを作成し、ブランチを切り替えることができます。

```zsh
$ git checkout -b develop

$ git branch
* develop
  master
```

:::note warn
必ずdevelopブランチに切り替えたあと、開発を行いファイルに変更を加えていきます。
masterブランチで開発を行なってしまうと、変更分を正しくリモートに送信できません。
:::


## 3. 変更をステージに追加
ファイルに変更を加えた後、下記コマンドで変更をステージに追加します。
ステージとはファイルの変更を記録(コミット)する前に一時的に保管する場所のことであり、記録するファイルの選別や保護という役割があります。
追加する対象によって三つのコマンドを使い分けましょう。

```zsh
$ git add "ファイル名" # 特定のファイルのみを追加する場合
$ git add "ディレクトリ名" # 特定のディレクトリ内のファイルをまとめて追加する場合
$ git add . #変更を加えた全てのファイルを追加する場合
```

## 4. 変更を記録する(コミット)
ステージに追加したファイルを記録する操作がコミットです。
コミットはどのような操作を行ったかを明確にするために-mでメッセージ付きで行うことを推奨します。

```zsh
$ git commit -m "メッセージ"
```


## 5. リモートリポジトリ(GitHub)へ送信する
ローカルリポジトリにコミットされた変更分をリモートリポジトリ(GitHub)へ送信します。
このとき、リモート名には最初のステップでの、リモートの登録名を書きます。
ブランチ名は現在いるローカルのブランチ名です。今回はdevelopにあたります。

```zsh
$ git push "リモート名" "ブランチ名"
$ git push origin develop
```

pushの際に、GitHubのユーザー名やパスワードを聞かれるかもしれません。
パスワードについては、[こちら](https://docs.github.com/ja/github/authenticating-to-github/creating-a-personal-access-token)の記事で取得できる個人用アクセストークンを利用してください。



## 6. 変更をmasterブランチに統合(プルリクエスト)
pushを行うとGitHub上でCompare&pull requestという表示が出ます。
![スクリーンショット 2021-10-27 17.19.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/932675/c5deddd2-98f7-9c52-168e-6efb41e24b6a.png)
これをクリックすると、リモートリポジトリのmasterブランチに変更を統合するリクエスト(プルリクエスト)を出す確認画面に移ります。
![スクリーンショット 2021-10-27 17.20.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/932675/41decf0e-8455-d058-4023-97f1066a9de7.png)
ここで、右下のCreate pull requestを押すと、プルリクエストが出せます。
プルリクエストを出すと、そのリクエストを許可してmasterブランチに統合(マージ)するかどうかの確認画面に移ります。
![スクリーンショット 2021-10-27 17.20.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/932675/01719a08-6747-b559-3d9a-7b8dc7b7ae67.png)
許可する場合はMerge pull requestを押してください。すると、delete branchという表示が出てリモートリポジトリ上のdevelopブランチを削除するかを聞かれます。
毎回、開発用のブランチは削除して新たに作ることを推奨するため、dekete branchを押してdevelopブランチを削除しましょう。

## 7. ブランチの切り替え 
マージを終えたあと、ターミナル上で、下記コマンドでローカルのmasterブランチに移動します。

```zsh
$ git checkout master
$ git branch
* master
  develop
```

## 8. リモートの情報の取得と反映
そして、リモートリポジトリの情報をローカルのmasterブランチにも反映させます。

```zsh
$ git pull "リモート名" "リモートのブランチ名"
$ git pull origin master
```

## 9. 開発用ブランチの削除
最後に開発用のdevelopブランチを削除しておきましょう。

```zsh
$ git branch -d "ブランチ名"
$ git branch -d develop
```

その後、新たな開発用ブランチをmasterブランチから生成してブランチを切り替えておきます。

```zsh
$ git checkout -b develop
```

:::note alert
必ず新たな開発用ブランチの生成と切り替えを行なってから別の作業を行って下さい。
これをあとでしようとすると、masterブランチにいることを忘れてmasterブランチ上で変更を加えてしまいます。
:::

# まとめ
GitHubを用いた開発の流れについてまとめてみました。
個人で行う場合でも、この手順に沿って開発を進めるとバージョン管理が楽になります。
図にまとめてみると自分でも理解が深まりました。