Git大好き人間のおすすめgit関係のshのalias設定

2022.06.25
Git大好き人間のおすすめgit関係のshのalias設定

Gitのalias設定について以前記載しました。


↑は git chのようにgitコマンドに対してaliasを設定するものでしたが、

今回は「シェルに対して設定する事でgit関連の操作を便利にする」というものになります!

検証した環境

1 git 2.33.0



シェルに対してaliasを設定する方法

Macのデフォルトシェルがbashからzshに変更になったのが2019年なので、

zshを使われている人が多いだろう。という想定の元zshでの設定方法を記載します。




zshの設定ファイルは ~/.zshrc というものになります。



vimで編集する場合は↓

$ vim ~/.zshrc



このファイルに下記のように記載してターミナルを再起動

~/.zshrc
alias g="git"

すると、

再度ターミナルを開くとaliasで設定したgというコマンドが利用出来るようになっています!

# 以下は git --version と同じ意味になる
$ g --version
git version 2.36.1



Git関係のおすすめシェル設定

私が実際に利用している12個のaliasをご紹介します!

g

alias g="git"

gitコマンドを短縮出来るようにしています。

これによって以前のgitのaliasが更に短く打てるようになります。



例えば

# ブランチの移動
$ git checkout xxx

# ↓ のように

# shのaliasで git → g
# gitのaliasで checkout → ch
$ g ch xxx
# 該当リポジトリのリモートリポジトリをブラウザで開く
$ git browse

# ↓ のように

# shのaliasで git → g
# gitのaliasで browse → see
$ g see

1文字にするだけで思ったよりも操作が速くなります!



gg

alias gg="git la"

gitのaliasに設定しているログを確認するためのコマンドgit laを呼び出します。

git laは内部的に以下のコマンドを実行します

$ git log --oneline --decorate --graph --branches --tags --remotes --all



使用頻度が非常に高いため、gを2回打ったら表示されるようにしています。



push

alias push="git push origin HEAD"

リモートに現在のブランチをpushします。



例えばmainブランチにいる場合

$ git push origin main

を行うのと同義になります。



リモートの名前はoriginを使う事が大半なのと、

pushを行う場合ほぼほぼ同じブランチ名で行う事が多いのでこのような設定にしています。



pull

alias pull="git pull -p"

--pruneオプションを設定したpull。


pushの対になる位置付けです!



wipe

alias wipe="git checkout . && git clean -fd"

使用する際には注意が必要!



以下の2つに該当するファイル群の変更履歴をなかった事にします。

(お掃除的な意味合いで `wipe` としています)

  • 既存ファイルで変更が加わっていてまだaddをしていないもの( git checkout .
  • Untrackedのファイル( git clean -fd


↑の動画では

  1. test1.txtのみaddした状態に
  2. 以下2つのファイルがwipeによってなかった事になる
    1. stageにaddしていないtest2.txt
    2. Untrackedのtest3.txt

という流れになります。




例えば実装の検証を行い「変更を加えたファイルをUntrackedのファイルも含めてなかった事にしたい」

そんな時に実行する事でそれらの変更履歴がまっ更きれいになります。




注意点として、

Untrackedのファイルをなかった事にする git clean -fd はまだgitで管理していないファイルを削除するのと同じ動きなります!



分からず使ってしまうと戻す事も出来ず、

「あーー。。😱😱😱」となるので内容を理解した上で使って下さい。



mkpr

alias mkpr="git push origin HEAD && gh pr create && gh pr view --web"

GitHub限定。

  1. 現在のブランチをpush
  2. ghコマンドを利用してPRを作成
  3. 最後にブラウザで該当PRのページを開く

という3つの事を行います。



2.のgh pr create

  • その場でPRタイトルを入力する
  • ブラウザを開いて編集

というのを選択出来るので、GitHubでPR作成する際には結構使い勝手が良いです!



t

alias t="tig"

gitコマンドとtigを合わせてgit関連の操作をする私。

そのため、tigもエイリアスを設定してすぐ起動出来るようにしています。



ta

alias ta="tig --all"

tigはオプションを設定しない場合、現在のブランチを起点にツリー表示されます。


「tigを使って全ブランチを見られるようにしたい」という場合は-allオプションを付ける必要があります。

使用する機会がなんだかんだであるためエイリアスに設定しています



gr

alias gr='anyframe-widget-cd-ghq-repository'

超便利!

インクリメントサーチでgitリポジトリを検索、該当フォルダにcd出来ます!




anyframeというzshのライブラリを利用していて、

内部的には ghq + cd + fzf(or peco) を利用しています。



gc

alias gc='anyframe-widget-checkout-git-branch'

インクリメントサーチでブランチの移動が出来ます!



これもanyframeというライブラリを使用。

gd

alias gd='delete-branch-incremental-search'

インクリメントサーチで選んだブランチを削除します。


#
# インクリメントサーチで選んだブランチを削除する
#
function delete-branch-incremental-search () {
  local SELECTED_BRANCH=$(git branch | fzf)
  # trim処理
  SELECTED_BRANCH=`echo "$SELECTED_BRANCH" | awk '{$1=$1};1'`
  # エスケープを押した場合や選択がなされていなく、SELECTED_BRANCHが空文字だった場合は即時returnする
  [ -z "$SELECTED_BRANCH" ] && return

  echo -n "delete ${SELECTED_BRANCH} branch ok?(y/N): "
  if read -q; then
    echo ""
    git branch -D $SELECTED_BRANCH
  else
    echo ""
  fi
}

pr

alias pr='gh pr list | fzf | awk '\''{$1=$1};1'\'' | sed -e '\''s/ .*//'\'' | {read n} && gh pr view $n -w'

インクリメントサーチでマージしていないPRを選択。選択したPRのページをブラウザで開きます





ワンラインで実現するためちょっと難しい事になっています 😅



やっている事を分解すると、

まずaliasに設定したいのでシングルクォーテーションをエスケープするため''\''としています。

参考: 【shell】エイリアスでシングルクォーテーションをエスケープする - dai-yamamoto

# シングルクォーテーションのエスケープをなくしたバージョン
$ gh pr list | fzf | awk '{$1=$1};1' | sed -e 's/ .*//' | {read n} && gh pr view $n -w

実行される手順は

  • gh pr listでオープンしているPRの一覧を表示
  • fzfに渡されるためインクリメントサーチ
    • 「1 サンプルのファイルを追加 feature/add_sample_txt OPEN」のような形の文字列をインクリメントサーチした結果として返す
  • awk '{$1=$1};1' | sed -e 's/ .*//'で頭のPR番号のみを取得
  • {read n}で変数nにPR番号を入れる
  • gh pr view <PR番号> -wが実行されブラウザで該当PRを表示

となります!

おすすめ