⬆️

コミットし忘れて、うっかりpushしてしまうのを防ぐ

2024/03/07に公開

背景

https://zenn.dev/ktansai/articles/94bba4b0d5224f

この記事のように、pre-pushの時に、lintのチェック処理を入れるようにして使っていると、
ローカルでlinterが修正してくれるんですが、その修正はコミットされてないので、未コミットのまま、すり抜けてpushしてしまうという問題がありました。

なので、作業中のファイルがあった場合は、pushを続行するかを聞いてくるものを、pre-pushに実装しようと思いました。

作ったもの

pre-push
#!/bin/sh

# ステージングされていない変更を確認
if git status --porcelain | grep '^??\|^ M\|^MM\|^AM\|^A '; then
    echo "ステージングされていない変更があります。プッシュを続行しますか? [y/n]" > /dev/tty
    read -r ans < /dev/tty
    if [ "$ans" != "y" ]; then
        echo "プッシュを中止しました。" > /dev/tty
        exit 1
    fi
fi

これで、pushする際に、コミット忘れに気づきやすくなりました。

補足

linterの実行と組み合わせるとpre-pushはこんな感じになります。

pre-push
#!/bin/sh

# ステージングされていない変更を確認
if git status --porcelain | grep '^??\|^ M\|^MM\|^AM\|^A '; then
    echo "ステージングされていない変更があります。プッシュを続行しますか? [y/n]" > /dev/tty
    read -r ans < /dev/tty
    if [ "$ans" != "y" ]; then
        echo "プッシュを中止しました。" > /dev/tty
        exit 1
    fi
fi

# ktlint を実行してコードスタイルの問題をチェック
if ! ./gradlew ktlint; then
  # 問題が見つかった場合、自動修正を試みる
  ./gradlew ktlintFormat
  exit 1
fi

exit 0

Discussion