Every now and then I find myself in a situation were I want to completly remove a rebase I just did. Maybe the application does not build anymore and I want another shoot at doing that rebase or squash
I’m here going to describe one way using git reflog and git reset
We start with the git reflog to find the place we want to return HEAD to.
git reflog
Below is an example of a reflog with a recent rebase (squash):
d21df0dd1 HEAD@{44}: rebase -i (squash): # Combination of 5 commits. 2b8f61237 HEAD@{45}: rebase -i (squash): # Combination of 4 commits. 049fdd05e HEAD@{46}: rebase -i (squash): # Combination of 3 commits. a3c59ce01 HEAD@{47}: rebase -i (squash): # Combination of 2 commits. 1029f7e05 HEAD@{48}: rebase -i (start): checkout HEAD~19 5d870be58 (origin/MyBranch) HEAD@{49}: commit: Moved border to window 5d870be58 (origin/MyBranch) HEAD@{50}: commit: Added submit btn 5d870be58 (origin/MyBranch) HEAD@{51}: commit: Removed CSS class one 56f962c08 HEAD@{52}: commit (merge): Fixed conflicts with main branch
We are here looking for the entry just before the ‘rebase -i (start)‘, which in this case is HEAD{49} (HEAD{48} is the ‘rebase -i (start)’ entry)
After this all we need to do to return HEAD to that place is to run
git reset --hard HEAD{49}
NOTE: THIS WILL REMOVE ALL CHANGES BEFORE HEAD{49}
Done!
Tested on Git v2.25.0 on a Windows 10
0 Comments.