【初心者でも絶対分かる】Gitってなんですか！！！用語も使い方も細かく解説

## この投稿で分かること
+ Gitとは何か
+ Gitの使い方のイメージ
+ Git Hubとは
+ Gitの初歩的な使い方の流れ

## 「どのデータが最新だっけ」問題

皆さんも一度は卒論作成などで経験したことがあるのではないでしょうか？

---
【作成ファイル】

卒論＿2023.3.3.docx
卒論＿最新.docx
卒論＿修正版.docx
卒論＿完成.docx

---

「**どれが一番最新のものだっけ**…」と悩み、最終更新日時で探したり、最近使用した項目などから１つずつ開いたりと、バックアップのファイルが増えれば増えるほど、判別は大変になりますよね。

![Image_fx (6).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/eabd764c-d2a1-4c28-99e7-cc967f4868cd.jpeg)


## 共同作業でファイルを管理するのは大変

また、グループでプレゼンテーションを作成するとします。

その際

---

Aさん　⇒担当箇所：「導入・背景」　作成ファイル：プレゼン＿導入.pptx

Bさん　⇒担当箇所：「提案内容」　作成ファイル：プレゼン＿提案内容.pptx

Cさん　⇒担当箇所：「まとめ」　作成ファイル：プレゼン＿まとめ.pptx

---

▶これらのファイルを1つにまとめるには、1つのファイルにその他のファイルの中身をコピーして貼り付けなどの作業が発生します。

▶OneDriveで共有しながら修正したとしても、変更履歴が見えないことで、加筆されて必要な内容が消えても修正できなかったり、誤って最新版でないデータを更新し、一部が古い内容で作成が進んでしまったりと、懸念点が残りますね・・・

▶さらに担当が2人ずついたら？その大変さは人数に比例して大変になるでしょう

## 開発でこれらの悩みを解決するためのツール【Git】

これらを開発に置き換えたときに、

:::note warn
💡 **誰がいつどのように修正・更新したのかが見える化されている**
:::

ことがスムーズな作業に不可欠となります！

そういった理由から管理ツールとして使用されているのが「**Git**」です。

## まとめると・・・
:::note info
 **Git**とは
- 「**分散型バージョン管理ツール**」
- Gitでファイルを管理していくことで、更新履歴が分かるので、バックアップを取る必要はなく、間違って他のメンバーが修正した最新データを上書きして消してしまうことも防げる
:::

## Gitの使い方イメージ

### リポジトリ コミット プル プッシュってそれぞれ何？

〈AさんとBさんでGitを使って共同作業をする場合〉

①Aさんは自分の :computer: （VScodeなど）でコードを作成

② :computer: 内のデータの保存先（**ローカルリポジトリ**という）に変更内容を登録

③ネットワークにあるデータの保存先（**リモートリポジトリ**という）にアップロード

④BさんはAさんが変更したファイルをネットワークからダウンロードし作業を進める

:::note info
**POINT**
②の変更内容の登録を「**コミット**」、③のリモートリポジトリにアップロードすることを「**プッシュ**」といい、④のローカルリポジトリにダウンロードすることを「**プル**」という

:::

#### 用語まとめ
| 用語名 | 概要 |
| --- | --- |
| **リポジトリ** | ファイルや変更履歴を保存しておくデータベース。パソコン内（ローカルという）にある「ローカルリポジトリ」とネットワーク上の「リモートリポジトリ」がある。他ユーザーとファイルや変更履歴を共有する際はリモートリポジトリを使用する。 |
| **コミット** | ファイルや変更履歴をリポジトリへ登録すること |
| **プッシュ** | コミットを、ローカルリポジトリからリモートリポジトリへ反映させること。プッシュを行うことで、ローカルリポジトリ上のファイルや変更履歴が、リモートリポジトリへアップロードされる。 |
| **プル** | リモートリポジトリのコミットを、ローカルリポジトリへ反映させること。プルを行うことで、リモートリポジトリ上のファイルや変更履歴が、ローカルリポジトリへダウンロードされる。 |
| **クローン** | リモートリポジトリのコミットを、ローカルリポジトリへコピーすること。プルとの違いは、プルでは差分のみコピーするのに対し、クローンでは丸ごとコピーする点にある。そのため何も登録されていないローカルリポジトリへコピーしたいときは、クローンを使う。 |

#### 参考URL

https://www.kagoya.jp/howto/it-glossary/develop/git/


### ブランチ・マージ
:::note info
**ブランチ（branch）：枝**


