Thursday, June 5, 2014

GIT: common commands

Synch Commands

CLONE (copy) remote REPO to my local directory
if you have set up "SSH Public Keys" on the website of your GIT provider (, you can use ssh:// without providing user name & password

git clone ssh://

if you did NOT provide SSH you will use https:/// with user name and password

git clone

Make sure you are in a correct directory (.git files should be in the that folder) 


Check that you are working on the correct remote repo

git config --get remote.origin.url

Get update of all remote changes, this does not change the workspace code

git fetch

Add all changed LOCAL files to be managed by git

git add --all

Commit all local changes to LOCAL git repo with a message (change the message as needed)

git commit -m "My good explanation of what I am committing here."

Take remote changes at merge them with you local code, your new changes will not be erased

git rebase

Same as git fetch && git rebase together, but good only when you don't have your our own commits

git pull

Send your local committed changes to remove server

git push

Make sure that you get this message "Your branch is up-to-date with 'origin/XYZ'."

git status

Show differences

$ git diff HEAD FETCH_HEAD

Branch Operations

Switch to an existing branch

$ git checkout develop

Create a new branch named thrift

$ git checkout -b thrift 

Delete an existing branch

$ git branch -D thrift

Resetting - removing local changes

reset hard to previous commit

$ git reset --hard 9a5xxx317

Reset to REMOTE SERVER state, your local changes will be destroyed

$ git reset --hard FETCH_HEAD
$ git clean -f -d
$ git status

On branch master
Your branch is behind 'origin/master' by 4 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
nothing to commit, working directory clean

$ git rebase
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

Working with Submodules

In this tutorial you will see examples of how to work with modules in GTI. It is a good practice for multiple projects to re-use common libraries of code, for example model library, APIs, utility classes, etc.

List Submodules

$ git submodule

Add submodule to an existing project

Before I start, I like to check what is the repository URL of the PARENT project, your submodules will likely have similar URL:

git config --get remote.origin.url


In your (parent) project clone another project as submodule..

git submodule add --force ssh:// module/submodule_name
Cloning into 'module/submodule_name'...
remote: Counting objects: 47, done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 47 (delta 6), reused 47 (delta 6)
Receiving objects: 100% (47/47), 1.85 MiB | 715.00 KiB/s, done.
Resolving deltas: 100% (6/6), done.
Checking connectivity... done.

If you checked out a base project and your submodule is empty, you need to initialize your submodules. The command below will bring the remote code to your local folders recursively for each submodule you have.

git submodule update -f --init --recursive

If the code you want in the submodule is in different branch then you have to checkout that branch

$ git submodule foreach  --recursive git checkout branch_name

Finally you can do your normal PULL, or FETCH and REBASE

$ git submodule foreach --recursive git pull

Remove submodule

List currently registered submodules

git submodule

$ git submodule deinit -f module/myOldModule
git rm -rf module/myOldModule
$ rm -rf module/myOldModule

Get original remote REPO URL

git config --get remote.origin.url