#背景
業務中でgit-bashを使っているのですが、git-flow運用をしているせいで予測変換も上手く使えずイライラしてました。
おかげでfeatureをタイプする速度は職人技になりつつあります。
工数削減として対策をした結果をお話します。
#はじめに
$ git checkout -
↑のコマンドで直前のブランチへチェックアウト出来る事は知っていましたか?
私はこれを知った時感動しました。とても重宝しています。
ですが、いくつかのタスクを並行してると直前のブランチが何だったか思い出すのも大変ですよね。
#直前のブランチ何使ってたっけ?
$ git --no-pager reflog | awk '$3 == "checkout:" && /moving from/ {print $8}' | uniq | head | nl
このコマンドは直近checkoutをしたブランチの履歴を頭から10件表示してくれます。
直近のブランチが表示されるので、常に必要なやつだけが表示されて非常に便利ですよね。
私はこれを__brlog__というコマンドで呼び出せるようにしました。
これで前章の問題は解決されました。
最後のnlで行番号を表示した理由を次章でお話します。
#指定行のブランチ名をクリップボードにコピーしよう
指定した行番号のブランチをクリップボードにコピー出来れば、pullやcherry-pickにも使えて便利だと考えました。
そこで私はshellを書いて、__brcopy__というコマンドに登録しました。
#!/bin/bash
#validate
if [ $# != 1 ]; then
echo 'You should input argmen'
exit 1
fi
#main
ESC=$(printf '\033')
# ↓ head -n $1 | tail -n 1で特定行から一行だけ抽出してます。
OUT=`git --no-pager reflog | awk '$3 == "checkout:" && /moving from/ {print $8}' | uniq | head -n $1 | tail -n 1`
printf "${ESC}[32m%s${ESC}[m\n" "coping '$OUT' to clipboard"
powershell set-clipboard $OUT #これでクリップボードに任意の文字がコピーできます(Windows専用)
以下が実際に使用した場合の挙動です。
$ brlog
1 release/patch_20200530
2 feature/develop_test3-name
3 feature/develop_test2-name
4 feature/develop_test1-name
5 develop
$ brcopy 4
coping 'feature/develop_test1-name' to clipboard
上記のコマンドでクリップボードへのコピーが完了してますので、checkoutするなりpullするなり好きに使ってください!
#さいごに
皆さんはこの問題ってどのように対応しているのでしょうか?
何か対応方法がありましたらコメントで教えていただけると嬉しいです:)
(参考資料があったのですが、履歴をたどっても見つからなかったため、見つかり次第貼ります)