【Git・GitHub】リモートリポジトリの作成・更新したファイルをアップロード

## はじめに
今まで学習してきたことを、自分なりにまとめていきます。

## Gitとは
分散型バージョン管理システムです。
分散型バージョン管理システムとよばれるのは、以下のような特徴があるからです。

- 古いバージョンに簡単に戻せる
- 新旧のファイルを一元管理できる
- 編集した履歴を複数人で共有できる
- 複数人で修正した部分を一つに統合できる

簡単に説明すると、ファイルのバージョン管理を簡単にするツールのことです。

Gitで管理しているファイルなどは、コンピューター上でファイルの編集履歴を管理することができるので、編集前のファイルを残したまま新しく編集したファイルを保存することができます。
なので、バージョン管理を簡単にすることができるということです。

## GitHubとは
GitHubとは、Gitの仕組みを利用して、世界中の人々が自分の作品(プログラムコードやデザインデータなど)を保存、公開できるようにしたWebサービスの名称のことです。
GitHubはその名の通り、GitのHub(ハブ：拠点・中心・集まり)という意味になります。

## Gitの基本用語

### リポジトリ（repository）
リポジトリとはファイルやディレクトリを保存しておくための貯蔵庫のことです。
<dl>
  <dt>・リモートリポジトリ</dt>
  <dd>特定のサーバー上に設置して、複数人で共有するリポジトリ</dd>
  <dt>・ローカルリポジトリ</dt>
  <dd>ユーザーごとに配置され、手元のPCで編集できるリポジトリ</dd>
</dl>

### ブランチ(branch)
ブランチとは、ファイルの編集履歴を分岐させて記録していく機能のことです。

### コミット(commit)
コミットとは、ファイルやディレクトリの編集作業をローカルリポジトリに記録するために必要な操作のことです。

### ワークツリーとインデックス
ワークツリーとは、ユーザーが編集している作業中のディレクトリのことです。

インデックスとは作業場所であるワークツリーと保存場所であるローカルリポジトリの間にある中間領域のことです。

### プッシュ(push)
プッシュとはローカルリポジトリにあるファイルをリモートリポジトリに送信し、保存する機能のことです。

### クローン(clone)
クローンとはダウンロードのようなものです。

### マージ(merge)
マージとは複数のブランチを一つにまとめて、完成形に近づけることです。
ブランチを統合するようなイメージ。

### プル(pull)
プルとは共有されているリモートリポジトリに保存されているファイルの内で、ローカルリポジトリ(あなたのローカル環境)に無いファイルや他のユーザーが更新したファイルのみをダウンロードする機能のことです。

### フェッチ(fetch)
フェッチとはリモートリポジトリからファイルの最新情報を取得してくる操作のことです。
プルとは違い、ローカルのファイルを更新することはありません。

### プルリクエスト
**git push origin <ブランチ名>** で、プッシュしたブランチの内容をリモートリポジトリのmasterブランチへ反映させるために、プルリクエストというものをGitHub上で作成します。
「ブランチの作業内容をmasterブランチへ反映させたいのですがいいですか？」とお願いをすることです。

## Git開発の流れ

<ol>
<li>GitHubにリポジトリを作成する</li>
<li>自分のパソコンにフォルダを作成する</li>
<li>作成したフォルダをGit管理し、GitHubにアップロードする</li>
<li>masterブランチからブランチを切る(作成する)</li>
<li>切ったブランチ内で作業をする</li>
<li>作業が終わったら作業内容をリモートリポジトリにプッシュする</li>
<li>切ったブランチの内容をmasterブランチへ結合するプルリクエストを作成する</li>
<li>プルリクエストをmasterブランチへマージする</li>
<li>masterブランチの内容をプルする</li>
<li>その後は4から9をループ</li>
</ol>

また、1~3は必須の作業ではありません。
すでにリポジトリを他の人が作成している場合は、そのリポジトリを自分の端末へクローンしてから開発をしていきます。

## リモートリポジトリの作成

### 1.リポジトリの新規作成
アカウントにログイン後 **New** をクリックし、リモートリポジトリを作成してみましょう！
※GitHubで作成するリポジトリはリモートリポジトリと呼ばれています。

