Each step in the narrative is well documented, unambiguous and easy to follow. - let each commit tell it's own story, as part of the bigger narrative - use good commit messages - make the diff read easy => group related work together, but not too much
* https://alistapart.com/article/the-art-of-the-commit Write more than one line for all non-trivial commits Give a brief description of motivation for the change Explain the solution, only in as much detail as a capable reader would need to understand the solution. Provide links to tickets in JIRA, github issues, etc.
intent, just like function names and test names - Changesets are implementation Without requirements and intent, it is very unlikely that the reader will have an accurate understanding of your intent, let alone find flaws in the implementation
that literary authors write good prose. Create a quick outline and keep editing until it reads well. For code stored in source control this means: - separate concerns into their own commits: - service tasks like fix whitespace, style compliance, etc - dependency management - adding missing tests - refactoring, probably each step in it's own commit - bug fixes - features - remove unused code - remove unused dependencies - Tell a story with your code (order is everything!) => rewrite history
fetch upstream git rebase upstream/master https://www.atlassian.com/git/tutorials/merging-vs-rebasing Nobody wants to read several conversations mixed in with each other