Search code examples
gitversion-controlgit-taggit-bisect

Is it possible to mark a git commit as work-in-progress?


I'm aware that there are various opinions and philosophies about whether or not all commits on the master branch should leave the project in a valid, working state. I'm not asking for these opinions.

For the sake of argument, let's assume that somewhere in the master branch history I identified a commit that is actually a work-in-progress commit, i.e. it doesn't build or it breaks other things. Since we are talking about history in the master branch, rebasing or amending (or anything that actually changes the commit) is not an option.

To warn other developers and to make it easy for an automated git bisect script to skip this commit, I want to somehow mark this commit as work-in-progress. How do I do this?

I have thought about using git tag, but since tags must be unique you would end up using tags like wip/<some_unique_id> which is an ugly hack in my opinion. Also, conceptually we do not want to treat this commit as a tagged commit, i.e. we probably never want to check it out, we may not want it to appear in the list of tagged commit points etc.


Solution

  • Use git notes to add notes to certain commits without touching their commit hash.

    If you want to annotate HEAD~5 with a note, do

    git notes add HEAD~5 -m "better don't use this commit. It breaks the build"
    

    Publish your notes with

    git push origin refs/notes/*
    

    Have a read of ProGit for more details.