ド素人がGit、Githubなるものをインストールして使ってみる。

# Gitとはなんぞや？

:::note warn
当方は基本的に素人です。
なにか誤解を招く表現があればコメントや編集リクエストをいただければありがたく思います。
:::

Gitはプログラムのコードを「いつ誰がどのような変更を行ったのか」を管理しておくバージョン管理ツールらしいです。

ソースコードなどをアップロードすることができます。

リポジトリはgitでファイルを管理する場所のようです。

サーバーのことをリモート、個人の作業端末をローカルといい、gitとgithubは別物。githubはリモートサーバの中身をブラウザで見るためのツールらしいです。

youtubeを見ながらgitを使っていきたいと思います。

https://www.youtube.com/watch?v=LDOR5HfI_sQ

この動画ではgitのインストールなどは解説されておらず、最初のgit clone、git addコマンドなどを実行するのに数時間かかりました。あくまでgitの使い方講座でした。これは僕が悪い。

git pushも[他のサイト](https://qiita.com/A__Matsuda/items/f71a935612a55d6e674e)を参考にしてやりました。

https://qiita.com/A__Matsuda/items/f71a935612a55d6e674e

gitの理解には以下のサイトが役立ちました。

https://qiita.com/noshishi/items/2821c01d590bf9c96038

次の項目でコマンドが使えず四苦八苦しておりますがコマンドを使わず操作することも可能です。
SourceTree、TortoiseGitなるものがあるようです。

https://www.sourcetreeapp.com/


https://www.sejuku.net/blog/72311

# git cloneができない！

とりあえずgithubに登録しました。

まずはリポジトリを作成して、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582228/3a713a7a-b2c3-e861-bafb-7b8141dc43bd.png)
わけもわからずSSHを選択し、その右にあるものをコピーしコマンドプロンプトで`git clone ....gitを実行しますができません。

## Gitインストール
まずはGitなるものインストールしなければgitコマンドが使えないということに気づきました。

ということで以下のサイトを参照して[**ここから**](https://git-scm.com/downloads)Gitをインストールしたところ、コマンドプロンプトでgitコマンドが反応しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582228/ff924111-ccc0-620c-b9d6-04769a94b436.png)

インストール時にデフォルトのエディターにはVSCodeを選択しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582228/0a2358f3-d36d-d8c1-3b73-d57235807416.png)
WARNING!が出ています。怖い。

Command Promptを選択しました。
この2項目以外はデフォルトのままだったはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582228/e5bbcc01-b841-9f03-5f18-a4240497ea40.png)

以下のサイトを見ながらインストールしました。

https://www.sejuku.net/blog/77097

よくわかりませんがユーザーネームとメールアドレスを設定しておきます。このメアド、ユーザネームはクローンすれば誰でも閲覧できるので注意が必要かと思います。

```
git config --global user.name "UserName"
git config --global user.email "user.email@email.com"
```

`git config --list`で確認できます。

また、`git -v`でバージョンが確認できます。
インストールできていればバージョンが表示されるはずです。

最初に戻ってgit cloneが反応はするのですが、
```
Please make sure you have the correct access rights
```
privateでリポジトリを作成したからか、実行できませんでした。

トークンを取得するというサイトを見ていましたがなかなかできなかったのでパスワードを入力する方針に切り替えました。
暗号鍵なるものもあるのかよくわかりませんでした。

以下のコードを入力するとパスワードの入力を求められ、ログインするとクローンすることができました。
`git clone https://[リポジトリの所有アカウント名]@github.com/[リポジトリの所有アカウント]/[リポジトリ名].git`

