Git is a fast, scalable, distributed revision control system with an unusually rich command set that provides both high-level operations and full access to internals. This page familiarizes some of the useful git commands while dealing with RDK code base.

checkout

To switch to another branch in your local work environment.

$ git checkout BRANCH_NAME

Synopsis

git checkout [-q] [-f] [-m] [<branch>] 

git checkout [-q] [-f] [-m] --detach [<branch>]

git checkout [-q] [-f] [-m] [--detach] <commit>

git checkout [-q] [-f] [-m] [[-b|-B|--orphan] <new_branch>] [<start_point>]

git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <pathspec>…​

git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] --pathspec-from-file=<file> [--pathspec-file-nul]

git checkout (-p|--patch) [<tree-ish>] [--] [<pathspec>…​]


Options

Example

$ git checkout rdk-next

checks out the rdk-next branch.

add

To stage changes[file modifications and deletions].Accepts arguments for files or directories within the project directory. 

$ git add

Synopsis

git add [--verbose | -v]      [--dry-run | -n]    [--force | -f]    [--interactive | -i]     [--patch | -p]     [--edit | -e]     [--[no-]all | --[no-]ignore-removal | [--update | -u]]    [--intent-to-add | -N]   [--refresh]  [--ignore-errors]  [--ignore-missing]     [–renormalize]        [--chmod=(+|-)x]    [--pathspec-from-file=<file> [--pathspec-file-nul]]  [--] [<pathspec>…​]


Options

$ git add [options]

Example

$ git add file1.c file2.c

Adds the file1.c and file2.c available in the current folder directory.

commit

Consists of a snapshot of the directory structure and file contents for the entire project. Record changes to the repository.

$ git commit

Synopsis 

git commit [-a | --interactive | --patch] [-s] [-v] [-u<mode>] [–amend] [--dry-run] [(-c | -C | --fixup | --squash) <commit>] [-F <file> | -m <msg>] [--reset-author] [--allow-empty] [--allow-empty-message] [--no-verify] [-e] [–author=]  [--date=<date>] [--cleanup=<mode>] [--[no-]status]  [-i | -o] [--pathspec-from-file=<file> [--pathspec-file-nul]]  [-S[<keyid>]] [--] [<pathspec>…​]


Options

Example

$ vim file1.c // edit the file1.c
$ rm file2.c
$ git commit -a

The command git commit -a  first looks at the working tree, notices that  file1.c modified and removed file2.c, performs necessary git add and git rm.

Push

To upload local workspace to remote repository

$ git push

Synopsis

git push [--all | --mirror | --tags] [--follow-tags] [--atomic] [-n | --dry-run] [--receive-pack=<git-receive-pack>] [--repo=<repository>] [-f | --force] [-d | --delete] [--prune] [-v | --verbose] 
[-u | --set-upstream] [-o <string> | --push-option=<string>] [--[no-]signed|--signed=(true|false|if-asked)] [--force-with-lease[=<refname>[:<expect>]] [--no-verify] [<repository> [<refspec>…​]]

Example

$ git push origin HEAD:refs/for/master

This will push the changes to master branch available in the remote location

branch

To view a list of existing branches

$ git branch

Creates a new topic branch

$ git branch [branch]

Synopsis

git branch [--color[=<when>] | --no-color] [--show-current] [-v [--abbrev=<length> | --no-abbrev]] [--column[=<options>] | --no-column] [--sort=<key>] [(--merged | --no-merged) [<commit>]] [--contains [<commit]] [--no-contains [<commit>]] [--points-at <object>] [--format=<format>] [(-r | --remotes) | (-a | --all)] [--list] [<pattern>…​] 

git branch [--track | --no-track] [-f] <branchname> [<start-point>]

git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>] 

git branch --unset-upstream [<branchname>]

git branch (-m | -M) [<oldbranch>] <newbranch>

git branch (-c | -C) [<oldbranch>] <newbranch> 

git branch (-d | -D) [-r] <branchname>…​

git branch --edit-description [<branchname>]


Options

Example

$ git branch development
creating a new git branch called “development”
$ git branch -d development

Deleted development branch.

diff

Show changes between commits, commit and working tree, etc

$ git diff

Synopsis

git diff [<options>] [<commit>] [--] [<path>…​] 
git diff [<options>] --cached [<commit>] [--] [<path>…​]
git diff [<options>] <commit> <commit> [--] [<path>…​]
git diff [<options>] <blob> <blob>
git diff [<options>] --no-index [--] <path> <path>


Options

Example

$ git diff           - Changes in the working tree not yet staged for the next commit.
    
$ git diff --cached  - Changes between the index and the last commit; what would be committing on running "git commit" without "-a" option.

$ git diff HEAD     - Changes in the working tree since last commit; what would be committing on running "git commit -a"

log

Show commit logs. Shows the history of the current branch.

$ git log

Shows the commits that aren't pushed.

$ git log m/[codeline]..

Synopsis

$ git log [<options>] [<revision range>] [[--] <path>…​]

Options

Example

$ git log --no-merges

Show the whole commit history, but skip any merges

rebase

Reapply commits on top of another base tip.

$ git rebase [options]

Synopsis 

git rebase [-i | --interactive] [<options>] [--exec <cmd>] [--onto <newbase> | --keep-base] [<upstream> [<branch>]] 
git rebase [-i | --interactive] [<options>] [--exec <cmd>] [--onto <newbase>] --root [<branch>] 
git rebase (--continue | --skip | --abort | --quit | --edit-todo | --show-current-patch)


Options 

Example

$ git rebase --interactive

To squash a series of commits into a single commit.

stash

Stash command saves the local modifications away and reverts the working directory to match the HEAD commit. 

Synopsis 

git stash list [<options>] 
git stash show [<options>] [<stash>]
git stash drop [-q|--quiet] [<stash>]
git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]
git stash branch <branchname> [<stash>]
git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet] [-u|--include-untracked] [-a|--all] [-m|--message <message>] [--] [<pathspec>…​]] 
git stash clear
git stash create [<message>]
git stash store [-m|--message <message>] [-q|--quiet] <commit>


Options 

Example

$ git pull
 ...
file file1.c not up-to-date, cannot merge.
$ git stash
$ git pull
$ git stash pop