ローカルからGitHubへのアップロード方法とコマンド

みなさんこんにちは、KoenigWolfです。VS Codeで書いたコードをGitHubにアップロードする際、コマンドを使うことが多いと思います。しかし、初めての方にはこれらのコマンドがなかなか頭に入ってこないこともありますよね。私も最初はそうでした。そこで今回は、単語の覚え方やコマンドの意味について詳しく解説します。この記事を読んで、ぜひ理解を深めてください。GitHubにプロジェクトをアップロードする手順や注意点を、小学生でも理解できるように解説します。また、よくあるエラーとその対処方法についても詳しく説明します。

## 目次
1. リポジトリとは
2. ステージングとは
3. コミットとは
4. ブランチとは
5. マージとは
6. プッシュとは
7. プルとは
8. 権限は初期でどうなってるの？
9. 一連の動作をわかりやすく説明
10. よくあるエラーと対応策

## 1. リポジトリとは

**リポジトリ (Repository)** は、プロジェクトのファイルやその変更履歴を保存する場所のことです。学校の教室にあるロッカーのように、プロジェクトのすべてのファイルを一つの場所にまとめて保管します。リポジトリを使うことで、どのファイルがいつどのように変更されたのかを記録しておくことができます。

## 2. ステージングとは

**ステージング (Staging)** は、変更したファイルを「これから保存するよ」と準備しておくことです。ステージングエリアは、ファイルがリポジトリに正式に保存される前に一時的に置かれる場所です。たとえば、絵を描いているときに、まだ完成していないけど途中の状態を見せるために机の上に広げておくイメージです。

## 3. コミットとは

**コミット (Commit)** は、ステージングエリアにある変更をリポジトリに正式に保存することです。これは、絵を完成させてアルバムに貼るようなものです。コミットには、なぜその変更を行ったのかというメモ（コミットメッセージ）を付けることができ、後で見返したときにわかりやすくなります。

## 4. ブランチとは

**ブランチ (Branch)** は、作業を並行して進めるための仕組みです。木の枝（ブランチ）のように、元の幹から分かれて別の道を進むことができます。たとえば、ひとつの絵を描いているときに、別のアイデアを試すために新しい絵を並行して描くような感じです。元の絵を変更せずに、新しいアイデアを試すことができます。

## 5. マージとは

**マージ (Merge)** は、別々のブランチで行った変更をひとつにまとめることです。たとえば、友達と別々に絵を描いて、それを最終的にひとつの大きな絵に合わせるようなものです。マージの際には、どちらの絵も失わないように注意が必要です。

## 6. プッシュとは

**プッシュ (Push)** は、ローカルリポジトリ（自分のパソコン）での変更をリモートリポジトリ（インターネット上のリポジトリ）に送ることです。これは、学校のプロジェクトで、自分のノートを先生に提出するようなものです。プッシュすることで、他の人と変更を共有できます。

## 7. プルとは

**プル (Pull)** は、リモートリポジトリにある変更を自分のローカルリポジトリに取り込むことです。これは、クラスの友達が提出したノートを先生からもらって、自分のノートに追加するようなものです。プルすることで、最新の情報を常に手元に置くことができます。

## 8. 権限は初期でどうなってるの？

GitHubリポジトリの初期設定では、リポジトリの作成者が管理者として全ての権限を持っています。他の人にアクセス権を与える場合は、リポジトリの設定で招待を送る必要があります。招待を受けた人は、設定された権限に応じてリポジトリの操作が可能になります。

## 9. 一連の動作をわかりやすく説明

では意味が理解できたところで、ここからは具体的にGitHubにプロジェクトをアップロードする手順を説明します。

### リポジトリの作成

新しいプロジェクトを始めるときは、まずリポジトリを作成します。

```sh
git init
```

これは、新しいリポジトリ（箱）を用意するコマンドです。

### 変更のステージング

ファイルを変更したら、それをステージングエリアに追加します。

```sh
git add .
```

このコマンドは、すべての変更をステージングエリアに追加します。机の上に変更を広げるイメージです。

### 変更のコミット

変更をステージングエリアからリポジトリに保存します。

```sh
git commit -m "Initial commit"
```

これは、変更をアルバムに貼るように保存するコマンドです。メッセージには変更内容を簡単に記述します。

### リモートリポジトリの追加

次に、リモートリポジトリを追加します。

```sh
git remote add origin https://github.com/username/repository.git
```

これは、ローカルリポジトリをリモートリポジトリに接続するためのコマンドです。リモートリポジトリのURLを指定します。

### 変更のプッシュ

ローカルリポジトリの変更をリモートリポジトリに送信します。

```sh
git push -u origin main
```

これは、変更を先生に提出するイメージです。

### リモートリポジトリの変更を取り込む

他の人が行った変更を自分のローカルリポジトリに取り込みます。

```sh
git pull origin main
```

これは、友達のノートをもらって自分のノートに追加するイメージです。

### マージの具体例

たとえば、あなたと友達がそれぞれ別々の絵を描いて、それを最終的にひとつの大きな絵に合わせるようなものです。マージすることで、どちらの絵も失わないように注意します。

## 10. よくあるエラーと対応策

### "fatal: not a git repository (or any of the parent directories): .git"
**原因**：現在のディレクトリがGitリポジトリではありません。
**解決策**：リポジトリのディレクトリに移動するか、新しいリポジトリを作成します。

```sh
cd /path/to/repository
git init
```

### "remote: Repository not found."
**原因**：リモートリポジトリのURLが間違っています。
**解決策**：正しいリモートリポジトリのURLを確認して追加します。

```sh
git remote set-url origin https://github.com/username/repository.git
```

### "error: src refspec main does not match any"
**原因**：`main`ブランチが存在しません。
**解決策**：ブランチ名を確認し、適切なブランチを指定します。または、ブランチ名を変更します。

```sh
git branch -m master main
git push -u origin main
```

### "Updates were rejected because the remote contains work that you do not have locally."
**原因**：リモートリポジトリにローカルにないコミットがあります。
**解決策**：リモートリポジトリから最新の変更を取得し、マージします。

```sh
git pull origin main --allow-unrelated-histories
```

### "Merge conflict in <file>"
**原因**：マージ中に同じファイルの異なる部分が競合しています。
**解決策**：競合を手動で解決し、ステージングしてコミットします。

```sh
git status
# 競合ファイルを編集して解決
git add <file>
git commit -m "Resolve merge conflict in <file>"
```

### "fatal: unable to access 'https://github.com/username/repository.git/': The requested URL returned error: 403"
**原因**：アクセス権限がありません。
**解決策**：リポジトリへのアクセス権限を確認し、必要に応じて権限を取得します。

### "error: failed to push some refs to 'https://github.com/username/repository.git'"
**原因**：リモートリポジトリとローカルリポジトリの間に競合があるか、プッシュの際に何らかのエラーが発生しました。
**解決策**：詳細なエラーメッセージを確認し、適切な対処を行います。例えば、`git pull`を行ってから再度プッシュします。

```sh
git pull origin main --allow-unrelated-histories
git push -u origin main
```

Gitの操作にはいくつかの重要なステップがあり、それぞれに特定の目的があります。エラーが発生した場合、その原因を特定し、適切な対処を行うことが重要です。上記のコマンドと注意点を参考にして、スムーズにGitHubリポジトリを管理してください。

この記事が参考になったら、ぜひフォローして、いいねをお願いします！