'fixup' and 'rebase' for neat commits
Description
Sometimes we are working on a branch and we want a specific change in a specific commit that is not the last one, we could use fixup
to have our commits neat and to avoid doing a disaster with them.
Example
Imagine that we have a commit story like this:
commit 30e9b16e098315e459f46313c099317ab74decbd
Author: Sam Belmor <sambelmor@gmail.com>
Date: Tue Sep 28 18:57:32 2021 -0500
Add the MVC architecture
commit e13f8600584a8b304c25d08bbaa13d1999f51569
Author: Sam Belmor <sambelmor@gmail.com>
Date: Tue Sep 28 18:51:06 2021 -0500
Add koa/node setup
commit b4b7ee003d554fa7eaa967bcf236c9a02c5a7249
Author: Yasser Batas <yassk8@gmail.com>
Date: Thu Jul 15 07:11:39 2021 -0500
Initial commit
If we do some changes related to the koa/node setup
and we want those changes in the second commit e13f8600584a8b304c25d08bbaa13d1999f51569
, to avoid doing another commit we could do the following:
1. Add your changes
git add .
2. Copy the commit key where you want your changes
For this example we want the changes in the commit Add koa/node setup
with the key e13f8600584a8b304c25d08bbaa13d1999f51569
.
git commit --fixup e13f8600584a8b304c25d08bbaa13d1999f51569
3. At this point your changes were added, if you put:
git log
You will see something like this:
commit 3ef0a9c5a3a67b5dff7a7f6374921babf7a40c12 (HEAD -> feature/#2-knex-setup)
Author: Sam Belmor <sambelmor@gmail.com>
Date: Thu Oct 21 11:50:35 2021 -0500
fixup! Add koa/node setup
commit 30e9b16e098315e459f46313c099317ab74decbd
Author: Sam Belmor <sambelmor@gmail.com>
Date: Tue Sep 28 18:57:32 2021 -0500
Add the MVC architecture
commit e13f8600584a8b304c25d08bbaa13d1999f51569
Author: Sam Belmor <sambelmor@gmail.com>
Date: Tue Sep 28 18:51:06 2021 -0500
Add koa/node setup
commit b4b7ee003d554fa7eaa967bcf236c9a02c5a7249
Author: Yasser Batas <yassk8@gmail.com>
Date: Thu Jul 15 07:11:39 2021 -0500
Initial commit
As you can see a new commit was added, with the difference that you'll see the fixup!
word before the commit's description
fixup! Add koa/node setup
At this point, you should check if this is the commit where you want your changes. If this is correct go-ahead to the next point if you made a mistake you could do:
git reset HEAD~
And start again. Be sure to copy the correct commit's key.
4. Use squash to join your commits
Now you're ready to squash your new changes with your old commit.
1. First, you need to copy the previous commit's key from the one that I want to do the squash
. For this example the key that I need is this key b4b7ee003d554fa7eaa967bcf236c9a02c5a7249
from this commit Initial commit
2. So you should put the following:
git rebase -i --autosquash b4b7ee003d554fa7eaa967bcf236c9a02c5a7249
5. Confirm your changes
When you do the previous command a text editor will open (nano, vim, etc), and you will see something like this:
pick e13f860 Add koa/node setup
fixup 3ef0a9c fixup! Add koa/node setup
pick 30e9b16 Add the MVC architecture
When you close that window, your changes will be saved and now you'll have the new changes in the corresponding commit.