# Gitとは何なのか
---
ざっくりいうと、
## ファイルのバージョン管理が
## 簡単にできるツールのこと
です。
---
## Gitでどんなことができるか
---
* **古いバージョンに簡単に戻せる**
* **新旧のファイルを一元管理できる**
* **編集した履歴を複数人で共有できる**
* **複数人で修正した部分を一つに統合できる**
---
## Gitを理解するための基本用語
---
Git管理は基本的に
下記のような構造になっている。

---
### リポジトリ(repository)
ファイルやディレクトリを保存する場所で、2種類に分かれている。
---
- リモートリポジトリ
- 専用のサーバに配置して複数人で共有するためのリポジトリ
- ローカルリポジトリ
- ユーザーごとに配置される手元のマシンで編集できるリポジトリ
---
### コミット(commit)
ファイルやディレクトリの追加・変更をリポジトリに記録する。
---
#### :bulb: Tips①
* バグ修正や機能追加などの異なる意味を持つ変更は、できるだけ分けてコミットするようにしましょう。後から履歴を見て特定の変更内容を探す時に探しやすくなります。
---
#### :bulb: Tips②
* コミットメッセージは、他の人がコミットの変更内容を調べる場合や、自分で後から履歴を見直す際に大切な情報となるので、変更内容のわかりやすいコメントを書くように心がけましょう。
* 特に、なぜ(Why)を意識して記入するように。
* プロジェクト毎に、コミットメッセージの書式を決めて統一させるように。
---
### クローン(clone)
* サーバにあるリモートリポジトリをまるごと自分のローカル環境(ローカルリポジトリ)に保存する機能。
---
### プッシュ(push)
* ローカルリポジトリにあるファイルをリモートリポジトリに送信して保存する機能。
---
### プル(pull)
* リモートリポジトリから、ローカルリポジトリとの差分のみをダウンロードして更新する機能。
---
### ブランチ(branch)
* ファイルの編集履歴を分岐させて記録していく機能。
---
* masterブランチ
* 製品として出荷可能な状態であり、アプリケーションが安定して動く状態にする必要がある。
* developブランチ
* 次のリリースのための最新の開発作業の変更が反映されている状態。
* featureブランチ
* developからブランチを切り、新機能の開発をするためにある。
---
基本的なflowとは、feature->develop->master
※develop->masterにマージするには、リポジトリ管理者がやること。
---
### マージ(merge)
* バグの修正や、機能の追加を行ったブランチが最終的にmasterブランチに統合する機能。
---
### この一連の機能ってどう使う?
---
```mermaid
graph LR
A(clone)-->B(pull 1st)
B --> C(fix source)
C ==> |check diff| D(commit)
D --> E(push)
E ==> |no conflict| Z((end))
E ==> |conflict| G(pull 2nd)
G --> F(merge)
F(merge) ==> |check diff| D
F --> Z
```
※pushしてコンフリクトが起きた場合、必ずローカルでmergeすること。むやみに自分のソースを上書きすると、ソースがデグレる。
---
### その他
* revert, reset, cherry-pick, rebaseなどの上級者向けの機能は今回割愛させていただきます。
---
### 参考リンク
* https://qiita.com/hatt0519/items/23ef0866f4abacce7296
* https://backlog.com/ja/git-tutorial/intro/01/
* https://design-plus1.com/tcd-w/2019/12/what-is-git.html
{"metaMigratedAt":"2023-06-15T10:51:48.455Z","metaMigratedFrom":"Content","title":"Gitとは何なのか","breaks":true,"contributors":"[{\"id\":\"3de42c3e-08e7-4f9a-8227-960267d63a37\",\"add\":2494,\"del\":2939}]"}