When I start a new project or get setup to contribute to an existing one, the first thing on my mind is: show me the Dockerfile.
Why? One of the main purposes of Docker is packaging an application with its dependencies into a portable image that can be run on most any host, thus simplifying deployments. Yet when it comes to development of these applications, Docker is often not part of the picture.
I like to keep my git commit history clean and concise. If each commit is a clean package of atomic changes, a larger pull request is easier to review commit by commit. Conversely, if you have a history littered with fixes and changes, reviewing each commit doesn’t work.
git rebase -i is a great way to re-order commits, drop commits, or merge commits together with squash or fixup. The only difference is that fixup discards the commit message whereas squash appends it.