Gitのalias設定について以前記載しました。
↑は git ch
のようにgit
コマンドに対してaliasを設定するものでしたが、
今回は「シェルに対して設定する事でgit関連の操作を便利にする」というものになります!
検証した環境
1 | git | 2.33.0 |
シェルに対してaliasを設定する方法
Macのデフォルトシェルがbashからzshに変更になったのが2019年なので、
zshを使われている人が多いだろう。という想定の元zshでの設定方法を記載します。
zshの設定ファイルは ~/.zshrc というものになります。
vimで編集する場合は↓
$ vim ~/.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
)
↑の動画では
- test1.txtのみaddした状態に
- 以下2つのファイルが
wipe
によってなかった事になる- stageにaddしていないtest2.txt
- Untrackedのtest3.txt
という流れになります。
例えば実装の検証を行い「変更を加えたファイルをUntrackedのファイルも含めてなかった事にしたい」
そんな時に実行する事でそれらの変更履歴がまっ更きれいになります。
注意点として、
Untrackedのファイルをなかった事にする git clean -fd
はまだgitで管理していないファイルを削除するのと同じ動きになります!
分からず使ってしまうと戻す事も出来ず、
「あーー。。😱😱😱」となるので内容を理解した上で使って下さい。
mkpr
alias mkpr="git push origin HEAD && gh pr create && gh pr view --web"
GitHub限定。
- 現在のブランチをpush
gh
コマンドを利用してPRを作成- 最後にブラウザで該当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を表示
となります!