【GitHub】ローカルファイルを新規リモートリポジトリにアップロードする方法

GitHubで管理する予定なくプログラムを書いていたが、気が変わってGitHubにアップロードし、バージョン管理したいことがあると思います。

そんなときのために、ローカルに置いてあるプログラム（ネット上に保存していないプログラム）をGitHubで管理する方法を紹介します。

## 前提

 - ローカルにプログラム（ソースコード）があり、リモートにはリポジトリがない

 - PCにGitがインストール済み

 - GitHubのSSH接続設定済み（まだの人は下記参照）

https://qiita.com/aki4000/items/4c81bc2747bbd5e96d85

Windows 11での説明ですが、Macでも似たような手順だと思います。

## 方法

### 作業フォルダに移動

エクスプローラーでプログラムが置いてあるフォルダまで移動しましょう。

必要であれば、GitHubアップロード用のフォルダを別で作り、用途ごとにフォルダを分けプログラムを置いておくと管理しやすいです。

今回はCドライブ直下にGitHubフォルダを作り、その中にtestフォルダを作って作業フォルダとします。
testフォルダ内にはソースコードのダミーとしてsample1.txt、sample2.txtを置いています。

```
C:/ 
  ├ GitHub/ 
    ├ test/ 
      ├ sample1.txt
      └ sample2.txt
```

### ローカルリポジトリの作成

ターミナルでtestフォルダに移動（例えば```cd C:\GitHub\test```）し、

```powershell
git init
```

を実行してください。testフォルダ内に.gitフォルダが作られます。

```
C:/ 
  ├ GitHub/ 
    ├ test/ 
      ├ sample1.txt
      ├ sample2.txt
      └ .git
```

※ .gitフォルダは、隠しフォルダを表示する設定にしないと見えません。

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

次はGitHubのページで作業します。

https://github.com/

新規リポジトリを作成します。

![new-repository.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780256/ea9d63dd-02f8-197f-db10-795f1c7477d7.png)

 - リポジトリ名
 - 説明
 - 公開範囲（Public または Private）

などを入力して、 **Create Repository** をクリックします。
今回は **Add a README file** にチェックを入れて、README ファイルを作成しました。

リポジトリができたら、SSHのURLをコピーしておきます。（URL右の□マークを押すとコピーできます）

![ssh-url.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780256/6a16787b-584d-b753-2a63-c807e1b519e3.png)

### ローカルリポジトリとリモートリポジトリを紐づける

再びPCのターミナルにもどり、testフォルダに移動した状態で、

```powershell
git remote add origin '<あなたのリモートリポジトリURL>'
```

を実行します。 **'<あなたのリモートリポジトリURL>'** を、先ほど取得したSSHのURLで置き換えてください。
実行しても特にメッセージは表示されません。

<details>
<summary>紐づけできたか確認</summary>

```powershell
git remote -v
```

を実行して

```
origin  git@github.com:(あなたのGitHubアカウント名)/test.git (fetch)
origin  git@github.com:(あなたのGitHubアカウント名)/test.git (push)
```

のようなものが表示されていれば成功です。
</details>

### リモートリポジトリにローカルファイルをアップロードする

<details>
<summary>リモートリポジトリ作成時に「README.md」や「.gitignore」を作成した方のみ</summary>

```
git pull origin main
```  

でREADMEファイル等を一旦ローカルにコピーします。

</details>

最後に、ローカルのファイルをGitHubにアップロードするため、

```powershell
git add -A
git commit -m "コメント"
git push origin main
```

を実行してください。

```git add``` の後ろには、アップロードするファイルを記載します。フォルダ内のすべてのファイルなら```-A```とします。ワイルドカード（```*.txt```など）も使えます。

add、commit、pushの詳細な意味は下記記事が参考になります。


https://qiita.com/atsushi101011/items/96054ebbd876e378cac4

以上を実行後、[github.com](github.com)にアクセスすれば、ローカルのファイルがアップロードできているのが確認できます。

![git-remote.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780256/f5f40b3c-a2ce-3195-dec3-f8e4cbb74e59.png)

## こんなエラーが出たら

### remote: Repository not found. 

登録するリモートリポジトリのURLをsshのものにしてください。

登録済みのURLを消すためには

```powershell
git remote rm origin
```

を実行します。

### error: src refspec main does not match any

masterブランチとmainブランチが混在している可能性があります。

mainブランチをデフォルトに変更しましょう。

```powershell
git branch
```

でブランチを確認します。```main```だったらOK
もし```master```と表示されたら

```powershell
git config --global init.defaultBranch main
```
でデフォルトをmainに変更。また、すでにmasterになっているローカルブランチは

```powershell
git branch -m master main
```

で変更できます。

### error: failed to push some refs to …

リモートで.gitignore等を作ったのに、pullせずにローカルからpushしようとしたから。

```powershell
git pull origin main
```

をしてリモートをローカルにまずpullします。このとき、mergeで
```
fatal: refusing to merge unrelated histories
```
が出たら、

```powershell
git merge --allow-unrelated-histories origin/main
```

を実行して強制的にマージする。（pull = fetch + merge）

その後、pushを行う。

```powershell
git push origin main
```