git commit する前にコンフリクトの残りがないかチェックする


git でコンフリクトが起きて解消したつもりが、じつは「<<<<<<<」などが残っていてもコミットすることができます。HTMLなどだとエラーも発生しないので、気づいたら「git push origin master」していた...なんてことにならないように git commit する前にチェックするようにしてみました。

実行した結果

実際のソース

  • .git/hooks/pre-commit.sample というファイルが実際には置いてあります。この中身は、すごく参考になります
  • .git/hooks/pre-commit として下記のソースを置くとチェックしてくれて全て解消しないと、コミットできません。
.git/hooks/pre-commit
#!/bin/sh

if git rev-parse --verify HEAD >/dev/null 2>&1
then
    against=HEAD
else
    against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi

# コンフリクトしたファイルを探す
# 該当のファイルは、赤文字で表示(Macで確認)
for FILE in `git diff-index --name-status $against | grep -E '\.*$' | cut -c3-`; do
    grep_result=`grep -E '(<<<<<<<|>>>>>>>)' $FILE | grep -v '^$'`
    if [ -n "${grep_result}" ]
    then
        echo $'\e[1;31m'$FILE$'\e[m' ' <- コンフリクトの対応がのこっています'
        echo $grep_result
        exit 1
    fi
done