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.
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.
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 wheren
is the number of steps to take.HEAD~1
means "one step back fromHEAD
", whileHEAD~3
means "three steps back fromHEAD
". 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.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.That seems nicer approach. Will give a try. Thanks