Useful git commmands

Commit logs

Now that I've started adding useful commit messages it's really use to make sense of my commits, more so when you use single line mode.

$ git log --oneline
3b04513 doc: add 'comment' tag to explain purpose of new templates
86cc454 feat: add tags to search
7286f90 feat: add twitter share button
24cfc85 feat: add todo
20d28d7 chore: remove manually generated lunr index

Started working on a feature/fix, but forgot you we're in master?

This assumes you haven't committed your changes...

git checkout -b new_branch
# add and commit your changes
git checkout master
# clean up any files you don't want to commit...

Sync your repo with the upstream

Setup a remote to the upstream.

git remote add upstream <path/to/upstream> # e.g.

Now sync!

git fetch upstream  # gets branches and commits from upstream
git checkout master # switch to your fork’s master branch (if you're not already there)
git merge upstream/master # sync
git push -u origin master # update remote repo of your fork

This can also be used to push your GitHub repos to other hosted SCM providers i.e. GitLab and BitBucket


You want to add repo Bar to your own repo Foo

git submodule add https://path/to/bar

To pull the changes in

git submodule init

To do this at clone time

git clone --recursive https://repo/contain/submodules

To refresh the submodule (assuming the dir name is the same as the submodule)

git submodule update --remote submodule_name

Possible gotcha if you refresh your submodule, you will need to commit new version into your own repo.


N.B. Tags when push to GitHub become releases!

to tag

git tag v1.0.0

to see what tag we're on

git tag

to push

git push --tags

to pull

git fetch --tags

Fixing "fatal: refusing to merge unrelated histories"

Warning: this is destructive, if you've got local uncommitted changes do not proceed!

$ git pull origin master
 * branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories
$ git fetch # may be superflurous
$ git reset --hard origin/master
$ git branch --set-upstream-to=origin/master master
Branch master set up to track remote branch master from origin.

Updating a branch with new changes from master

git checkout out_of_date_branch
git merge origin/master
git push origin out_of_date_branch