Why does git allow you to commit to a detached head? Is there any pre commit hook that can disable it? What is the purpose? Many new developers do this and I'd like to find a way to disable it.
This can be only prevented by a local git pre-commit
hook, so developers would need to create it. Add the your-local-project/.git/hooks/pre-commit
file with the following contents:
#!/bin/sh
if ! git symbolic-ref HEAD &> /dev/null; then
echo "You are in a detached head state! Commit has been blocked. (Use --no-verify to bypass this check.)"
exit 1
fi
Make sure it's executable. Credits go to svachalek
Why should git prevent commiting in detached HEAD? Detached HEAD means only that there is no pointer to the repository state you are working on. It assumes that you know what you are doing.
I would rather investigate why many developers in your team enter this state? Maybe they apply some weird worklow?
git checkout $commit-sha1
can lead to a detached HEAD. So does git checkout FETCH_HEAD
. A detached HEAD could be considered as a branch without a name. If it does not confuse you, you could just ignore it. As @fracz said, you could prevent it by pre-commit
. You could also make it a branch with a name with git checkout -b some_name
. A post-checkout
hook may help you to detect the detached HEAD state and make it a branch.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With