初心者のためのGitとGitHub入門

## はじめに
今回はGitについて学習の備忘録として作成しました。

## Gitとは
分散型バージョン管理システムの一つで、Linuxのソースコードを効果的に管理するために開発されたものです。
以下のものはとても詳しく説明してくれてますので、ぜひ読んでみましょう。
[・さる先生のGit入門　〜バージョン管理を使いこなそう〜](https://backlog.com/ja/git-tutorial/)


### Gitの良さ
1. 変更履歴を順々に記録し、バージョンの差を確認できる
1. 複数の並行するバージョンを扱うことができる
1. どんなものも入れられる(Excelファイルや画像も可能)
1. チームで共有できる
:::note
バージョンを管理することでいつ・誰が・何を変更したかがわかる＋ファイルの最新の状態がわかる！
:::

### Git用語
`リポジトリ`:変更履歴を記録する場所
`commit`:個人リポジトリに変更履歴を記載
`push`:共有リポジトリに変更を共有

:::note
・個人での作業での流れ
自分のパソコンでファイルを変更しコミットで記録する→共有リポジトリに　pushで登録する
:::

`pull`:共有リポジトリの情報を同期

## GitHub
Gitリポジトリのホスティングサービス(変更履歴をオンライン上で扱う)
ソーシャルコーディングの場

### GitHubの良さ
1. プルリクエストによるコラボレーション
1. 他チームのソフトウェアが見れる

## Gitリポジトリのホスティングサービス
代表的なものに**Bitbucket**というものがある
|  | GitHub |Bitbucket  |
|:-:|:-:|:-:|
|非公開リポジトリ|有料|無料|
|公開リポジトリ|無料|無料|

:::note warn
Bitbucketは人数の制限がありチームで開発しようとすると有料になる
個人や２〜３人だと無料に
:::

### ローカルリポジトリの作成
コマンドでリポジトリの作成→.gitディレクトリが作成される
```
$ git init
```
## 基本的なフローワーク
1. ファイルの変更をステージングエリアへ追加する
1. ローカルリポジトリにコミットする
1. リモートリポジトリにプッシュする

### ステージングエリア
複数ファイルを変更したときに、コミットするファイルを選択するためにあるもの
```
・個別のファイル
$ git add [ファイル名]
・まとめて
$ git add.
```
### リポジトリに変更を記録する
変更にメッセージをつけてリポジトリに記録するのが**コミット**
コミットすることで変更がリポジトリ内に時系列で記録される
```
$git commit
```
:::note
コミットは一つの作業ごとに実施する！
:::

### わかりやすいコミットメッセージ
他のメンバーが分かりやすいように書くことが大切
```
1行目：変更内容の要約
2行目：空行
３行目：変更した理由
```
### 色々なコミット
コミットは以下の理由で活用できる
- 新規作成
- ファイルの削除
- 複数ファイルの変更

## はじめに覚えるGitコマンド
|コマンド|操作|
|:----:|:--:|
|git init|リポジトリを新規に作る|
|git add foo|ファイルfooをステージする|
|git commit-m "msg"|メッセージ"msg"をつけてコミットする|
|git log|コミット履歴を見る|
|git status|現在の状況を表示する|
|git deff コミットA コミットB||


### git statusコマンド
gitリポジトリの状況を確認する
```
$git status
```
:::note
git statusコマンドで現在の状況を確認しながら作業を進めていく
:::

### git logコマンド
リポジトリにコミットされたログを確認する
```
$git log
```
**オプション**
- 一行で表示する
```
$git log --oneline
```
- ファイルの差分を表示する
```
$git log -p index.html
```

### git diffコマンド
ファイルの差分を確認するコマンド
```
$git diff
```
:::note
add,commitする前に確認しよう！
:::

ステージとコミットの差分
```
$git deff HEAD
```
## リモートリポジトリ(Git Hub)に登録
### git remote addコマンド
ローカルリポジトリをリモートリポジトリに登録できる
```
$git remote add origin https://github.com/user/repo.git 
```

### git pushコマンド
ローカルリポジトリの内容をリモートリポジトリへ送信する
```
$git push origin master
```
master以外のブランチへ送信
```
$git push origin feature
```

## gitで管理しないファイル
### git　ignoreファイルに指定することでファイルをgitの管理から外す
以下のものはGitで管理しない
- 自動生成されるファイル
- パスワードが記載されるファイル

**書き方**
1. #から始まる行はコメント
1. 指定したファイルを削除　index.HTML
1. ルートディレクトリを指定/root.html
1. ディレクトリ以下を除外  　dir/

## コミットしてしまったファイルを管理から外す
### git　rmコマンド
コミットしたファイルをGitの管理から削除する
- ファイルも一緒に削除する
```
$git rm[ファイル名]
```
- ディレクトリも一緒に削除する
```
$git rm -r[ディレクトリ名]
```
- ファイルは残すがGitの管理を外す
```
$git rm --cashed [ファイル名]
```
:::note warn
git ignoreに追記する
:::


`ブランチ`:履歴の流れを分岐して記録していくためのもの。分岐したブランチは他のブランチの影響を受けないため、同じリポジトリ中で複数の変更を同時に進めていくことができる。
(マージ)することで、一つのブランチにまとめ直すこともできる
`ワークツリー`：現在作業中のディレクトリ

`インデックス`
- コミットのステージング領域
- git commitのコミット対象 
- git addは変更をインデックスに登録する

`git commit`:追加・変更したファイルをGitに登録するためのコマンド

:::note
Gitのリポジトリに変更内容を登録（保存）するためには、git commitを使用する必要がある
:::

## おわりに
Gitについてまとめてみました。
Gitは初心者のうちはイメージが付きにくいですが、使っていくうちに操作に慣れてくると思います。
間違った操作をしてしまっても、解決方法の解説がたくさんあるので落ち着いて取り組んでみてください！！

## 参考
[・さる先生のGit入門　〜バージョン管理を使いこなそう〜](https://backlog.com/ja/git-tutorial/)