Skip to main content

Git magic - Pushing commits past your latest commit

It was my first full fledged feature and I was excited to know review comments from my manager. As much as the excitement, the learning that came with taking action on each comment was tremendous and I still can't describe how good I feel about it.

It's one of the times when I thought Git to be, "Wow! what an invention!!"

Although I had some code refactors, most of the comments were to split my single commit into several different commits for the sake of CI picking them up.

I thought, it's simple. I can amend my previous commit to remove files from existing commit and make them part of new commits. That's where trouble came up. I cannot remove a dependency and try to use it assuming I will have that as part of an upcoming commit. 

I definitely will have to go back in time to push a commit. At first I thought, I'll change my latest commit to be a dependency commit and create new commit for feature. However that involved a lot of manual work which would defeat the purpose of git itself in the first place. I had to come up with some different trick and as usual I went in search. My search phrases went as, 

  1. create commits in between
  2. push a commit before latest commit
  3. alter commit history to add commit
and so on. I gathered information from a number of stack overflow answers and finally came up with the following method. 

/**
 * 
@disclaimer
 * Please read this post fully before executing any command. My scenario might not be same as yours.
*/

So the steps involved are as follows,

  1. Execute git log
  2. Copy the commit hash after which you have to push a new commit
  3. Do a git checkout <copied_commit_hash>. For instance, git checkout 54ace3456ka235rtyc90
  4. After that, your head is pointing to the mentioned commit hash. 
  5. Now, make any change and do the required commit(s)
  6. Once you are done with all your commits, you will have to rebase with the below mentioned command,
    git rebase --onto HEAD <copied_commit_hash> <your_working_branch>

    For instance,
    git rebase --onto HEAD 54ace3456ka235rtyc90 working/my-new-feat
  7. Now, all the commits you made after the checkout will be showing past your top most commit. You could verify that by executing git log.
Tada! Although git would show exact time when each commit was made, (i.e) although chronologically your most recent commit is actually older, the commit history would show it exactly where you wanted it to show. I will further dig & write about pushing commits in between few of the commits sooner. I hope this helps you get through. 

Comments

  1. Git is like Time travel, whatever you want you can achieve. Thanks for sharing this blog..

    ReplyDelete

Post a Comment

Popular posts from this blog

Git worktree - guide to flexible folder structure

As always, let's start with a story why I have written this one down. I have been using git for almost 5 years now and in one of my work places I had to work on the same project but different features in parallel.  Switching between branches back and forth was a costly operation given that I didn't discover commit amend until recently. Even though I'd have discovered commit amend, I'd still have did this. Still did what? I can sense that question deep from your throats. So, whenever I am in a situation to work on multiple features or a feature and a bug fix, I'd have two clones of my repo each with different branches, Whenever a feature is merged or the fixes are merged, I'll delete the clone in my machine and branch in my origin (Gitlab / Github etc.,) Recently when I started writing these git articles, my manager suggested me to learn about Git Worktree and it'll be useful. And when I got free and good understanding of git commit, rebase and stuff, I decid...

npm-link | What NPM won't tell you!

Hello readers. So back with another easy yet unexplored feature of npm/yarn packages. We as frontend developers / SDK developers, have to deal with more than one repositories where we actually code contribute. Most SDK developers would know this already or they use the not-so-well documented 'npm link' command . /**  *  @disclaimer  * Please read this post fully before executing any command. My scenario might not be the same as yours.  * This article below uses a repo from my current workplace as an example which is open-source and does not violate the Cisco Confidentiality Policies */ To make this article easier to understand, some representations, Host - Package that needs another local package as part of its node modules. Let's assume the path to this package is  ~/Documents/Repos/demo-app Adhoc - Local package that is added into another package as a dependency. Let's assume the path to this package is  ~/Documents/Repos/semver-monorepo What is...

Building AI Apps - The basics you need to know

So you want to build an AI assistant? Maybe for customer support, maybe to search through documents, or maybe just to automate some boring stuff at work. You keep hearing words like "prompting", "RAG", "fine-tuning" thrown around in meetings. But what do they actually mean and which one do you need? Let me walk you through building a customer support AI assistant and show you how each of these concepts fits in. /**  * @disclaimer  * This is an educational post based on my learnings.  * I'll share actual experiments in future posts.  * Your use case might be different, so take what applies to you. */ What even is an LLM? Before we jump into the techniques, let's start with the basics. What is an LLM? Think of a Large Language Model (LLM) as someone who has read most of the internet but has zero memory of your conversation once it ends. Models like GPT-4, Claude, or Llama have been trained on massive amounts of text data. They know a lot...