ロゴテキスト ロゴ

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

    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を表示

    となります!

    プロフィールの背景画像 プロフィール画像
    Yuki Takara
    都内でフリーランスのエンジニアをやってます。フロントとアプリ開発メインに幅広くやってます。