履歴の流れを分岐して記録していくためのもの

並行して行われる**複数の機能追加**や**バージョン管理**を支援するために備わっている機能
:::



:::note info
**マージ（merge）：併合する**
分岐したブランチを他のブランチと合流すること
:::

:bulb: **分岐したブランチは他のブランチの影響を受けない**ため、同じリポジトリ中で複数の変更を同時に進めていくことができます。


#### 参考URL

https://backlog.com/ja/git-tutorial/stepup/01/

## GitHubとは

Gitの仕組みを利用したウェブ上のバージョン管理サービスを指します。

**Git**：システム

**GitHub**：
Gitというシステムを利用したサービス
オンラインで使用するため、「**リモートリポジトリ**」としての役割を持つ

### 知っておきたい用語
| 用語 | 外用 |
| --- | --- |
| **フォーク** | ほかのプログラマーのリポジトリをコピーして編集できる機能のこと。自分に編集やアクセス権がないリポジトリを、自分のローカルに取り入れ、ファイルを編集したとしても、元のリポジトリに影響を与えることはない |
| **プルリクエスト** | ローカルリポジトリでの変更をほかのプログラマーに通知する機能。機能追加や改修など、ソースの内容をレビューやマージを行う担当者に通知する際に利用する。


これを使用することで、ソースプログラムの変更箇所が分かりやすく表示されるため、ソースレビューの作業の効率を上げることができます！

参考：

https://www.kagoya.jp/howto/it-glossary/develop/github/

## 【初心者必見！】GitとGitHubの登録

GitHubはGitを登録しないと使えません！
そのため、どちらも登録が必要です。

ただし、Gitはログイン時にGitHubのアカウントで入ることができるため、

①GitHubの登録

②Gitの登録

③Gitの初期設定

の順で行います。

### ①GitHubの登録

#### 1. [GitHub](https://github.com/)にサインアップする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/9f379d53-8485-4cac-89b3-87f39f437b7d.png)


