Gitクライアント「GitUp」をマウスフリーで使って爆速バージョン管理

## GitUpとは
[公式サイト](https://gitup.co/)曰く、
> Work quickly, safely, and without headaches.

とのことで、速さが売りなGitクライアントソフト。

GitUpの使い勝手などはこちらの記事でまとめていただいてるので参照ください。
[[macOS向け] gitのクライアントはGitUpがいいぞ。](https://qiita.com/JotaroS/items/5042d2944cf0573f133e)

## 是非マウスフリーで使っていただきたい
こちらのソフト、**起動から終了までマウスフリーで操作可能**なので、速さを追い求める方にはとにかくマウスフリーでの操作をオススメしたいです。
ただ、「そもそもどんな機能があるのよ？」「ショートカット覚えるのめんどい」という声が聞こえてきそうなので、各機能をマウスフリーで操作する手順をまとめました。

## インストール
[公式サイト](https://gitup.co/)からダウンロードできます。

なおhomebrewを使う場合は以下のコマンドでインストールできます。

```
brew cask install gitup
```
これでインストールすると後述の設定をしなくてもコマンドラインから起動できるようにしてくれるので楽ちんです。

## コマンドラインから起動できるようにする
メニューバーで[GitUp]->[Install Command Tool]とすると、対象のディレクトリで


```
$ gitup
```
とするだけでGitUpの起動が可能になります。

## 各画面の説明
主な画面は3つで、それぞれ以下のショートカットで切り替えられます。
``⌘ + 1`` ... マップ画面
``⌘ + 2`` ... コミット画面
``⌘ + 3`` ... スタッシュ画面
![views.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508321/63aa1605-ee98-4986-f7c8-1223252d45d9.gif)
以下各画面の操作について説明します。 
なお、今回は[Laravelのリポジトリ](https://github.com/laravel/laravel)を例にとって説明させていただいております。

### コミット画面
皆さんおなじみのコミット画面。

####コミットする
コミットしたいファイルを選択して``Enter``でステージングができます。（全ファイルをステージングしたい場合は``S``）
ステージングが完了したら``Tab``でフィールドを移動してコミットメッセージを記入、``Opt + Enter``でコミットできます。

以下はsampleブランチに対してコミットをしており、コミット後にマップ画面へ戻ると「sample commit」がコミットされていることが分かります。
![commit.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508321/c5a1b0da-156a-e630-f292-561b9234ed5c.gif)

#### アンステージング or 削除する
アンステージングをしたい時はステージングと同じくファイルを選択して``Enter``でOK。（全ファイルをアンステージングしたい場合は``U``）
変更をなかったことにしたい場合は``BackSpace``で。

#### 直前のコミットに追加する
``A``を押すとコミット時に

```
$ git commit --amend
```
を実行してくれるので、変更を直前のコミットに追加することができます。

### マップ画面
言わずもがなだと思いますが、非常にシンプルです。
コミットの閲覧、修正などはこちらの画面で行います。

#### ログを辿る
``矢印キー``でコミットログを辿り、``Space``でコミット詳細を確認できます。
前後のコミット詳細へ移動したい時は``⌘ + ↑(↓)``でOK。
マップ画面へ戻りたい時はもう一度``Space``か``Esc``で戻ります。
![map.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508321/85c3a5b9-e404-ebed-6c28-3b020fceedc0.gif)


#### ブランチを切る
コミットを選択して``B``でブランチを切ることができます。
チェックアウトしたい時はブランチ上で``Enter``。

#### プル & プッシュ
``⌘ + P``でプル、``⌘ + Shift + P``でプッシュすることができます。

#### 作業の取り消し
直前のコミットやコミットの修正を取り消したいときは``⌘ + Z``であっさりできてしまいます。
コミットに対して実行した場合は、

```
$ git reset --soft
```

を実行した時と同じく修正内容そのものは残ります。
間違ってリセットしてしまった時は``Shift + ⌘ + Z``で元に戻せるので安心。

#### コミットメッセージの修正
コミット上で``E``を押すとお手軽にコミットメッセージの修正ができます。
![rename.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508321/532947e4-7e9b-bd97-1a7e-3a7404cd4746.gif)


#### コミットのリライト
コミット後に内容を修正したいという時のために、リライト機能を使用できます。
修正したいコミット上で``W``でリライト画面へ遷移します。
エディターで内容を修正するとGitUpに変更が反映されるため、``Enter``した後コミットメッセージを入力して``Opt + Enter``で修正が反映されます。

以下では例として、README.mdで誤って入力したテキスト

```
Saaaaaample Message.
```
を

```
Sample Message.
```
に修正しています。
![rewrite.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508321/4a5a5415-d6e9-a5a2-c269-2000cb7d7db9.gif)
あまり使う機会はないかもしれませんが...


#### コミットのスプリット
コミット済みのファイル、もしくはその一部を別のコミットに分離させることができます。
``Opt + S``でスプリット画面が表示されます。
分離したいファイル（行）を``Enter``でNew Commitフィールドに移し、``Opt + Enter``で新旧コミットメッセージをそれぞれ記述してもう一度``Opt + Enter``で完了です。

以下では例として

```
README.md
sample.txt
sample2.txt
sample3.txt
```
に変更を加えたコミットをREADME.mdとそれ以外に分離しています。
![split.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508321/abd5651e-801c-1349-41f7-6dd549cc32dd.gif)
こちらも使用頻度は低そうですが、覚えておくと便利かもしれません。

#### 検索
``⌘ + F``で検索フィールドを表示し、ブランチ、タグ、コミットを検索することができます。
検索は以下の構文に従って行ってください。（詳細は[公式ドキュメント](https://github.com/git-up/GitUp/wiki/Using-GitUp-Search)にて。）

```
指定の文字列を含む
bob*  // bob, bobby, etc...

文検索
"alice beats bob"

AND検索(どちらも含まれる)
alice bob もしくは　alice AND bob  // ANDは大文字

OR検索(どちかが含まれる)
alice OR bob  // ORは大文字

NOT検索(前者を含むが後者を含まない)
alice NOT bob  // NOTは大文字
```

####その他補助機能
デフォルトだと選択しているコミットのみ吹き出しで情報が表示されるのですが、``⌘ + D``でコミット一覧がニュッと出てきてくれます。
（↓は画像です。見つめても何も起こりません。）
![commit_list.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508321/903f2235-75d2-657f-6fa8-b480a565055e.png)

同様に、Reflogは``⌘ + R``、タグ一覧は``⌘ + T``、スナップショットは``⌘ + S``で参照できます。

### スタッシュ画面
``S``で未ステージングファイルをスタッシュすることができます。
![stash.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508321/588313ff-607a-e1de-1bf1-68f580f393d4.gif)
スタッシュを適用したいときは``Enter``を、
破棄する場合は``BackSpace``で実行できます。
こちらも間違って破棄してしまった場合は``⌘ + Z``で元に戻すことができるのでご安心を。


## 多分これが一番速いと思います
他のGitクライアントに比べて多機能だったりデザインがお洒落だったりの特徴はありませんが、まさにシンプルイズベストなソフトです。
GitUp触り始めて日が浅い & 他のクライアントソフトと比較していないので根拠は皆無ですが、速さに関していえばGitUpが一番なのでは？

見ているだけでは気持ち良さが伝わらないので、是非とも一度自分で動かしてみてください。
端折った部分も多いのでより詳しく知りたい方は[公式ドキュメント](https://github.com/git-up/GitUp/wiki)をご覧いただけると。

また、「こんな機能もあるよー」等ありましたらコメントいただけると嬉しいです。:pray:

## ショートカットまとめ
こちらの記事で紹介したショートカットまとめたので参考にどうぞ。

### 画面切り替え
|動作|ショートカット|
|:----|:----|
|マップ画面を表示|⌘ + 1|
|コミット画面を表示|⌘ + 2|
|スタッシュ画面を表示|⌘ + 3|

### マップ画面
|動作|ショートカット|
|:----|:----|
|コミットログを辿る|↑(↓) <br>※ マージ済みのコミットも参照したい場合　 alt + ↑(↓)|
|チェックアウト|ブランチ上で Enter|
|ブランチを切る|B|
|プル|⌘ + P|
|プッシュ|⌘ + Shift + P|
|コミットメッセージ編集|E|
|リライト|W|
|スプリット|Opt + S|
|直前の作業取り消し|⌘ + Z|
|取り消しの取り消し|⌘ + Shift + Z|
|コミット詳細|対象のコミット上で Space|
|検索|⌘ + F|
|スナップショットを表示|⌘ + D| 
|Reflogを表示|⌘ + R| 
|タグ一覧を表示|⌘ + T| 
|コミット一覧を表示|⌘ + S| 
|画面端へ移動|⌘ + ↑ (↓,←,→)|

### コミット詳細
|動作|ショートカット|
|:----|:----|
|前後のコミットへ移動|⌘ + ↑(↓)|
|詳細画面を閉じる|Space or Esc|

### コミット画面
|動作|ショートカット|
|:----|:----|
|各フィールドを移動|Tab|
|ステージング or アンステージング|Enter|
|変更を破棄 (Discard)|BackSpace|
|全てのファイルをステージング|S|
|全てのファイルをアンステージング|U|
|直前のコミットに追加|A|
|エディタで開く|O|
|コミット|Opt + Enter|

### スタッシュ画面
|動作|ショートカット|
|:----|:----|
|スタッシュ作成|S|
|スタッシュを適用|Enter|
|スタッシュを削除|BackSpace|