はじめてチーム開発する時用のGitチート

エンジニア1年生です。

はじめてのチーム開発で、
Gitコマンドを
毎回毎回ググっている僕。
いい加減覚えよう…と
自分用にまとめました！

## よく使うGitコマンド

### **ブランチ (`git branch`)**

```
git branch              # ブランチの一覧表示
git branch -b (ブランチ名) # 新しいブランチを作成
git branch -d (ブランチ名) # ブランチを削除
```

ローカルのブランチを表示、新しいブランチを作成、ブランチを削除、など、ブランチに関するコマンド

### **プル (`git pull`)**

```
git pull origin (ブランチ名)
```

リモートリポジトリの最新の変更をローカルに取り込むコマンド
常に最新の状態を保ち、コンフリクト(編集の衝突)を避けるために重要
(origin=リモートリポジトリ)

### **フェッチ (`git fetch`)**

```
git fetch origin
```

リモートリポジトリの最新の情報をローカルに取得するコマンド
git pullとの違いは、取得のみでmargeはしない
（**`git pull`** = **`git fetch`** + **`git merge`**）

### **ブランチの作成と切り替え (`git checkout -b`)**

```
git checkout -b (ブランチ名)
```

このコマンド一つで新しいブランチが作成されて自動的にそこに切り替わる

**`git checkout` と `git switch` の違い**
**`git checkout`** はブランチの切り替えやファイルの復元など、多様な用途で使用
Git 2.23以降で、ブランチの切り替え専用の **`git switch`** が導入された

### **ステージングとコミット (`git add` と `git commit`)**

```
git add .
git commit -m "(コミット内容)"
```

変更内容を
ステージング(コミットに含めるための準備)し、コミット(変更を記録)するコマンド
**`git add .`** ＝現在のディレクトリのすべての変更をステージング

### **プッシュ (`git push`)**

```
git push origin (ブランチ名)
```

ローカルのブランチをリモートリポジトリにプッシュするコマンド
これをすることで、他のチームメンバーが見たり、作業に参加したりできるようになる

### **マージ (`git merge`)**

```
git merge (ブランチ名)
```

指定したブランチの変更を現在のブランチに統合するコマンド

### **スタッシュ(`git stash`)**

```
git stash
git stash pop  # 保存した変更を再適用
```

作業中の変更を一時的に保存し、クリーンな作業ディレクトリに戻すコマンド
後で取り出して再び作業を続けることができる

### **リポジトリのクローン (`git clone`)**

```
git clone https://github.com/username/repository.git
```

リモートのリポジトリをローカルにコピーするコマンド
主にプロジェクトに参加した初めに行う作業

## よくあるケースから逆引き

### **ブランチを一覧で表示したい**

現在、ローカルに存在するすべてのローカルブランチを確認したい！
```
git branch
```

### **ブランチをプルしたい**

最新の変更をローカル`develop`ブランチに取り込みたい！

```
git checkout develop
```
まず、ローカルで`develop`ブランチにチェックアウト
(=ローカルのdevelopブランチに切り替えるため)
```
git pull origin develop
```
次に、リモートの`develop`ブランチから最新の変更をプル
(origin=リモートリポジトリ)

### **ブランチをプッシュしたい**

ローカルブランチ`feature-hoge-fuga`の最新コミットをリモートリポジトリにプッシュしたい！

```
git push origin feature-hoge-fuga
```

`git push`指定されたリモートリポジトリに変更をプッシュ
`origin`リモートリポジトリのデフォルト名
`feature-hoge-fuga`プッシュしたいローカルブランチの名前

### **ブランチを作成したい**

`feature-hoge-fuga`ブランチを作成して作業を開始したい！

```
git checkout -b feature-hoge-fuga
```

### **ブランチを削除したい**

マージが完了した`feature-hoge-fuga`ブランチを安全に削除したい！

```
git branch -d feature-hoge-fuga
```
-dオプションは安全な削除を実行
(=ブランチが既にマージされている場合にのみ削除を許可)
もしブランチがマージされていないと判断される場合は、削除を拒否し、エラーが表示される

### **ブランチを切り替えたい**

`feature-hoge-fuga`ブランチで作業したい！

```
git switch feature-hoge-fuga
```

### **リモートリポジトリの最新の状態を確認したい**

リモートリポジトリに新しいブランチが追加されたかどうかを確認したい！
=リモートの最新情報をローカルに取得したい
```
git fetch
```
リモートのブランチ一覧の表示は
`git branch -r`
すべてのリモートの情報を含めたブランチ一覧の表示は
`git branch -a`

### **実装が完了したのでステージングしてコミットしたい**

すべての変更をステージングして、"hogehoge-fugafuga"というコミットメッセージでコミットしたい！

```
git add .
```
作業ディレクトリ内のすべての変更（新規ファイル、変更されたファイル、削除されたファイルなど）をステージングエリアに追加

```
git commit -m "hogehoge-fugafuga"
```

-m オプションはコミットメッセージを直接指定するためのもの
このメッセージは今回行った変更の内容として記録される

### **コンフリクトを解決したい**

`develop`ブランチから`feature-hoge-fuga`ブランチに最新の変更をマージしようとしてコンフリクトが発生
コンフリクトを手動で解決した後、変更をコミットしたい！

```
git add [ファイル名]
```
コンフリクトが解決されたファイルをステージングに追加
すべての解決したファイルをステージングするには、`git add .`

```
git commit -m "(コミット内容)"
```
解決したコンフリクトのコミット

### **スタッシュ(一時的に保存)をしたい**

緊急で他のタスクに取り掛かる必要があるが、現在のブランチの変更はまだ途中…
変更を一時的に保存してクリーンな状態に戻りたい！

```
git stash
```
変更されたファイルやステージングされている変更を含む、現在の作業を一時的に保存.
スタッシュはGitの内部に保存され、作業ディレクトリは最後のコミットの状態に戻る
これにより、緊急タスクに取り組むためのクリーンな環境が整う

### **スタッシュ(一時的な保存)を再適用したい**

先ほどスタッシュに保存した作業を取り出して続きを始めたい！

```
git stash pop
```
スタッシュした内容を適用してスタッシュリストからその項目を削除する

### **プルリクエスト（PR）の内容をローカル環境で確認したい**

```
git fetch origin
```

まず、GitHubから最新の情報を取得するために、リモートリポジトリの情報を更新

```
git checkout -b (ブランチ名) origin/(ブランチ名)
```
リモートのブランチを基にローカルでも新しいブランチを作成し、そこに自動的に切り替える

(**開発中に随時更新します**)