Sometimes you need to script a git pull or you just want to completely reset a repo to HEAD. You there are loads of errors git can throw you in the process; such as error: unable to unlink old 'sites/default/settings.php' or error: The following untracked working tree files would be overwritten by checkout. Below is my take on the complete repository reset/clean/pull. Let me know in the comments if you've got a better way or find errors I'm missing.
# Find and record unwriteable files. NOWRITEFILES=$(find * ! -perm -u+w) # If there are unwriteable files if [ -n "$NOWRITEFILES" ]; then # Change permission to writeable chmod u+w $NOWRITEFILES fi # Clean the directory, but don't remove files specified in .gitignore. git clean -d -f # Reset the files git reset --hard HEAD # Get the changes git pull -f # If there were unwritable files if [ -n "$NOWRITEFILES" ]; then # Change permission back to unwritable chmod u-w $NOWRITEFILES fi