Random git tips

This is going to be a small cheatsheet for random git commands that I find myself using most of the time. I am not going to get into the detail of any of the commands, if you would like to know more about any of them I would recommend going through git docs.

Saving the credentials

Sometimes you might get offended by the git prompting for the credentials again and again i.e. whenever you are pulling or pushing to the repository.

You can make git to stop asking for the credentials by either of the two ways (are there more?!) stated below

  • You may add an SSH key so that git will trust your PC and won’t ask for the credentials.
  • Use git credential helper:

git config credential.helper store

By using this command, it would cache the credentials and you won’t have to type them again. However, there might be some security concerns involved as this method stores them in plain text form. Have a look at this stackoverflow question for cache, wincred or osxkeychain and some alternative ways to use this or visit any of these

Rebasing the commits

git rebase is really powerful however I mostly find myself using it to rebase the commits in order to have a clean history. Here is how you rebase the commits i.e. merge the minor commits into one meaningful commit.

git rebase -i xxxxx

Where xxxxx is the hash of the commit immediately below the commit message till which you want to rebase the commits.

Renaming a branch

You can do the following to rename a branch

git branch -m old_branch_name new_branch_name

Also, if you want to rename the branch which you are currently on, you can do the following

git branch -m new_branch_name

Detached head problem

Sometimes you might get the problem of detached head. Most common cause for this to occur is, you checkout some specific commit and you start getting this detached head warning since you are not any branch. So how do you solve this?! You simply checkout the branch you were on. For example if you were doing some work upon the develop branch, when you started getting this warning, do

git checkout develop

If you forget about the branch you were on, you may simply checkout some (any) branch and the problem will be solved.

Checking the log

This one is pretty straight forward. You simply do:

git log

This will give you the detailed versoin. However, if you just want to have a look at the commit messages (and hashes), simply do the following:

git log --oneline

Resetting the changes

If you want to get all the staged changes back i.e. revert the git add ., you can do the following

git reset HEAD

If you want to revert all the changes since the last commit do the following

git reset --hard HEAD

followed by git clean -fd which will remove all the untracked files.

That SSL Verification Error

Sometimes, you might get SSL certificate error when cloning, pulling or pushing. The simplest way to make it go away is turn off the SSL verification i.e.

git config --global http.sslVerify false

Ignore the mode changes

Sometimes, for some odd reason, you might want to have different file modes on your local repository while having different file modes on the online version. Or you might have accidentally done chmod -R 777, like I did, which you do not want to push over to the server, you can simply ask git to ignore any kind of file mode changes:

git config core.fileMode false

Get the last commit with message regex

If you want to find some commit having a specific message you may use the git show :/regex command where regex is the regular expression of the message. For example, if you want to find the containing the word functionality, you may try the following:

git show :/fix

That’s about it. There is alot more to tell and there are many that I must have missed but stated are the ones that I find myself using most of the time. Do you have any of your own? feel free to share them by using the comments section below.

Subscribe yourself

You can subscribe to my blog posts by providing your email below. Your email will be kept safe and there will be no spamming ..Promise!