I am now over halfway on my 14 days of Git learning journey, so far, I have explored:
- What is version control?
- What is Git?
- Installing Git
- Basic Git commands to get started
- Inspect a Git repository
- Git File Operations
- Undoing commits and changes
Today I am going to look at rewriting Git history with a repository.
Rewriting history
If you have been following my journey learning Git, you will remember I look at how to undo commits and changes. I started to think about what if we wanted to change commits and rewrite the history a little?
There are a few options to do this. What I really want to look at is the --amend option that is available within the git commit command.
Change most recent Git commit message
There are times when you make a commit but realise you've written the wrong thing within the commit message. What do you do?This is one of the use cases for the --amend option.
If you issue git commit --amend -m "update the last commit message" it will amend the latest commit's message.
It's a great way of updating the last commit message if you've made a typo or missed out information you want to share with colleagues on the changes you've made.
Add extra changes to a commit
There are times when you complete a commit and then realise you want to add in one more change or you've forgotten something. And it would make more sense to add it into that commit rather than open another one.
This is another use case for the git commit --amend command.
Your workflow might be:
- Make changes to file 1 and file 2
- Add and commit those changes
- Realise you've forgotten to add a small change into file 1
- Make the additional change
- Use the command git commit --amend --no-edit
The additional option on the command, --no-edit takes that last change and puts it into the previous commit, without changing the message. For anyone else looking at this commit, it will look like it was done in one commit.
I would caution using this option and only using it on your own commits, don't confuse others by amending other people's commits.
Other ways to rewrite history
There are a couple of other commands that I'll be looking at later in my 14 days of Git learning journey that can help to rewrite history. Those commands are git rebase and git squash which will happen on Day 11 and Day 12 respectively.
14 days of Git
I've enjoyed diving into the additional options that are available with the git commit command and seeing how they can be used to help correct mistakes or rewrite history within my Git history. I look forward to exploring other commands that will also play a part in this later.
The next step in my 14 days of Git learning journey is to look at Git branches! Be sure to subscribe and join us for that step in the learning journey!
You can follow along here: https://github.com/weeyin83/14daysofgit
Top comments (3)
I find that edit functions can sometimes kick off conversations about transparency (like the one about Twitter), so firstly I like the cautionary note you add about only using
--no-edit
but also, what are your thoughts about the impact that this might have on code transparency for reviews and retros?With any edit function it's open to abuse. I think teams have to offer guidance on using these kind of commands, but more importantly build good trust and dynamics in the team.
Build a team that has good communication, open to ideas and avoid the blame culture.
Sounds like an idea for a future post, eh? Not that you're not busy enough, Sarah!
Maybe we can encourage some of our other people managers to weigh into something? Thinking about @sparklingrobots, @gcho, @egomesbrandao, off the top of my head, maybe also @cloudyadvice and @johnson_brad - anyone down?