よく使っているgitコマンドまとめ

:::note info
viviONグループでは、DLsiteやcomipoなど、二次元コンテンツを世の中に届けるためのサービスを運営しています。
ともに働く仲間を募集していますので、興味のある方は[こちら](#punch-一緒に二次元業界を盛り上げていきませんか)まで。
:::

## :octocat: 概要

普段お仕事をしている中で、Gitコマンドに触れる機会は多いと思います。

ただ、意外とチーム内でどういう使い方をしているかってあまり話すことがないな～と :thinking: 
（ex: コンフリクトの解消どうやってる？など）

そこで、せっかくなら自分が普段良く使っているgitコマンドをまとめてみようかなと思い記事にしてみました。

## :octocat: 基本編

### 🔄 git pull

い   つ   も   の
ちなみにご存じかとは思いますが、git pullはgit fetch + git merge（ざっくり言うとリモートブランチ → ローカルのupstreamブランチ → ローカルブランチ）をするコマンドです。

### ⏩ git commit -m “[message]” & git push

普段はVScodeの機能でやってるのであまり手打ちしてません。(push -fをするときくらい)

特にgit pushはVScodeがset-upstreamまでやってくれるのでとても助かっています。僕は今日もVScode様の靴をﾍﾟﾛﾍﾟﾛしながら生きています。

![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1835408/117c1a14-eb88-32fb-25c6-2a0a9d101bc5.png)

![Untitled (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1835408/d142ee16-2f72-ea53-a3b7-4c4c5721b92b.png)

:::note
git configで[push.autoSetupRemote](https://git-scm.com/docs/git-config#Documentation/git-config.txt-pushautoSetupRemote)を設定しておくと幸せになれるかも
:::

### 🚚 git checkout -b [branch] （or git switch -c [branch]）

い   つ   も   の Part2

現在のブランチから派生してブランチを作成&作業ブランチをそのブランチに変更するやつです。

2年前あたりからswitchコマンドが推奨されていますが、僕はエイリアスを登録し直すのがめんどくさいのでいまだにcheckoutを使っています🙈

### 🔊 git log

おなじみコミットログを確認するやつ

頻繁に使うことはないですが、いろんなブランチを旅行した後や、自分の作業ブランチの派生元コミットを確認したいときにふと使っています。

## :octocat: ちょっと応用？

### 🔀 git merge [branch]

指定したブランチを今いる作業ブランチに取り込むコマンド

かなり宗教戦争になりそうですが、僕はリベース派なのであまり使わないです

### 💚 git rebase [branch]

指定したブランチを今いる作業ブランチに取り込むコマンド Part2

厳密には、作業ブランチのコミットを親ブランチの最新のコミットから生やしなおすイメージ

僕はこっち派🥰

:::note warn
※ただ、複数の機能ブランチをリリース用ブランチなどにまとめる場合などに、他の機能ブランチでmergeコマンドを使われていたときは僕もmergeコマンドを使います（その状態でリベースするとmergeコミットと衝突してバグることがあったので）
:::

### ⏪ git revert [commit hash]

みんな大好き

指定したコミットの変更を取り消すコミットを作成するコマンド（注意：コミットそのものを亡き者にしたい場合は別の操作が必要です）

### 🍒 git cherry-pick [commit hash]

別ブランチから特定のコミットを引っ張ってくるコマンドです。わかりやすいね。

※fetch用のremote urlを追加することで別リポジトリから変更を持ってくるみたいな方法があったりしますが、個人的にはワザップみたいなものだと思っています

## :octocat: 応用

### 💚 git pull --rebase origin [branch]

git fetch origin [branch] + git rebase [branch]を実行するコマンド

普段特定のブランチをカレントブランチに取り込むときはこのコマンドを使っています。
リベースでの取り込みがコマンド一発で済むのと、このコマンドのエイリアスを登録してあるのでとても快適です。

コンフリクトしたときは、普通のリベースと同じように「競合解消 → `git add .` → `git rebase --continue` 」で進められます

### ⏪ git reflog & git reset --hard HEAD@{n}

git reflogは、gitの操作履歴を参照するコマンドです

![Untitled (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1835408/c77deb2b-63ce-57de-115d-c7c5187adb4d.png)

この操作履歴をたどれるのがかなり良くて、リベースをミスってコミット履歴をすべて消し飛ばしてしまったときに、その操作を行う前の状態をreflogで参照してreset --hardでそこまで戻してpush --fで事なきを得る...みたいな感じで重宝しています。

gitの取り消し系操作は色々ありますが、大抵はこのコマンドとreset --hardだけ覚えとけばどうにでもできるので最強の呪文だと思っています（最強ではない）

:::note warn
reset --hardは結構便利なのですが、間違えると復元不可能な状態になってしまうこともあるので、個人用ワークスペースなどでの練習をおすすめします。
:::

### 🏃💨 git stash -u & git stash apply stash@{n}

まず`git stash` は現在の変更を退避させるコマンドです。uオプションを付けることで新規に作成した非追跡ファイルも逃がせます。

「作業中にレビュー依頼来ちゃった、ブランチ切り替えたいけど今の作業まだコミットしたくないな…」というときによく使っています。

逃がしたものを復元するのがstash applyで、`git stash apply` なら最新のstashを、`git stash apply stash@{n}` なら指定した特定のstashを復元できます。

stashの一覧は`git stash list` で確認できます。

ちなみに同じようなコマンドとしてstash popがありますが、popとapplyの違いとしては

- pop：復元したstashをリストから削除する
    - 取り出すイメージ
- apply：復元したstashをリストに残す
    - コピーするイメージ
    - 不要になったら都度`git stash drop stash@{n}`や`git stash clear`で消す

となっています。オプションなどの基本的な使い方はどちらも同じです :fried_shrimp: 

## :fried_shrimp: 最後に

今回は普段使っているgitコマンドをまとめてみました。
ちょっとしたカンニングペーパー的なものとして少しでも読んでいただいた方の助けになっていれば幸いです。

普段から様々なgitコマンドを使いこなしているよという方はgitマスターの素質があると思いますので、お近くのチャンピオンロードを抜けた先にあるgitリーグに挑戦してみてはいかがでしょうか（？）

それでは :wave:

## :punch: 一緒に二次元業界を盛り上げていきませんか
株式会社viviONでは、フロントエンドエンジニアを募集しています。

https://vivion.jp/recruit/

また、フロントエンドエンジニアに限らず、バックエンド・SRE・スマホアプリなど様々なエンジニア職を募集していますので、ぜひ採用情報をご覧ください。