Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@27ma4_ryusei

うっかり屋さんのためのgit stash

うっかりミスを技術で防止

僕は普段よくうっかりミスをします。
CLI上での時の流れは無慈悲なもので、エンター1つでけっこう面倒なことになったりします。
そんな無慈悲な時間を少しでも減らすために少し苦労をしてみましょう。

git stashを慎重に

git stashコマンド使ってますか?
僕はこのコマンドでよく痛い思いをしました。

git stash pop ←これを連続で打ってCONFLICT起こしたりもしました。とても面倒です。

ですので今回はgit stashをもっと対話的に実行しようということでShellでコマンドを自作しました。
普段はGoのcobraなどを使っているのでShellには馴染みがなかったので今回色々勉強になりました。

[2020/09/05更新] homebrewでコマンドを配布中

homebrewを通してこのコマンドを配布しておりますので、よろしければ使ってみてください。

対話型コマンドのキーとなるread

うっかり屋さんはひとりで突っ走りがちですので、「〜だけど大丈夫?」みたいなワンクッションあると安心します。
それを実現するためにread構文を使って対話型のコマンドを実現できます。
例えば下は、stashしたブランチと現在いるブランチが違った時に確認をする処理です。

if [ $CURRENT_BRANCH != $TARGET_BRANCH ]; then
          echo "----------------------------------"
          echo "取り出そうとしているstashは現在のブランチの作業ではないです。取り出しますか?[y/N]"
          read IS_POP
          case $IS_POP in
              [yY])
                  echo "-------------------------------"
                  echo "選択したstashを残しますか? [y/N]"
                  read IS_REMAIN_STASH
                  case $IS_REMAIN_STASH in
                      [yY]) eval git stash apply ${TARGET_STASH%%:*};;
                      [nN]) eval git stash pop ${TARGET_STASH%%:*};;
                  esac
                  ;;
              [nN]) exit;;
          esac

read [変数名]でユーザからの入力を受け取り、その情報を元にcaseで分岐しています。

入力の手間を少しでも省いてタイポを防止する

うっかり屋さんは誰から見られているわけでもないのにすごく焦ります。
異常なほどタイポします。
ですので、例えば
git stash save "hogehoge"
と打つ場合は"とか高確率でタイポします。
そんなタイポを減らすために以下のような処理を書くことが出来ます。

if [ "$1" = "save" ]; then
      echo "-----------------------------"
      echo "Stash内容の説明を入力"
      read STASH_MESSAGE

      eval git stash save "$STASH_MESSAGE"

こんな感じで引数に何かを渡すだけでメッセージの部分を形成して良い感じのコマンドに直してくれる。
やっていることは大したことありませんが、かなと英字を頻繁に入れ替える必要もなくなるので少し便利です。

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
27ma4_ryusei
社会人3年目です(`・ω・´)

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?