GitHubでソースファイルを管理する

# 目的
プログラミング作成時に自分が以前に作成したものを参考に作ることが多い。GitHubで管理すれば、ネットさえあればどこからでも確認できることを想定して利用する。

# 準備
- [Gitのインストール](https://gitforwindows.org/)
- GitHubアカウントを作成する

# プロジェクト作成時の手順
- GitHubでリポジトリを作成する

```shell
git init
git add .  …(a)
git commit -m "コメント"  …(b)
git branch -M main …(c)
git remote add origin [URL] …(d)
git push -u origin main…(e)
```

##補足
※(a)git addのオプションはこちら[git add -u と git add -A と git add . の違い](https://note.nkmk.me/git-add-u-a-period/)

(a)で下記が発生する場合は
```shell
warning: LF will be replaced by CRLF in <ファイル名>
```

下記を実行する
```shell
 git config --global core.autocrlf false
```

※(b)commit時に下記発生

```
*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'xxxxxxxxxxxxxxxx@xxxxxxxxxxxxx.(none)')

```

[gitで起きたエラーの解決法](https://qiita.com/w-tdon/items/24348728c9256e5bf945)を参照してメールアドレスとユーザー名を設定し解決


※(c)githubのデフォルトはmainブランチ,gitのデフォルトはmasterブランチの為gitのデフォルトブランチを変更しておく。"git config --global init.defaultBranch main"も試したが失敗  
【参照】[Gitのデフォルト・ブランチ名を変更する方法](https://parashuto.com/rriver/tools/change-git-default-branch-name)

※(d)"fatal:remote origin already exists."となった場合は

```shell
git remote rm origin
```
リモートリポジトリのURLはgithubで確認できる。
※[これでもう怖くない、Git／GitHubにおけるリモートリポジトリの作成、確認、変更、更新時の基本5コマンド (3/3)](https://www.atmarkit.co.jp/ait/articles/1701/24/news141_3.html)の『リモートリポジトリのURLを確認する』を参照

※(e)パスワードが通らないので下記を参考にGitをバージョンアップ
[Git PushしたらLogon failed, use ctrl+c to cancel basic credential prompt.が出た時の対処法](https://qiita.com/shimajiri/items/e7842654db3876f76888)

　再度(e)を実行するとrejectされる。下記を参考に
 (git pushがrejectされた時の対処法)[https://qiita.com/cedric-ryo/items/4a6ed57549a3008fcb6a]

# ソースの更新ごとに実施

```shell 
git add -A …(f)
git commit -m "コメント"
git push  
```  

## 補足
※(f)git addのオプションはこちら[git add -u と git add -A と git add . の違い](https://note.nkmk.me/git-add-u-a-period/)

#リモートリポジトリからローカルリポジトリを作成

```shell
git clone [URL]
```

# リモートリポジトリから最新版を取得

```shell
git pull
```

#コミットはせずに変更を退避したいとき

~~~shell
git stash
~~~

※git pullで"Your local changes to the following files would be overwritten by merge"が発生。ローカルの変更を反映する必要がない場合は上記でOK

# git pushがrejectされたとき

```
git pull origin main
```
[git pushがrejectされたときの対応方法](https://hacknote.jp/archives/15275/)

# 追跡済のファイルを対象からはずす
```
git rm --cached <FILE_NAME>
```
[【gitをソフト開発で使いこなそう!:最終回】.gitignoreの書き方を徹底解説!](https://terapotan.hatenablog.jp/entry/WhatIsGitignore)


# .gitignoreで追跡対象からはずす
[【gitをソフト開発で使いこなそう!:最終回】.gitignoreの書き方を徹底解説!](https://terapotan.hatenablog.jp/entry/WhatIsGitignore)

# git addを取り消す
※一度もcommitしてない場合は別のやり方なので注意
下記でadd対象ファイルを確認する
``` shell
git status
```

下記のように表示される。この場合、対象はjs/AutofreeGiftPost.js
```shell
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   js/AutofreeGiftPost.js
```

## コマンド
下記2通りあり。今回はresetを使って取り消しを行う
``` shell
git restore --staged [ファイル名]
```

``` shell
git reset HEAD [ファイル名]
```

## 取り消し具体例
下記で取り消しできる
```
git reset HEAD js/AutofreeGiftPost.js
```

git statusで確認すると以下の様に
```
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   js/AutofreeGiftPost.js

no changes added to commit (use "git add" and/or "git commit -a")
```

## 参考
[2022-09-02
【Git入門】git addを取り消したい！そんなお悩みの解決法をパターン別にご紹介！](https://tech-blog.rakus.co.jp/entry/20220902/git#%E5%89%8D%E5%9B%9E%E3%81%AE%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88%E5%BE%8C%E3%81%AEgit-add%E3%81%AE%E5%8F%96%E3%82%8A%E6%B6%88%E3%81%97)

# 参考
[【初心者向け】Gitのインストール方法をわかり易く解説（画面付き）](https://eng-entrance.com/git-install)
[【0から始めるGit】Gitをインストールしてみた](https://takumi9942.net/blog/?p=1059)．．．インストールオプションの設定がこちらが詳しいです
[今さら聞けない！GitHubの使い方【超初心者向け】](https://techacademy.jp/magazine/6235)
[初めてGitを使う人向けに情報をまとめてみた(基本編)](https://qiita.com/piro87084806/items/73d5058b93d152a38f56) ※とても、わかりやすく、かかれています。とくに『2-2. Gitの構造』