もっと前から知りたかった！Git便利コマンド（初心者向け）


#はじめに

7日目のまなみんです。関東で主にWebサービス、Webデザイン、２Dゲームコースのメンターを担当しています。

こちらのadvent calendar、錚々たるメンターのみなさまの名前が連なっておりかなりビビっているのですが、最近こちらの記事を読み、勇気を出して初めてのキータを書いてみようと思いました！

>「熟練してから記事を書こう」と思っても、その頃には記事を書く必要性を感じなくなっていたりする。
むしろ「初心者のつまづき」こそ大事で。これは熟練してしまうと、逆に思い出せなる部分だ。
「初心者のうちに書いておいた方が良いこと」もたくさんある。
この世界では、多くの分野において「初心者」の割合のほうが、はるかに大きいのだから。
多くの人の目を引くのは、むしろ「初心者向けの記事」だったりする。

[拝啓 本当は Qiita を書きたいのに、まだ迷っているあなたへ。 \- Qiita](https://qiita.com/YumaInaura/items/4d2c602d59c62daa9344)

ではでは、至らぬ点も多いかとは思いますが、書いていきますね！

#Git
様々のコースの方に共通して役立つかと思い、今回はGitをテーマにしました＾＾

チーム開発において避けては通れないGit、、、！
Gitの記事はキータにバンバン上がっているものの、専門用語だらけで初心者的にはわからなかったり、使わないコマンドがたくさん書いてあったり、逆に説明が足りなかったりと、初心者時代にはかなりGitで苦戦していました。
そこで今回、自分が一年半ほどエンジニアのインターンをしてきて習ってきた、よく使うコマンドをわかりやすく簡潔に説明していきますね〜！！
Gitの基本的なことは既に知っている方向けです🙆

完全に初心者の方はぜひこちらを読んでみてください↓
[サルでもわかるGit入門 〜バージョン管理を使いこなそう〜 \| どこでもプロジェクト管理バックログ](https://www.backlog.jp/git-guide/)


#まずは基本

最小限これだけわかればGitHubにあげれるぞと言うコマンドです。
以下の場合masterブランチに変更を適用する際に必要なコマンド3つです。
addとcommitとpushの3つセットで覚えてください。

```console
git add .　　　　　　　
git commit -m '(変更の内容をコミットごとに記載)'　
git push origin master
```

```git add .```で変更したファイルを全てステージングにあげ、
```git commit -m　'コメント'　```では```-m```とオプションを追加することでコマンド一行でコミット+コミットへのメッセージをつけることができます。
```git push origin master```ではマスターブランチにpushし、変更を反映させていますが、ブランチにいる際は```git push origin ブランチ名```でpushしてください


コミットメッセージは誰が見ても変更がわかりやすいよう、好ましい書き方があるのでこちらの記事も参考にしてみてください。
[gitにおけるコミットログ/メッセージ例文集100](https://anond.hatelabo.jp/20160725092419)



#※コミット前の確認

変なファイルが変更されていないかをコミット前に確認

```console
git diff
```

前回までのコミット履歴を確認

```console
git log --oneline
```

今どのファイルがステージングにいるのか等のgitの状況を確認

```console
git status
```

エラーが起きた場合やコミット前にミスがないか確認する際にそれぞれよく使います。必要に応じて使い分けてみてください。


#pushする際にエラーが出た

masterに移動して

```console
git pull
```
これでmasterにリモートブランチがpullされるので、その後さらに対象ブランチに移動してもう一度pullしてください

#ブランチを切る時

チーム開発時やインターン先などではタスクごとにブランチを切って、マスターにマージすることが通例です。

```console
git checkout -b 'ブランチ名'
git checkout '既に存在するブランチ名'
```
```git checkout -b 'ブランチ名'```でまずブランチを新しく命名し、ブランチに移動することができます。masterに戻ったり他のブランチに移動する際は```git checkout '既に存在するブランチ名'```です。


```console
git branch
```

今どこのブランチにいるのかわからない際には```git branch```で確認します。

ちなみに```git checkout -```で直前までいたブランチにすぐ行けるのでよく使います。

#直前のコミットを消したい

間違えてコミットしてしまうこと、あるあるかと思います。そんな時は```git reset```です。

コミットとともにローカルのフォルダでの変更も消したい時（完全に消したい時）

```console
git reset --hard HEAD^
```

コミット自体だけ消したい場合（ローカルでの変更やステージングはそのまま）

```console
git reset --soft HEAD^
```

なお```HEAD~3```のように数字を指定することで何個前のコミットかを指定することができます。これだと3つ前のコミットを消すことができます。

#直前のコミットメッセージを変えたい！
```console
git commit --amend
```
#今コミットしたくないけどブランチを移動したい

このコマンドでコミットを保留できます。

```console
git stash
```

以下のコマンドで保留にした変更分を別のブランチにも適用できます。

```console
git stash pop
```

なお```git　stash　list```でstashしてきたものを見ることができます。

#別のブランチに変更を適用したい
```console
git　cherry-pick コミットID
```

コミットIDは```git log --oneline```から見ることができます。

#直前のコミットを結合させたい

私はコードレビューをしてもらう際に、不必要なコミットをrebaseで結合させていました。
コミットは（できれば）エラーのない状態で機能ごとに細かく行うものですが、たまに無駄コミットをしてしまいませんか？？以下のコマンドで結合することができます。

```console
git rebase -i HEAD~2
```
このコマンドだと直前から2つ前のコミットを編集できます。

すると以下のような画面が開くので

![スクリーンショット 2017-12-07 午後5.36.14.png](https://qiita-image-store.s3.amazonaws.com/0/140595/3fa57bf2-657e-49cd-232a-168c9111bfdd.png)


pickの部分をvimコマンドを使って消し、pickをsに書き換え（上記の画像のsquashの部分を参照しています）、vimコマンドのwqで閉じるとコミットメッセージを編集できるようになります。
片方のコミットメッセージを消し、vimコマンドのwqで保存した後、普通にpushするとエラーを起こすので以下のようにforce pushします。

```console
git push -f origin ブランチ名 
```
※force pushは初心者の場合あまり使わない方が好ましいので、masterにはforce pushしない方が良いです。rebase自体が好ましくないと言う意見も多いので参考程度にみてください！

###番外編　編集時最低限必要なVimコマンド

|記号  |意味 |
|---|---|
|i  |編集モード  |
|escキー  |編集モード終了  |
|wq  |保存(w)して出る(q)  |

#その他便利コマンド

###行ごとにコミット履歴を見たい
```console
git　blame　ファイル名
```
###コミットメッセージだけ見たい
```console
git　show　コミットID
```

#終わりに
まだまだたくさんあるのですが、私がよく使うものは以上になります。（たぶん）
Gitをある程度使えるようになり、チーム開発に（あまり）不自由がなくなりました。いぇ〜〜〜い
また思い出したら追加していきますね〜！この記事が誰かしらのお役に立てれば幸いです🙏　



次の記事はみーたんです！音楽好きのメンターさんで、前に一緒に音楽のお話をした際、とても楽しかったことを覚えています♥わくわくですね！！！