チーム開発でよく使うGitコマンド一覧

ーーーーーーーーーーーーーーーーーーーーー8/30追記ーーーーーーーーーーーーーーーーーーーーーーーーー
Gitバージョン2.23.0がリリースされ、新たに`git switch`と`git restore`というコマンドが追加されました。
`checkout`では本記事で紹介していない内容も含め、色んな事ができました。しかし、できる事があまりにも多い為、わかりやすくする目的で`switch`と`restore`に分けたといった感じです。
本記事では`checkout`はブランチの移動に関してしか記述していない為、`checkout`は全て`switch`に置き換える事ができます。もちろん、これまで通り`checkout`を使用することも可能です。
`checkout` → `switch`
`checkout -b` → `switch -c`　(`-c`はcreateの略)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

## はじめに
業務上gitをよく使います。よく使うコマンドさえも覚えてなくググる事も多いので、検索時間の短縮の為にも自分用に一か所にまとめようと思いました。
入社当時は先輩方の口から飛び交うカタカナ言葉が私と同じ日本人の会話とは思えませんでしたが、今ではちょっと理解できるようになりました。git用語もそうですが、「プログラミング言語よりも先にIT用語覚えなきゃ会話ができない！」と感じたのはいい思い出。
今後新しいコマンドを使うようになったり、git操作で何かやらかしたらその都度更新します。
## ブランチ編
### hoge(ブランチ名)で作業してね
hogeブランチに移動してからコードいじってねって意味。

```
git checkout hoge
```
で移動できる。
ちゃんと移動できたか不安な人は

```
git branch
```
で、現在自分がどこのブランチにいるか確認できる。間違ったブランチで作業を進めないためにも、心配性の私はこのコマンドをよく打つ。
hogeブランチは存在するはずなのに、そのリポジトリは見つからないよ！ってエラーが出る場合は、

```
git fetch
```
で最新状態に更新してから、`checkout`でいける！
### hoge(ブランチ名)からブランチ切って作業してね。ブランチ名はfugaでいいよ
hogeブランチから新しくfugaブランチ作って、そこで作業してねって意味。
hogeに

```
git checkout hoge
```
で移動。その後に

```
git checkout -b fuga
```
でfugaブランチを作成&移動できる。
`git checkout -b` はfugaブランチがない場合、新しく作成してから移動してくれるコマンド。
`git checkout`だと既に存在するブランチにしか移動はできなく、fugaブランチはないよとエラーが返ってくる。
### このhogeってブランチ、名前をfugaに変えてくれない？

```
git branch -m hoge fuga
```
もし現在いるブランチがhogeなら、コマンドが短縮できて

```
git branch -m fuga
```
でok。
### もう使ってないブランチあったら消しといてね
不要になったブランチの削除は

```
git branch --delete hoge
git branch --delete origin hoge リモートブランチの削除ならこっち
```
作業してて途中から不要になったブランチの削除は

```
git branch -D hoge
```
`--delete`と`-D`の違いは、`--delete`だとマージしていない変更点があるとエラーが出てブランチ削除ができないが、`-D`だとそんなのおかまいなしで強制削除ができる。
### ちゃんとpullした？常に最新の状態維持してね
作業前に

```
git pull
```
を忘れてはいけない(戒め)

```
git pull origin hoge
```
で`pull`先のブランチを指定することができる。
## stash編
### 今やってる作業中断してこっちの対応やってくれる？ブランチはhogeでお願いね！
今やってる作業をそのままに他のブランチに移動する事はできないので、
①作業途中の物を一度`commit`する
②`stash`で退避させ一時保存する
この二択である。
中途半端な状態でコミットを作ってしまうと、乱立してしまい後で履歴を見返すときに見づらくなってしまうので`stash`がおすすめ。`stash`後のブランチは変更が取り消された綺麗な状態になります。
`stash`での退避は

```
git stash
```
これでok。ちゃんとできたか確認しよう。

```
git stash list
```
これで`stash`で退避されているリストが表示される！
後から見返したい時にわかりやすくしたい場合は、メッセージも付けて退避しよう。

```
git stash save "hogemessage"
```
これでhogemessageってメッセージもセットで`stash`に退避されました。
`stash`から取り出すには、`git stash list`で取り出したい対象を確認して

```
git stash pop stash@{n}
```
で、番号を指定して取り出せる。`list`で確認する必要もなく、最新の`stash`を取り出したいなら、

```
git stash pop
```
でok
### stashに色々入ってるけど、必要ないならちゃんと消しといてね

```
git stash drop
```
で最新の`stash`を

```
git stash drop@{n}
```
で、`n`で指定した番号の`stash`を削除できる。
`stash`を全て消したいのであれば、

```
git stash clear
```
これで`git stash drop`でちまちま消さずとも全消しできる。
## cherry-pick編
### hogeブランチで作業してると思うんだけど、今の作業、fugaブランチでやってくれない？え？もうhogeでコミットしちゃった？
まだコミットしていなければ

```
git stash
git checkout fuga
git stash pop
```
で作業内容をそのままにブランチの移動はできるが、コミット済であれば`stash`は使用できない。そんな時はコミットごと移動できる`cherry-pick`の出番。
まずは`log`を確認して持ってきたいコミットのIDをコピーしておこう。

```
git log
```
で対象のコミットのコミットIDをコピーして、
ブランチ移動→`cherry-pick`で対象のコミットを持ってくる→新しいブランチで再度`push`でok

```
git checkout fuga
git cherry-pick コミットID
git push
```
## やらかし対処編
### コミット名間違えた！
プッシュ前なら何も焦ることはない。`--amend`を付けて`commit`コマンドを打ち直すだけでコミット名の変更ができる。

```
git commit --amend -m "new hoge"
```
プッシュ後なら諦めるか、コミットにメッセージ残しておくか、次で紹介するリバードで取り消してから正しいコミット名で再度`push`しよう。
### pushしたけどバグだらけでやだ！恥ずかしい！取り消したい！
`revert`コマンドで指定のコミットの変更をなかった事にできる打ち消しコミットを持ってこれる。ただし、やらかしの履歴は残る。
履歴を残さず消すコマンドもあるが、個人開発なら履歴が汚くても問題ないし、業務ならなおさら下手なことはせずミスは認めよう。間違っても強制プッシュ `git push -f` は使用してはいけない。

```
git log
```
で取り消したいコミットのIDをコピーして

```
git revert コミットID
```
これで入力したIDのコミットを打ち消すコミットができた。後はこれを`push`しておしまい。

```
git push
```
## さいごに
ここまで読んでくださってありがとうございます。
間違っている説明や記述などございましたら教えてください！