Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to go back to previous commit without losing last commit in Git?

Tags:

Here is what I want to do. I want to go back to 2 commits before, bring back the files that changed in that commit as a new commit maybe. But I do not want to lose my last commit. My last commit has some mistakes in the code but I would like to keep that one for now.

I read some documentation but none made it clear about what happens when you reset your head. Do you lose all the commits up until the one that you are resetting to (going backward) for example?

I am trying to understand how all this works but I am rather confused about git revert, reset and checkout commands.

I realize that I should have stashed the last commit instead of committing, but that is another story for now.

like image 870
yarun can Avatar asked Mar 10 '13 23:03

yarun can


People also ask

How do you go to previous commit in git without losing changes?

To jump back to a previous commit, first find the commit's hash using git log . This places you at commit 789abcd . You can now make new commits on top of this old commit without affecting the branch your head is on. Any changes can be made into a proper branch using either branch or checkout -b .

How do you go back to a previous commit on git?

To view the previous commits, use the git log –-oneline command. This provides the commit details.


2 Answers

If you want to go back, say 2 commits previous, you can just do git checkout HEAD~2. This will get you all as it was then. If you were on branch master, git checkout master will bring you back to the present. If, however, you want to keep the current state but start a new developemnt branch there, git checkout -b HEAD~2 will start a new branch there. In case you want to rewind master but not loose your current, unfinished/broken work, do

git branch wip           # New branch ends a current tip
git reset --hard HEAD~2  # Old branch rewound, get files from then
like image 107
vonbrand Avatar answered Oct 18 '22 16:10

vonbrand


revert makes a new commit that reverts changes made by an older commit. reset --hard changes the HEAD of the current branch to the specified commit. checkout switches the working copy to the specified branch or commit.

When you reset a branch to an older commit the newer commits are lost if they are not parts of other branches or ancestors of tags (they are still accessible via reflog though).

It is not clear what do you need to do, the most probable solutions are revert (to fully revert an older commit or series of commits) and rebase -i (to change an older commit or delete it from the history).

like image 35
wRAR Avatar answered Oct 18 '22 16:10

wRAR