DEV Community

Discussion on: Git FAQs I Encounter Regularly

Collapse
 
aergonaut profile image
Chris Fung

For #2, another option is git checkout -- <paths>. This will replace the contents of all <paths> with whatever is in the Git index at those paths. If you have not staged anything for commit, then this will replace the files with the contents from the most recent commit in your current branch.

For #3, as always when erasing commits, be careful that the commit you are about to erase has never left your local machine! If it has, then it's possible someone else has based work off the commit and erasing it would cause a conflict on their machine.

If you have only one commit that you want to erase, you can easily reset to the previous commit using the shorthand notation HEAD^. Here HEAD references the current commit, and ^ means "the first parent of this commit". This is more convenient if you only want to step back by one commit as you don't need to look up the exact SHAs.

You can also use symbolic notation if you want to step more than one commit back. Instead of ^ use ~n where n is the number of steps to take. HEAD~1 means "one step back from HEAD", while HEAD~3 means "three steps back from HEAD". This is also useful if you know you want to erase a certain number of commits, as you can just tell Git to walk backwards a certain number of steps instead of needing to look up the SHAs.

Collapse
 
edisonywh profile image
Edison Yap

Great tips here, to add on to top #3, instead of having to checkout into another new branch to retain your change, you can actually just do

git reset --soft head~1 (~1 being one commit, so obviously this varies)

Basically, --hard reverts your commits and discards your change, but whereas --soft reverts your commits but retains your change, so you can just checkout to another branch and commit there.

Collapse
 
3sanket3 profile image
Sanket Patel

That seems nicer approach. Will give a try. Thanks