I am a perfectionist.
I want to do everything perfectly, including writing commit messages in Git. Whenever I need to work on new features or fix bugs, I will create a new Git branch.
But, I can't avoid writing crapy and meaningless commit messages, especially when change a piece of code many times just because need to trigger the CI/CD pipelines.
Here is an example. I was working on a new feature of my project. I will create a new branch called feat/shinning. After working on the code, here are the commit logs when I type git log
:
commit c62397c29f5a299c814d7a138092fc345448dc05 (HEAD -> installer, origin/installer)
Author: swardana
Date: Wed Oct 11 21:22:14 2023 +0700
change styles
commit 4cbf76038d2d6685dacf0f253341d057ce348f50
Author: swardana
Date: Wed Oct 11 21:11:04 2023 +0700
fix typos
commit 8a5dcd63364263dfda0f2ec38a609c3de53c3c08
Author: swardana
Date: Thu Oct 5 21:04:05 2023 +0700
fix once again
commit 3abc24267d4130a9e9b58c051f406249054a906f (origin/main, main)
Author: swardana
Date: Tue Oct 3 22:12:13 2023 +0700
wrong class
Well, now you know how messy and meaningless my commit messages are. I could still merge the feat/shinning into the main, but I hate to see that on my logs history.
My goal is to combine all the commits into only one meaningful commit message.
There are multiple ways to achieve it. But, what works for me is this.
Step 1: Working with temporary branch
Rather than create a proper branch, I will create a temporary branch and I could put many crapy or silly commit messages there.
$ git checkout -b tmp/shinning
Step 2: Create proper branch
When done with the changes and ready to merge it, I will create a new branch from the commit in the main branch where the temporary branch is initiated.
$ git checkout main
$ git checkout -b feat/shinning ecddf76
Step 3: Merge the temporary branch to the real branch with --squash option
$ git merge --squash tmp/shinning
$ git commit # without -m
When enter the git commit
, without -m, an editor should be popup with all the commit logs, and files changed from the tmp/shinning. I will delete everything and write proper commit message.
Step 4: Merge the real branch to main
This is the last and final step, merge the real branch to the main.
$ git checkout main
$ git merge feat/shinning
Finally, it's done. With this, I could avoid any crapy and messy commit messages in my logs history.
This is inspired from the Stack Overflow answer which refer to this Github Wiki.
Top comments (0)