![スクリーンショット 2024-04-18 0.43.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459296/4e32706e-d282-4d9e-5503-950226273e8d.png)

### 2.リポジトリの設定

1.リポジトリの名前を入力

2.このリポジトリを公開するか非公開にするかを決めます

3.Create repositoryをクリックすることでリモートリポジトリの作成が完了します

![スクリーンショット 2024-04-18 0.46.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459296/979c114f-44d3-2262-c7d9-8c29bab12dcd.png)


### 3.作成したフォルダをGit管理し、GitHubにアップロードする
ターミナルを開き、プッシュしたいディレクトリ(フォルダ)に移動してください
移動できたら下記のコマンドを順に実行していきましょう！

![スクリーンショット 2024-04-18 0.49.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459296/a0c8a250-f3c6-7541-8b61-e97dbad2aba4.png)


まずはローカルリポジトリを作成します。
```
$ git init
```

下記のように表示されたら成功です！
```
Initialized empty Git repository in ~
```

次にワークツリーからインデックスへのファイルの登録
```
$ git add README.md
```
:::note info
git add -A . 
で、全てのファイルをまとめて追加する方が簡単なのでオススメです！
:::


次に追加・変更したファイルをGitに登録するためのコマンド
```
$ git commit -m "first commit"
```
:::note info
-mはメッセージオプションのことで、“first commit”の中にどのような編集内容なのかを記録することができます。
:::


次にGitリポジトリでのブランチ名の変更を行います
```
git branch -M main
```

次にローカルリポジトリとリモートリポジトリの結びつけを行います。
```
$ git remote add origin https://github.com/ユーザーID/リポジトリ名
```
:::note warn
こちらはpushするたびに行う必要はなく、結びつけるために1度だけ最初に行います。
:::

最後にリモートリポジトリにファイルをアップロードしていきます。
```
 $ git push -u origin main
```

これでローカルリポジトリからのGitHubへのファイルアップロードの一連の流れが完了しました！

## 更新したファイルをアップロード

ローカルリポジトリに新しくブランチを作成し、更新したファイルをアップロードしてみましょう！

### ブランチの作成

```
$ git switch -c 作成したいブランチ名
```

### ワークツリーからインデックスへのファイルの登録
```
git add -A . 
```

### 追加・変更したファイルをGit
```
$ git commit -m “コメント”
```

### 変更内容をリモートリポジトリへ反映
```
git push origin ブランチ名
```

### プルリクエストを作成
まずは、GitHubでリポジトリを開いてください。
そして、メニューバーの **Pull requests** をクリックしてください。

![b821c6b2-8e99-0fe1-c987-bbc4d963520a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459296/b16a4d9d-7c4f-228d-9952-90e4e73ab460.png)

**New pull request** をクリック。

![59bbe34f-bf96-e4b1-05ce-7fe3a2ec00fb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459296/b4dbb857-c066-a36f-7980-e9aa0f164840.png)

下記画像の赤枠内が、プルリクエストしたいブランチになっていることを確認したら、 **Create pull request** をクリック。

![19e792df-7ba2-573e-2469-4c90806cfbb8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459296/d1ffbeb8-0354-405b-a544-084d5369e45b.png)

タイトルとコメントを入力できる画面に遷移するので、他開発者やマネージャーなどもこのタイトルとコメントを見ることになるので、なるべくわかりやすく書きましょう！
入力ができたら、 **Create pull request** をクリックしてプルリクエストの作成は以上となります。

![2dd1fde5-3a95-0c63-dc77-c30a968db885.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459296/a5c9d400-96a4-83dc-fd38-0a6d9460aec0.png)

### プルリクエストをマージ
実務では、プルリクエストの作成したら、マネージャーなどに実装内容を見てもらい、マージしてもらいますが今回は自分でやっていきます。

まずは、メニューバーの **Pull requests** をクリックすると、現在のプルリクエストが一覧で確認することができます。
一覧の中から、今回作成したマージしたいプルリクエストをクリックしてください。

その中の　**Merge pull request** をクリックすると、 **Confirm merge** というボタンが新しく出てくるので、そのボタンをクリックするとリモートブランチのmasterブランチにマージされます。

## さいごに
いかがだったでしょうか。

他にもいろいろな記事を書いているのでぜひ読んでいただけたら嬉しいです。