[このサイト](https://qiita.com/halpi/items/9d0bf6b546edea2563c0)を参照しました。

https://qiita.com/halpi/items/9d0bf6b546edea2563c0

SSHではなくhttpsを選択すると、リポジトリを開いた画面からコピペでいけるようです。

```:git clone やり方
git clone https://github.com/アカウント名/リポジトリ名.git
```

リポジトリのurlをコピペするだけでもいけるようです。

# Gitの基本的な使い方

まず、
1. VSCodeなどでフォルダを開いておく（ターミナルでリポジトリをクローンしたい場所に移動しておく）
1. リポジトリの`git clone`
1. 選択したエディタ、ターミナルで**cloneしたフォルダに移動**（VSCodeならCtrl+K→Ctrl+Oでフォルダを開く）

 C:\Desktop\git\リポジトリ名> 
 のようにターミナルでgitコマンドを使いたいフォルダに移動しておけということです。
 VSCode（Windows）のデフォルトのターミナルはpowershellになっていたかと思います。
 VSCodeならフォルダを開くことで移動できます。

これで`git status`で現在の状態を確認できるようになりました。

:::note warn
少し下に書かれているgit initを使って作成するほうがよいかもしれません。
:::

1. はなくてもターミナルが開いているフォルダの位置にクローンされます。

ターミナルでのディレクトリを移動したいときのコマンドなどは調べてください。コマンドプロンプトならcd [フォルダのアドレス]などで一発で移動できます。
`cd 子フォルダ名` 指定した子フォルダに移動
`cd..` 親フォルダに移動

`git add [ファイル名]`で開いているフォルダの中のファイルをステージング（ファイルがgitの管理下にある状態）することができます。

~~エラーは以下のサイトを参照して対処しました。~~
git initが必要と勘違いしておりましたが、cloneした場合はなくてもできるようです。initをつかってやることもできるみたいです。

init使ってやるなら[こちら](https://ryonkmr.com/156507800)も参照

最初はcloneでよさそうですが、pushするときにmasterブランチを作成できなかったりするのでinitで作成したほうがよいかもしれません。

:::note warn
当方、素人なのでgit使ったことある人が見ていればアドバイスがほしいです。
:::

git initまで実行したらそのまま読み進めてもらっても大丈夫です。

:::note
1. github上でリポジトリの作成
1. 作業ディレクトリの作成（しなくてもよい）
1. **作業ディレクトリにターミナル上で移動**
1. `git init` .gitが作成される（隠しフォルダ）
1. `git remote add origin リポジトリのurl`（https://github.com/アカウント名/リポジトリ名）
1. `git add [ファイル名]` で指定ファイルをステージング、または `git add .`で作業ディレクトリ内の全てのファイルをgitの管理下におく
1. `git commit -m "編集履歴などを書く"` 編集履歴などをセーブ
1. `git push -u origin master` ローカルからリモートへアップロード
:::

コマンドの説明などはこれから書いていきます。
また、作業ディレクトリ内にファイルがないとおそらくpushできないと思います。
4.を7.の前に持ってきても可能と思われます。

参照：

https://ryonkmr.com/156507800


以下のサイトは編集中に貼ったurlなのであまり気にしなくてよいです。

https://lifetime-engineer.com/git-add-error/

https://qiita.com/TkTkTkTkTako/items/2400864e5f12ba70dc6d

`git add file1`でfile1というファイルをステージングして`git status`でみるとファイル名が緑色になりました。赤色のファイルはステージングされていないようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582228/0855706b-615a-14a2-c547-04d420594b06.png)

`git add .`ですべてのファイルをステージング状態にすることが可能。

次に保存が必要になるようです。
保存には`git commit`コマンドを使います。
git commitというのはステージングエリアからローカルリポジトリへファイルを上げるようです。

```
git commit -m "コミットメッセージ"
/* コミットメッセージにどのような編集内容なのかを書いておくと良いらしいです。 */
```

gitの基本的なコマンドはこちらを参考にしました。

https://qiita.com/A__Matsuda/items/f71a935612a55d6e674e

次にfile1を編集し、`git status`で確認すると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582228/ebeffc2a-e270-7330-9585-1a71b77dd82c.png)
赤色で表示されました。

編集を保存するために`git add .`でコミット待ちの状態になります。ステージングされましたが、まだ保存されていないので`git commit -m "二回目のコミットです"`を実行することで保存します。

ここで`git log`コマンドを打つことで誰が、何時何分にコミットしたかという記録と-mのあとに書いたメッセージが表示されます。

ここまでのコミットはリモート側にはアップロードされておらずあくまでローカルに保存されているようです。つまりgithubで見ることもできません。

## はじめてのgit push

`git push`コマンドでリモートにアップロードすることが可能です。

2回目以降はgit pushのみでよいらしいですが、はじめはgithubからリポジトリを開いて`https://github.com/アカウント名/リポジトリ名.git`をコピーしてきてください。Alt+Dでurlが選択できるのでurlをコピーしても構いません。

そしてこのコマンドを実行。
```
git remote add origin https://github.com/.../....git
```
次に
```
git push -u origin master
```
を実行する。 ~~branchは-uがなくてもよいかも。~~
二回目以降は`git push`のみでいけるようです。

ブランチが複数ある場合は`git push origin develop`などのように指定して行うとよいかもしれません。

https://qiita.com/shumpeism/items/1b8027c8905ca826416d

これでgithubで見ることができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582228/80a76cd4-4ffc-a21f-ce05-61a68f4a8a81.png)

