エイリアスと無料GUIツールで脱GitKraken

## GitKrakenとは
gitの管理をGUIで見やすく操作するためのツールです。
2021年7月現在、publicなリポジトリは0円、privateになると有料です。
https://www.gitkraken.com/

## なぜ脱GitKraken?
弊社では入社と同時にGitKrakenの有料プランを提供していましたが、使わない人には何かしら仕事で使えるアイテムを購入するための補助が出ることに。

GitKrakenは素晴らしいツールですが、下記を理由に使用しないことにしました。

### 活用しきれていない
大体pushとツリーを見ることにしか使用しておらず、
他はコマンドで行っておりツールの旨味を感じていませんでした。
### 他のことにお金を使える
お金を払わないとやりたいことができないわけではない

## 脱するための前提
**peco**、**tig**、**Visual Studio Code**を導入します。
以下参考記事
peco - コマンド履歴が見れたり、gitコマンドと組み合わせてインクリメンタルサーチができるようになります
https://qiita.com/sukebeeeeei/items/9b815e56a173a281f42f
tig - gitクライアントツールです
https://qiita.com/vivid_muimui/items/7e7a740e6537749de0c0

これらのツールとエイリアスをうまく使ってやっていこうという話です。

## 本題
GitKrakenなしでいかにgitを使いやすくするか！
ということで基本エイリアスをはってコマンドは手軽に。
またツリーを見た方が分かりやすい動作についてはtigやGUIツールを使うことにしました。

### git status
エイリアスをはり`gs`でみれるようにしています。

```
alias gs='git status'
```
もし中身が見たいときはVScodeの拡張、**Git Lens**、もしくは**tig**で閲覧できます。

### git add / git commit
addは一度にstagingした後、git statusが見れるようにしています。
（変更がある全ファイルを確認してから一度にしてしまうことが多い）

```
function gas() {
  git add -A;
  git status;
}

alias gas='gas'
```
commitはこんな感じ

```
// gcm 'コミットメッセージ'
alias gcm='git commit -m'

// 直前のメッセージを書き換える
// gcmfix '修正' のように使う
alias gcmfix='git commit --amend -m'
```

### git push
HEADをpushするようにしています（基本これしか使ってない）
GitKrakenでpushボタンをクリックするのとそこまで手間が変わらなくなったはず

```
alias gpu='git push -u origin HEAD'
alias gpo='git push origin HEAD'
```

### git checkout
ここでpecoの便利さが発揮されました。
`gc`でローカルブランチを検索、Enterでチェックアウトできます。
Git Krakenだと一覧から選択、ダブルクリックという流れですが、それ以上の利便性があると感じています！
こちらの記事から拝借しました。
https://qiita.com/kazuooooo/items/92bf3146cafeb8fd8673
https://qiita.com/ymm1x/items/a735e82244a877ac4d23

```
// ローカル
alias gc='git branch | peco | xargs git checkout'

//リモートブランチを含めたい場合
function gcop() {
  git branch -a --sort=-authordate |
  grep -v -e '->' -e '*' |
  perl -pe 's/^\h+//g' |
  perl -pe 's#^remotes/origin/###' |
  perl -nle 'print if !$c{$_}++' |
  peco |
  xargs git checkout
}

alias gcop='gcop'
```

### git stash
pop時はpecoを利用し、listの中から検索、Enterで実行できるようにしています。
こちらも下記記事を参考にさせていただきました。
https://qiita.com/kazuooooo/items/92bf3146cafeb8fd8673

```
alias gss='git stash save'![Something went wrong]()

alias gsp="git stash list | peco | awk -F '{|}' '{print $2}' | git stash pop"
```

### きれいなツリーがみたい！
#### tig
tigを使用することで簡単に綺麗なツリーを確認できます。
https://qiita.com/vivid_muimui/items/7e7a740e6537749de0c0
またcherry-pickなどもGit Kraken同様、該当のcommitを選択して行うことが可能です。
![スクリーンショット 2021-07-14 23.03.39のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358229/d1096ba6-89ec-09bb-c360-c859ebff2de8.png)


#### Git Graph
VScodeのプラグインで、Krakenさんと同じGUIツールです。
差分もVScodeで確認することができるため、視認性は申し分ないです。
またcherry pick、checkout、revertなど基本的な操作はここで行うことができました。
![スクリーンショット 2021-07-07 16.57.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358229/358bb117-d806-fb76-aa74-bc5b1a73bd3d.png)


## ここでGit Krakenの強みを考えてみる
そもそもGitKrakenって何が便利なのだろうか
### さくっとsquashが行える
GUIでsquashが簡単に行えるのは便利そうです。
Git Graphやtigだと簡単にはいかないようです。
### GUIツールの中では見た目がかっこいい
まんまです。見た目良いなーと。
でもそれで言うとtigの見た目もなかなか好きです。
### Git操作のほぼ全てを可能にしている
tigだとデフォルトではpushができない...など。
しかしGitKrakenならリポジトリのcloneから全ての操作をまかなえます。
一部できないこともあるようですが、基本行わない操作なので問題なし。
### その他様々な機能を備えている
「１つ前のGit操作を戻す」なんかはとても便利。
また料金表をみると他サービスとの連携なども有料プランで使えるみたいですね。
https://www.gitkraken.com/pricing

## 結論
私のように元々GUIツールとコマンドを併用している方、
もしくは普段特殊なことをしない方はGitKrakenの機能を持て余してしまうと感じました。
また解約後、コマンドとtig・Git Graphで今まで通り（以上？）の操作感を得られています。
というわけで脱GitKrakenは**成功**に終わりました。
ありがたき補助で何を買うか考えたいと思います。