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