#### 2. メールや氏名を登録する
※Usernameは他の人が登録していないもので登録する必要がある！(候補が下に出てくるので参考にする) 
![image (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/7fec6e0a-a6c9-45a2-8827-462feae5332d.png)


#### 3. ログイン認証されるので、画面に従う
#### 4. ダッシュボード画面になったら登録完了

![image (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/dbb5e942-d0e3-47a9-a460-a03158fad756.png)


### ②Gitの登録

下記サイトが分かりやすい↓（Windows）

https://qiita.com/takeru-hirai/items/4fbe6593d42f9a844b1c

macOSはこっちを参照してやりました。

https://qiita.com/haruharuQii/items/c0249c5c8613e2f31f96

### ③Gitの初期設定

以下をターミナルやWarpを開いて設定する

- メールアドレス
- 名前

```
$ git config --global user.name "あなたの名前"
$ git config --global user.email “あなたのメールアドレス"
```

#### 参考URL

https://qiita.com/reisuta/items/5f239c5a09a7b29bf05a


## 実際にやってみる

### STEP1　GitHubでリポジトリを作成する

①「NEW」をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/1ea55947-04d8-408d-b80f-5bee25da3826.png)


②「name」「Private」「Create」で作成

![image (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/09ba019b-6860-4f88-b80e-3c1de06f2ecf.png)


③作成したリポジトリのトップ画面が表示されたらOK！（真ん中のコマンドはこの後使用）

![image (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/15cda128-c91f-4b05-891c-15e702dcde23.png)

### STEP2　VSCodeでターミナルを開く

①VSCodeを開く
![image (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/0a2e70bf-5705-4b28-b0d7-ffd6432f7736.png)


②表示⇒ターミナルで開く又は下にカーソルを当てて上下の↔が出た箇所で上に上げる

### STEP3　新しいディレクトリ（フォルダ）を作成
※階層が希望するフォルダになっていない場合は「cd ..」で希望の階層まで戻る！

①ディレクトリを作成
```
$ mkdir practice1
```

②作成したディレクトリ内にhtmlファイルを作成
```
$ touch index.html
```

### STEP4　プッシュする
①新しいリポジトリの初期セットアップで以下のコマンド実行
```
$ git init
```
②htmlファイルを共有する準備をする
```
$ git add index.html
```

③選択したファイルをローカルリポジトリに記録する（コミット）
```
$ git commit -m "first commit” ←大体最初のコミット時はfirst commitなので変更不要
```
![image (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/1385fe6d-0e0e-4d4f-a91e-e0cb0579d0da.png)


④現在のブランチの名前を「main」に変更する（初期はmasterだが、主流がmainのため）
```
$ git branch -M main
```

⑤ローカルリポジトリとリモートリポジトリをつなげる
```
$ git remote add origin https://github.com/GitHubのユーザー名/Practice1.git
```

⑥リモートリポジトリにプッシュする
```
$ git push -u origin main
```
![image (8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/59a747ed-cecd-41e0-9640-81d17c9a8421.png)

⑦プッシュが完了し、GitHubのページをリロードすると、画面が下記になる

　index.htmlが入ってきているのが分かる↓
![image (9).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/4e6014ca-9253-45c5-ac5b-e365a11a8952.png)


## ブランチしてレビュー依頼を送ろう

### ブランチ→プルリクエストの流れ

①ターミナルで「git branch (新しく作成するブランチ名)」を入れてenter
```
$ git branch develop
```

②「git branch」で①が作成できているか確認しましょう
![image (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/56bcfd78-883c-4cde-990c-db3a533035f2.png)
※作成できていれば、main下記に項目が追加されます

③「git checkout (ブランチ名)」で作成したブランチに移動します
![image (11).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/dae0f447-6091-4e6d-97cb-053dbd4e9692.png)


④「git branch」で再度確認すると、今どのブランチにいるかが分かります（緑色になっている） 
![image (12).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/22e7d3c7-b842-4f7d-93ee-c01c8464d163.png)


⑤ブランチに変更データを送ります。まず変更をステージングエリアに追加しましょう
```
$ git add index.html
```

※ステージングされている項目はVSコード上で以下のように表示されます
![image (14).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/e5d80a4c-7457-4587-a7d9-f75d0ab9f211.png)


⑥「git commit -m “（コメント）”」でコミットする
![image (15).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/335188ef-19dc-4229-8d70-cfab33f6dde5.png)

⑦「git push origin develop」でブランチにプッシュする

⑧git hubで確認すると以下のようにメッセージが出てるくるので、緑のボタンを押すとプルリクエストが送れます
![image (17).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/61a7d26e-b00a-4814-98e0-ccbefcc6b0c0.png)


⑨コミットメッセージに追加で詳細を記載したい場合は、下記のdescriptionに追記し、「create pull request」をクリックする
![image (18).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/7f9526f8-f33d-4c21-a3cf-3ad98e15050a.png)

### レビュー依頼を送る（reviewerの登録の流れ）

①Settingを開く

![image (30).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/24ed09ff-3002-4d15-9606-0ba5962f76b2.png)

②Collaboratorsを開く
![image (41).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/268a0f38-70fe-4e79-91ef-36922f8071be.png)


③add peopleを選択する
![image (40).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/1d592e43-5c54-4edb-ba13-bae0498f1f63.png)


④メンバーを検索してリポジトリ―に追加する（add repositoryをクリック）
![image (35).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/ff668e22-65da-4a53-940b-ba29a9c0c914.png)

**※招待依頼を送った人が許可すると、以降の手順でリストに出てくるようになります**

⑤pull requestを選択する
![image (32).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/6eb22fa6-61fa-4272-b39e-acab0e2572ef.png)

⑥コミットメッセージを選択する（文字をクリックする）

⑦Reviewersの歯車マークを選択する
![image (34).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/289cd028-a9ce-4ae4-a626-dc058706134e.png)

⑧④で追加したメンバーが出てくるので、選択しチェックマークがついたら他の場所を押す

⑨Reviewersにアイコンが入ったら追加できている状態

:::note info
**POINT**
- pushするとreviewerに通知が行くようになっている
- レビュー後、修正して再度プッシュした際は通知が行かないので、reviewerの横に出てくる🔁マークをクリックすると、再度通知がいく
:::


</aside>

## マージしてmainに合わせよう

①レビュー後の修正が終わったら、再度プッシュし、プルリクエストの画面にある「merge pull request」をクリックする
![image (36).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4065192/1437c0d3-4256-4a8e-b224-a52eb47cc82e.png)
※左上の状態は「OPEN」になっている

②コメントが入れられるので、必要であれば記載し、「confirm merge」をクリックする

③画面に「Marged」が表示されたらmergeできた状態

### 長くなりましたが
最初何のために使うのかも、どんな違いがあるのかも全く理解できず、自分なりにまとめてみました。
長いですが、細かく解説しているので、よかったら参考にしてください！