参考として
>git pushなのですが、最初にGitHubに上げる際にはこのままではうまくいきません。
リモートのリポジトリはどこやねんと言われてしまいました。
一番最初にリモートにアップロードする場合はきちんと宛先を指定しましょうね、という話です。
ではGithub上で作成したリモートリポジトリのURLをコピーしてきて先ほどのコマンドの続きに貼り付けます。
この際、リモートリポジトリの名前をつける必要があるのですが、この名前は一般的に"origin"という名前を使用します。コマンドは以下のようになります。
`$ git remote add origin https://github.com/Toshimatu/pictgram.git`
これでセッティングは終了。これでpushする準備ができたので改めてpushをしましょう。
なお、最初のpushは以下のように指定します。2回目以降は$ git pushのみでpush可能になります。
`$ git push -u origin master`
これにてGitHubにファイルの登録ができました！
実際にGitHubに登録されているか確認して、作成したリポジトリにコードが反映されていれば終了です。
引用：https://qiita.com/A__Matsuda/items/f71a935612a55d6e674e

githubでリポジトリを開き、画像の部分をクリックするとコミットの履歴が閲覧できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582228/0735414f-19af-6aed-1e0a-8fbc35f80c87.png)
さらにcommitメッセージをクリックするとソースコードの編集履歴を見ることができます。

コミットはゲームのセーブポイントのようなもので、きりの良いところでセーブすることです。

一人で使う場合、pullコマンドの出番はないかもしれませんが
`git pull origin` 最新のリポジトリ情報をダウンロード、他の作業者のコミットを更新したりできる。

# ブランチ
元祖の変更履歴をmasterと呼ぶ。
masterから枝分かれすることをブランチと呼ぶ。

master側の歴史から枝分かれさせてブランチで開発する。ブランチはmasterにマージするまではmaster側に影響を与えない。ブランチがバグっていてもmasterには影響しない。

`git checkout` ブランチを切り替えるコマンド

`git checkout -b develop master` masterからdevelopという名前のブランチを切る

`git branch` ブランチの一覧を見る、緑色が現在のブランチ

`git checkout master`でmasterに切り替えられる
`git checkout develop`でdevelopに切り替える

`git push origin develop` developにpush

`git pull origin` 他者がdevelopをpushしたときに自分のローカルに持ってくる。

developの変更内容をチェックし、masterにマージするにはマージ先のブランチに移動`git checkout master`
masterに対してdevelopブランチをマージする場合は
`git merge develop`と入力する。

マージは合併、融合などの意味がある。

その後、masterにマージした内容をリモートにpullします。
`git push origin master`

pullリクエストなどもあるがこの記事では割愛する。
ちなみに割愛とは惜しいと思うものを省略したりするという意味のようです。惜しくないものは割愛ではない？

fetchというのはリモートの状態をローカルにダウンロードしてくること。originはリモートサーバーのことのようです。

`git fetch origin`
`git merge origin/develop`
この2つのコマンドを1つにまとめたのが
`git pull develop`

# git resetとstash

`git reset --hard HEAD`
このコマンドで今編集中の内容をすべてふきとばして、最終コミットの状態にリセットする。

`git stash`
ブランチを間違えたりしたときに、ブランチを切り替えるとコミットしてない変更があるのでエラーが出ます。
stashコマンドで一旦変更を取り消せます。
本来のブランチへ移動してから
`git stash pop`でstashでコミットしてない内容をもってくる事ができる。

# gitコマンドまとめ

```:初期設定
git config --global user.name "XXXX"
git config --global user.email "XXXX@hogehoge.com"
```

`git clone` 新規にリポジトリをローカルにコピー
`git init` リポジトリを新規作成、.gitというディレクトリが作成される。クローンした場合は必要ない。
`git status` ファイルの編集を行うと編集中のファイルが表示される
`git add [ファイル名]` gitにステージング、statusが緑色になる。`git add .` すべてのファイルをステージング。
`git commit -m "コミットメッセージ"` gitに対してのセーブ
`git push` ローカルの作業内容をリモートにアップロード
`git log` commit履歴を表示
`git pull origin` 最新のリポジトリ情報をダウンロード、他の作業者のコミットを更新したりできる。
`git checkout -b develop master` masterからdevelopという名前のブランチを切る

`git branch` ブランチの一覧を見る

merge、reset、stashは少し上にスクロールしてください。

<> Codeからzipファイルをダウンロードすることが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582228/fe235c6b-e053-ec73-bf70-ae6899f3c705.png)


https://qiita.com/kohga/items/dccf135b0af395f69144

https://www.sejuku.net/blog/5816

# 参照サイト

特に参考になったサイト。
youtubeを見ながらわからないこと、うまくできないことは他のサイトを参照しました。

## git使い方

https://www.sejuku.net/blog/77097

https://www.youtube.com/watch?v=LDOR5HfI_sQ

https://qiita.com/A__Matsuda/items/f71a935612a55d6e674e

https://ryonkmr.com/156507800

## その他

https://git-scm.com/downloads


https://qiita.com/noshishi/items/2821c01d590bf9c96038