【第1回】Gitってなに？ 基本的なコマンド 〜commit push pull〜

#Gitってなに?
ソフトのバージョン管理を行うシステム(ツール)
https://backlog.com/ja/git-tutorial/intro/intro1_1.html

#じゃ､GitHubって?
>GitHubは、Gitの仕組みを利用して、世界中の人々が自分の作品(プログラムコードやデザインデータなど)を保存、公開することができるようにしたウェブサービスの名称

[【引用元リンク】](https://www.sejuku.net/blog/7901)

#リポジトリの概念
ファイルやディレクトリの状態を記録する場所
https://backlog.com/ja/git-tutorial/intro/intro1_2.html

| 種類  | 場所 | 用途 |
|:-:|:-:|:-:|
|  ローカルリポジトリ | 自分のPC  | 作業用  |
|  リモートリポジトリ |  サーバー |  保管用 |

【補足】リモートリポジトリは､色んな人のリポジトリがあります｡

####リポジトリって結局なに? (状態を記録する場所ってどういうこと?)
>リポジトリ (repository)とは,ファイルなり、プログラムなり、設定情報なり、何らかの「保管場所」をカッコ付けて言った表現です。

[【引用元リンク】](https://wa3.i-3-i.info/word15664.html)

#Gitコマンド
では早速､Gitを使ってみましょう｡

実務で使用する時は一般的な順番がありますが
今回は基本的なコマンドを覚えることを目的としています｡

順番を考えての､フォーク~プルリクエストは第2回で行います｡
[参照元リンク(順番のイメージ図)](http://kik.xii.jp/archives/179)

##fork
Forkすると自分のGitHubアカウント内に既存のリモートリポジトリをコピーできます。
http://cuaoar.jp/2013/03/github-fork-pull-request.html

####forkの良いところ
>ここでpushしたりbranchを作ったりという作業は、あくまで自分のレポジトリに対してのものなので、何をしても本体のレポジトリは汚さないし、壊さない。(これがForkの良いところ)

[【引用元リンク】](https://qiita.com/YumaInaura/items/acff806290c8953d3185)

[【参考リンク(興味がある人向け)】forkする意味](http://yasulab.tumblr.com/post/11856357434/fork-%E3%81%99%E3%82%8B%E6%84%8F%E5%91%B3-github-%E3%81%AB%E3%81%AF-fork-%E3%81%A8%E3%81%84%E3%81%86%E6%A9%9F%E8%83%BD%E3%81%8C%E3%81%82%E3%82%8Bfork-%E3%81%AF-git)

##clone
cloneすると､自分のPC内にローカルリポジトリとして保存します。
https://backlog.com/ja/git-tutorial/intro/intro3_2.html

```
git clone https://github.com/forkしてできた自分のリポジトリのURL
```

【よくあるミス】
クローンしたはいいけど､チェンジディレクトリしてなくてエラー！ってことがしょっちゅうあります｡クローンしたら､必ずチェンジディレクトリを忘れずに｡

##commit
ファイルやディレクトリの追加・変更を、ローカルリポジトリに記録します｡
https://backlog.com/ja/git-tutorial/intro/intro1_3.html

```
(今回はやらないけど､基本的なコマンド)
git init　　                       //ローカルリポジトリの作成
```
```
(ファイル変更してからコマンドを実行)
git add .　　                       //変更内容をステージングする
```
ちなみに「.」は今いるディレクトリ(Windowsでいうフォルダ)を指定

```
git status　　                      //状態の確認
```
```
git commit -m “コミットを行います”　 //コミット(変更内容をローカルリポジトリに反映)
```
コミットメッセージはわかりやすく書きましょう｡
意識>>センスです｡
[【参考リンク】コミットメッセージの書き方](https://qiita.com/itosho/items/9565c6ad2ffc24c09364)

```
git log　　                         //コミット履歴確認
```

##push
リモートリポジトリにローカルリポジトリの変更履歴をアップロードする｡
https://backlog.com/ja/git-tutorial/intro/intro3_1.html

```
git push origin [branch名]            //指定したブランチの変更内容をリモートリポジトリに反映
```

#fetch､merge　(pull=fetch+merge ざっくり言うと)
##前準備
リモートリポジトリを追加します｡
自分以外の誰かのリモート(のURL)を追加することでfetch､pullのコマンドを簡略化する｡

```
git remote add [name] [url]       //リモートを追加
```
きちんと追加できたか確認しましょう｡

```
git remote -v     　　　　 　　　　　　　　　　　　　　　　　　　　　　　　　//リモートの表示
```
[【参考リンク(興味がある人向け)】Git-の基本-リモートでの作業](https://git-scm.com/book/ja/v1/Git-%E3%81%AE%E5%9F%BA%E6%9C%AC-%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%81%A7%E3%81%AE%E4%BD%9C%E6%A5%AD)


##fetch
リモートリポジトリの最新の履歴の取得だけを行う(変更箇所だけ取得)
https://backlog.com/ja/git-tutorial/stepup/stepup3_2.html

```
git fetch [さっき追加したリモート]            //リモートリポジトリの変更履歴だけ取得
```
[fetchについての詳細](http://www-creators.com/archives/1272)

##merge
取得した最新の履歴をローカルリポジトリに統合する｡
(チェックアウトしているブランチに､指定したブランチの変更履歴を反映)

```
git merge [さっき追加したリモート]/master     //[さっき追加したリモート]のmasterの変更履歴をローカルリポジトリに反映
```
##pull
fetchとmergeを同時に行う｡
https://qiita.com/osamu1203/items/cb94ef9da02e1ec3e921

```
git pull [さっき追加したリモート] master     //リモートリポジトリのmasterの変更履歴をローカルリポジトリに反映
```

#commitに関する補足(やらないけど重要なこと)
コミットしてはいけないものが存在します｡注意しましょう｡
-　認証情報や環境設定
-　個人情報の入ったファイル etc

[認証情報をGithubに登録した事例](https://qiita.com/mochizukikotaro/items/a0e98ff0063a77e7b694)

[【参考URL(興味がある人向け)】Githubの.gitignoreまとめ](https://github.com/github/gitignore)

以上