In this chapter we shall learn about below topics:
git revert
git bisect
git grep
git reset
git revert
“git revert” is similar to “git reset”. But we use git revert, when the changes are already committed to remote repository.
Suppose you have committed 3 times and you need to change something in the third last commit.
Now in the usual flow, when you fix the changes and commit, it will usually create a new index. If you dont want that, you can use “git revert” command.
Example:
git revert HEAD~2
The above command specifies to revert the changes specified by 3rd last commit in the head and create a new commit with reverted changes.
git bisect
Suppose you have done multiple commits. And from one commit, there is an issue introduced.
One way to find the issue is to roll back and then checkout from which commit the issue is introduced.
For that you need to apply divide and conquer technique. So “git bisect” does the exactly that.
“git bisect” is used to perform binary search to find the commit that introduced a bug.
You will start the bisecting by using “git bisect start” command.
Now you can tell git regarding the bad commit reference as “git bisect bad HEAD”
And then you need to give the good commit as “git bisect good 78rehjsd789jjh3289”
Now git will give you the number of revisions.
Then again you perform the same above steps, till you find the code of a bad commit.
To stop bisecting use “git bisect reset” command.
git grep
If you are aware of linux grep command, then there is no difference between “grep” and “git grep”.
The only difference is “git grep” fill search only files tracked by git.
Normal grep will search all the files in that directory.
Example:
“git grep foo”
git reset
You are working on a feature and suppose that feature got changed before the commit happened and now you need to revert all the changes.
Instead of pulling new view, you can revert back the changes made to the files by using “git reset” command.
There are 2 reset command.
Soft reset and hard reset.
For hard reset use “git reset –hard HEAD” command. It will resets the index and working tree. So the changes to tracked files in the working tree since commit are discarded.
For soft reset use “git reset –soft HEAD” command. It will not reset the index, but changes all the files to “Changes to be committed”.