Gitについて

# 注意
あらかじめ言っておきますが、筆者は初心者なので、自分なりの解釈でまとめています。「100%信じるぜ！」という気持ちで読まないようお願いします。どうぞよろしく！

# 参考
[【わかりやすい！Git操作】初心者向けのGitの基本 〜 30分で入門！](https://www.youtube.com/watch?v=6SLMB7BPG9E&t=1411s)

# 経緯
ローカル環境でGitを使用するにあたり、基本的な操作をまとめました。チーム開発では異なる運用になるかもしれませんが、まずは個人での利用を想定しています。

:::note
Gitとはなんぞや？という説明は今回省略いたします。
:::

# 用語の意味
## リポジトリ
Gitで管理したいコードのまとまりのことです。

## コミット
リポジトリの変更内容をGitに記録する操作のことです。

## ブランチ
履歴の分岐のこと。以下のように、mainブランチからAブランチを作成し、変更を加えることができます。
```:mainブランチ
├── db.sqlite3
├── main_app
│   ├── __init__.py
│   ├── __pycache__
.   .
│   └── views.py
| 
├── manage.py
├── myenv
│   ├── bin
.   .
```

mainブランチからAというブランチを作成し、test.pyを追加
```:Aブランチ
├── db.sqlite3
├── main_app
│   ├── __init__.py
│   ├── __pycache__
.   .
│   └── views.py
|.  └── test.py　←←←←←←←←←←←←←←←←追加
| 
├── manage.py
├── myenv
│   ├── bin
.   .
```
このように、ブランチごとに独立して変更を加えられます。

## マージ
あるブランチの変更内容を、別のブランチに統合する操作のこと。
先程のmainブランチとAブランチを例にすると

例）
Aブランチで作成したtest.pyを、mainブランチに取り込むためにマージを行う。

# Gitの使用方法
実際に使用するための準備を紹介します。

:::note
Gitの導入方法につきましては、他のブログ等を参考にしてください！
:::

## Gitの登録
Gitを誰が操作したかを記録するため、**メールアドレス**と**ユーザー名**を登録します。

### メールアドレスの登録
```
git config --global user.email ''メールアドレス''
```

### ユーザー名の登録
```
git config --global user.name ''ユーザー名''
```

## Gitの基本操作
### 1.gitを使いたいディレクトリに移動
```
cd ディレクトリ名
```

### 2.Gitリポジトリを作成
移動したディレクトリでGitを使えるようにするために以下を入力します。
```
git init
```

:::note
参考にした動画上では、gitファイルが作成されるが、自分のPCではgitファイルが作成されなかった。ファイルが緑色になっただけである。以下はchatGPTの回答
>.git ディレクトリは隠しディレクトリなので、通常の ls コマンドでは表示されません。`ls -a`で確認を行うと安心です。

ls -aを実行すると以下のように表示されたのでgitが無事に使用できるようになった
```
.               .git            main_app        myenv           static
..              db.sqlite3      manage.py       mysite          templates
```
:::


### 3.Gitの状態の確認
以下を入力することで、現在のgitの状態を確認することができる
```
git status
```
結果
```
On branch main　#今のブランチ名がわかる。これはmainブランチにいることがわかる

No commits yet

Untracked files: #これは、以下のファイルが追跡されていないよ。ということ。
  (use "git add <file>..." to include in what will be committed)
        db.sqlite3
        main_app/
        manage.py
        myenv/
        mysite/
        static/
        templates/
```

### 4.コミットをする

4-1.コミットしたくないファイルがあった場合

 **.gitignoreファイルを作成**し、以下のように記述することでコミットされないファイルを指定できる

```
/manage.py  # ファイル名はそのまま記述
/main_app/  # フォルダ名は末尾にスラッシュ
```

:::note
.gitignoreファイルを作成するメリット

githubにプッシュ（アップロード的なもの）する際、.gitignoreファイルを作成することにより、APIキー等をgithubにアップロードせずに済むことになる。
:::

4-2.コミットをするための予約をする（ステージングに追加するという）

4-2-1.ファイルを個別で予約する
```
git add ファイル名
```

4-2-2.ファイルをすべて予約する（サブファイルすべて予約される）
```
git add .
```

4-3. コミットを行う
```
git commit -m ""コメント""
```
:::note
コメントは、自分がわかればよいが、チーム開発を行うとき、わかりやすいほうが良いので、チームのルールに従う。
:::

以上で、gitに保存されたことになります。

# ここまでのまとめ
以上が、基本的な機能です。

ここからは、より実用的な部分を紹介します

# 実用的な紹介(branchの使い方)
実際に使用するときは、branch（ブランチ）を使用して、Gitを使用することになります。

## 1.ブランチを切り、作業を行う
以下のように入力することにより、ブランチを作成し、そのブランチに移動することとなる（ブランチを切るともいう！）
```
git checkout -b ブランチ名 
```
例）
以下はfeature/testブランチが作成され、feature/testブランチに移動する
```
git checkout -b feature/test

#結果
Switched to a new branch 'feature/test'　#新しいブランチを作成して、feature/testブランチに移動したことになる
```

移動したbranchで作業を行い、コミットをする

## 2.マージ
現状、mainブランチからfeature/testブランチを作成し作業を行い、コミットが済んでいる状態となる。
ただ、実際に使用するのはmainブランチなので、mainブランチに変更内容を追加したい。
そういった場合、マージが必要となる

### 2-1.mainブランチに移動する
現在、feature/testブランチにいるので、まずはmainブランチに移動する。
以下を入力することにより、指定したブランチへ移動できる
```
git checkout ブランチ名
```
例）
```
git checkout main
```

### 2-2.マージする
以下を入力することにより、現在のブランチにマージすることができる。

```
git merge マージするブランチ
```
例）
以下で、mainブランチにfeature/branchで追加した作業が、mainブランチに結合される
```
git merge feature/test
```

# 実用的な紹介のまとめ
以上で、ブランチを切り、作業を行い、mainブランチにマージすることが実用的なGitの使用方法である。実際は、Githubにプッシュしていくことになるがそれはまた別の記事で行うこととする

# 補足

## ブランチの状況を確認
現在、どのブランチにいて、ブランチが何個あるかかくにんすることができる
```
git branch -a

#結果
  feature/test
* main
  remotes/origin/main
```

## ブランチを削除する
以下を入力することで、ブランチを削除することができる
```
git branch -d ブランチ名  # マージ済みのブランチを削除

git branch -D ブランチ名  # マージされていないブランチを強制削除
```

# 感想
初学者の方の参考になれば嬉しいです。ガンガン開発していこう！！