by Yoel Zeldes
How to avoid committing junk
In the development process, every developer writes stuff they don’t intend to commit and push to the remote server, things like debug prints. It happens to all of us every now and then: we forget to remove this temporary stuff before committing…
I solved this somewhat embarrassing situation using a simple approach: to every line I don’t want to accidentally commit, I add the magic characters sequence
xxx. This sequence can be in any part of the line: inside a comment, as a variable name, as a function name, you name it. A few usage examples:
- debug print:
print 'xxx reached this line'.
- variable used for debugging:
xxx_counter = 0.
- temporary function:
- TODO which must be attended before committing:
#TODO: don't forget to refactor this function xxx.
I implemented it using Git hooks. A hook is Git’s mechanism to fire off custom scripts when certain important actions occur. I used the pre-commit hook for validating the commit’s content.
Just create a file with the name
<YOUR-REPO-FOLDER>/.git/hooks/pre-commit with the following content:
marks=xxx,aaamarksRegex=`echo "($marks)" | sed -r 's/,/|/g'`marksMessage=`echo "$marks" | sed -r 's/,/ or /g'`if git diff --staged | egrep -q "^\+.*$marksRegex"; then echo "you forgot to remove a line containing $marksMessage!" echo "you can forcefully commit using \"commit -n\"" exit 1fi
markscontains the characters sequences which are not allowed to be committed.
git diff --stagedshows the changes which will be committed. The changes are passed to a regular expression that searches for any forbidden mark (using
- If a forbidden mark is found, the script exits with an error code, causing the commit to fail.
You want to bypass the hook? Execute
commit -n. This can be useful when you want to commit a binary file such as an image, which may contain a forbidden mark.
Any tricks you’ve implemented in your daily git workflow? Share your magic in the comments :)
This post was originally posted by me at www.anotherdatum.com.