[Git] 10分で使いはじめるTig（コミット操作を早くする）


# はじめに

私は普段 **Tig（てぃぐ）**を使っているのですが、どうも Tig の知名度は意外と低いようです。そして噂に聞いて使い始めても、とっつきづらいなどの理由でやめちゃう人も多いようです。

しかし、最初の壁さえ乗り越えてしまえば、Tigは便利なGitツールとして自身のツールボックスに加えられると思います。

実際に私の経験として、同僚に10分くらいで Tig のインストールから基本操作をレクチャーをしたところ **「Tigめっちゃ便利や・・・！」** という感想を頂いたこともあります。

# 概要

本記事では、Tigを使うモチベーションからインストール、まず覚えるべき「コミット操作」について書いています。

すなわち私が同僚にしたレクチャーの追体験です。

*ターミナルにテーマを設定しているため、スクリーンショットがお使いの環境と異なる方が多いと思いますがご容赦ください*

# モチベーション

- Gitのコミット操作（ステージ/アンステージ）が素早く行えるようになる。
- diffの確認がしやすくなる。

他にもあるのですが、まずは`git add (-p)` や `git reset` が素早く簡単に出来るようになる、くらいの認識で使いはじめるモチベーションとしては十分かと思います。

**ステージ/アンステージ操作**
![Kobito.qq09Fb.png](https://qiita-image-store.s3.amazonaws.com/0/29653/ca8d35fe-2563-19db-cbde-4d3fe04c901e.png "Kobito.qq09Fb.png")

# インストール

## Brew

Brew（ぶりゅー）は Mac 用のパッケージ管理ツールです。

インストールしてない方は、ターミナルを起動して以下のコマンドを貼り付けて実行しましょう。（2016/03/22時点）

```sh
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

最新のインストール手順は、以下の公式サイト（日本語）をご参照ください。
http://brew.sh/index_ja.html

## Tig
Brewを使ってインストールします。

以下のコマンドをターミナルで実行しましょう。

```sh
$ brew install tig
```

# 使い方
## ファイル単位のステージ/アンステージ

まずはGitリポジトリ（普段gitコマンドを利用しているディレクトリ）に移動します。

そしてコミット用に何か追加・編集した上で、（`git add`や`git commit`を使う代わりに）以下のコマンドで Tig を起動します。

```sh
$ tig
```

そうすると以下のようなコミットログが羅列されたような画面が起動します。
（Mainビューと呼ばれるようです）
![Kobito.hmkBcX.png](https://qiita-image-store.s3.amazonaws.com/0/29653/dc78aa55-cc15-b65c-59e2-8fb860c57b4d.png "Kobito.hmkBcX.png")

**さて、ここであれこれ考える前にさかさず`s`をタイプし、Statusビューに移行しましょう。
（最初からあれこれやろうとすると訳が分からなくなるので、これ重要です）**

そうすると以下のような画面になります。
![Kobito.xmzvAF.png](https://qiita-image-store.s3.amazonaws.com/0/29653/c01224ce-c25c-c053-ffa2-c792b1cf97a3.png "Kobito.xmzvAF.png")

Gitに慣れている方であれば説明するまでも無いかもしれませんが、それぞれ以下の状態を表しています。

|項目|説明|
|:--|:--|
|Changes to be committed:|ステージ済み（コミット対象）|
|Changed but not updated:|変更したけれど未ステージ（コミット対象外）|
|Untracked files:|まだGitで管理されていないファイル（コミット対象外）|

カーソルキーの上下（または`j,k`）でカーソルを移動することができ、`u`でステージ（`git add`）が行えます。

画面下にも説明が出ていますが、以下の状態で`u`を押すと、
![Kobito.t1TeWZ.png](https://qiita-image-store.s3.amazonaws.com/0/29653/7e71eb46-963f-8eb4-bc12-e9ce6fda540c.png "Kobito.t1TeWZ.png")

ステージされました。（`README`が`Changes to be committed:`のエリアに移動しました）
![Kobito.PWHcAn.png](https://qiita-image-store.s3.amazonaws.com/0/29653/54575070-e900-d2ba-8fac-f8627b358662.png "Kobito.PWHcAn.png")

そして同じように、`Changes to be committed:`の一覧で`u`を押すと、アンステージ（`git reset`）が行えます。

Statusビューでの基本操作はこれだけです。

|キー操作|説明|
|:--|:--|
|カーソルキーの上下 or `j, k`|カーソル移動|
|`u`|ファイル単位のステージ/アンステージ|

## diff単位でステージ/アンステージ

次にファイル内の特定の差分だけステージ/アンステージする操作（`git add -p`相当）についてです。

さきほどのファイルが選択された状態で`Enter`を押すと、画面の右側（または画面の横幅が小さい場合は下側）にdiffビューが表示されます。

![Kobito.ebVabr.png](https://qiita-image-store.s3.amazonaws.com/0/29653/91f21b97-6752-b776-9746-aabcdb1f1a4d.png "Kobito.ebVabr.png")

ここでは以下のようなキー操作が行えます。

|キー操作|説明|
|:--|:--|
|`j, k`|カーソル移動|
|`ctrl-u, ctrl-d`|ページ単位で上下移動|
|`u`|ハンク（変更点のかたまり）単位でステージ/アンステージ|
|`1`|行単位でステージ/アンステージ|
|`shift-j, shift-k`|ファイル選択（左側のビュー）を上下移動|
|`q`|diffビューを閉じる|

**とりあえず`j, k`で移動して、ステージしたいハンク（図で言うとピンク文字に囲まれた範囲内）まで移動したら`u`でステージ、困ったら`q`で戻る** くらいで覚えておけば大丈夫です。

## コミット

Statusビュー上で`shift-c`を押すことで`git commit`した時と同じように、vimが立ち上がりコミットメージを入力できる状態となります。

ただし、diffビューが表示されているときは`shift-c`を押しても無反応なので、必ず`q`を押してdiffビューを閉じた状態で操作を行います。

つまり、以下のような状態で`shift-c`を押します。
![Kobito.9pj8o4.png](https://qiita-image-store.s3.amazonaws.com/0/29653/c7fc51f2-27c9-ac3b-34f4-b7bb58b061c4.png "Kobito.9pj8o4.png")

*ここまで行ったステージ/アンステージ操作は、きちんとgit操作として反映されています。`q`を何度か押してTigを終了させてから、`git commit`コマンドでコミットすることも可能です。*

## 終了

すでに何度か登場していますが、Tigでは`q`を押すことで「ひとつ前の画面に戻る」ことが出来ます。

なので、困ったときは`q`を連打していればTigを終了することが出来ます。

# まとめ

ここまでで登場したViewと、そこで利用可能な主なキー操作をまとめます。

## Mainビュー
最初に表示される画面です。

|キー操作|説明|
|:--|:--|
|`s`|Statusビューに移行|

*当然ながら他にも操作がありますが、本記事では割愛します。*

## Statusビュー
現在の状態を確認して、ファイル単位のステージ/アンステージ操作が行える画面です。

|キー操作|説明|
|:--|:--|
|カーソルキーの上下 or `j, k`|カーソル移動|
|`u`|ハンク（変更点のかたまり）単位でステージ/アンステージ|
|`Enter`|選択中のファイルをdiffビューで表示|

## diffビュー
diffを確認し、ハンクあるいは行単位のステージ/アンステージ操作が行える画面です。

|キー操作|説明|
|:--|:--|
|`j, k`|カーソル移動|
|`ctrl-u, ctrl-d`|ページ単位で上下移動|
|`u`|ハンク（変更点のかたまり）単位でステージ/アンステージ|
|`1`|行単位でステージ/アンステージ|
|`shift-j, shift-k`|ファイル選択（左側のビュー）を上下移動|
|`q`|diffビューを閉じる|

## 共通
|キー操作|説明|
|:--|:--|
|`q`|ひとつ前の画面に戻る|

# 最後に
さて、実際に10分で使いはじめられたでしょうか？

実はQiita上には、すでにTigに関する記事がそれなりに存在しています。
（中にはgif動画で分かりやすく解説されているものもありますし、私も大変お世話になりました）

ただ、冒頭でも触れましたがTigの存在を知りつつも **「面倒そう」「とっつきづらい」「インストールしたけどよく分からない」** といった理由で、Tigの便利さを体感せずに避けてしまう開発者が身近に多かったため、あえてこのような入門記事を書いてみました。

この目論見が成功するかは分かりませんが、 一人でも多くの開発者がTigライフを楽しめれば幸いです。