FANDOM


References

Commands

category command description remark
Setup git config Get and set repository or global options git config --get core.autocrlf
git config core.autocrlf false
Creating git clone Clone a repository into a new directory
git init Create an empty Git repository or reinitialize an existing one
Basic git add
git status Show the working tree status
git diff Show changes between commits, commit and working tree, etc
git commit
git reset Reset current HEAD to the specified state
git reset --hard Resets the index and working tree. Any changes to tracked files in the working tree since commit are discarded.
git restore Restore working tree files
Branching git branch List, create, or delete branches
git branch --list List branches. -l
git branch --all List both remote-tracking branches and local branches. -a
git branch --move Move/rename a branch and the corresponding reflog. -m
git branch --delete Delete a branch. -d
git checkout Switch branches or restore working tree files
git log Show commit logs git log master -3
git tag Create, list, delete or verify a tag object signed with GPG
Sharing git pull
git push
git push --all Push all branches (i.e. refs under refs/heads/)
git push --tags All refs under refs/tags are pushed
git push --follow-tags
git remote Manage set of tracked repositories
Patching git rebase Reapply commits on top of another base tip
git revert Revert some existing commits Requires your working tree to be clean (no modifications from the HEAD commit)
Administration git clean Remove untracked files from the working tree
git archive Create an archive of files from a named tree git archive -o latest.zip HEAD
Plumbing git ls-files Show information about files in the index and the working tree git ls-files | wc -l
git show-ref List references in a local repository
Guides gitignore ($HOME/.config/git/ignore, $GIT_DIR/info/exclude, .gitignore)
Misc git svn Bidirectional operation between a Subversion repository and Git

Refs

Type Format Example Remarks
Local branches refs/heads/... refs/heads/2.x, refs/heads/3.x
Remote tracking branches refs/remotes/... refs/remotes/origin, refs/remotes/upstream/master
Tags refs/tags/... refs/tags/v0.9, refs/tags/v1.5.RELEASE, refs/tags/v2.0.GA

Reserved Refs

Reserved Full Description
master refs/heads/master local master branch
origin/master refs/remotes/origin/master
v1.0.1 refs/tags/v1.0.1
HEAD currently checkout commit
FETCH_HEAD the result of the last fetch operation
ORIG_HEAD the commit that was checked out before a merge or rebase operation was started

Configuration

Variable Data Type Description Default Remarks
push.followTags boolean If set to true enable --follow-tags option by default. false --no-follow-tags

Model

File State-chart

  Untracked           Modified            Staged        Committed
      |                  |                 |               |
      +- add ------------|---------------->|               |
      |                  |                 |               |
      |                  +- add ---------->|               |
      |                  |                 |               |
      |                  |                 +- commit ----->|
      |                  |                 |               |
      |                  |                 |               |
      |                  |<----------------|-------- edit -+
      |                  |                 |               |
      |<-----------------+-----------------+------ remove -|
      |                  |                 |               |


                       * Tracked = Modified | Staged | Committed
                           
  +-----------+            +---------+            +------------+
  | Untracked | ---add---> | Staged  | <---add--- | Modified   |
  |(workspace)|            | (index) |            |(workspace)|
  +-----------+            +---------+            +------------+
                                |                       ^
                                |                       |
                             commit                   edit
                                |                       |
                                |     +-----------+     |
                                +---> | Committed | ---+
                                      +-----------+

Areas

Area Role Description Remarks
Workspace Working directory Consists of files that you are currently working on. Local checkout
Index Staging area, Cache Where commits are prepared.
Stash A place to hide modifications while you work on something else
Local Repository
Upstream Repository

Commands

merge
      A---B---C topic
     /
D---E---F---G master
git merge topic
      A---B---C topic
     /         \
D---E---F---G---H master
rebase
      A---B---C topic
     /
D---E---F---G master
git rebase master topic
              A'--B'--C' topic
             /
D---E---F---G master
      A---B---C topic
     /
D---E---A'---F master
git rebase master topic
               B'---C' topic
              /
D---E---A'---F master

Readings

Revision

Basic Snapshotting

add, status, diff, commit, restore, reset

Status

Diff

Branching

branch, checkout, switch, merge, log, tag

Branch

Checkout

Tag

Sharing

fetch, pull, push, remote

Workflow

Tools

Misc

Subtree

Typical Usage

List all configuration

$ git config --list --show-scope --show-origin

Adding new items, committing and pushing them

$ git status .                    // identifies added, modified or untracked items under current local directory
$ git add .                       // updates index
$ git status .                    // confirms the changes to be committed
$ git commit -m "message ..."     // commits changes into local repository
$ git status .                    // confirms all changes are committed
$ git push                        // pushes changes in local repository onto the remote repository
$ git log --name-only -1         // lists files in the last commit

When the HEAD of 'origin/master' has changed since the last sync, '$ git push' would fail with messages including fast-forwards. Then,

$ git pull --rebase
...
may need manual merge.
...
$ git push

Working with remote repositories

$ git remote -v          // lists tracking repositories
$ git remote add upstream https://github.com/jpmorganchase/quorum.git     // add a new remote repository to track
$ git branch -r          // lists branches in tracking repositories

Working with branches or tags

$ git tag -ln                                // lists tags
$ git tag -a v2.0.2 -m "before new branch"   // creates a new annotated tag(v2.0.2)
$ git tag origin v2.0.2                      // push a tag to a remote
$ git push origin --tags                     // pushes all local tags to remote 'origin'

$ git branch                                 // lists branches
$ git branch -a                              // lists both local and remote-tracking branches
$ git branch -avv                            // lists all branches showing hash and upstream branch if any

$ git branch 1.1                             // creates a new branch(1.1) from the master (branch)
$ git branch 2.0.2-ext v2.0.2                // creates a new branch(2.0.2-ext) from a tag(v2.0.2)
$ git push origin advanced:advanced          // creates remote branch 'origin/advanced' from local branch 'advanced'

$ git checkout release-1.1                   // updates working tree to release-1.1
$ git checkout -b gh-pages origin/gh-pages   // copies remote branch to local repository

Tracking changes

$ git log master -3                          // lists 3 recent commits for master branch
$ git log v2.0.2 -3                          // lists 3 last commits before the tag of 'v2.0.2'
$ git log origin/master -1                   // lists last commit of remote branch 'origin/master'
$ git log upstream/master -1                 // lists last commit of remote branch 'upstream/master'
$ git log --name-only -1                    // lists files in the last commit.

Undoing

  • To remove uncommitted changes on tracked files in the working tree, use 'git reset --hard'.
$ git reset --hard          // resets the index and working tree. Any changes to tracked files in the working tree since <commit> are discarded.
  • To unstage a staged file, use 'git reset HEAD <<file>>'.
$ git reset HEAD CONTRIBUTING.md
  • To unmodify a modified file, use 'git checkout -- <<file>>'.
$ git checkout -- CONTRIBUTING.md

Removing untracked files and directories in the working tree

$ git clean -ndx          // -n: dry run, -d: directory also, -x: skip gitignore
...
$ git clean -ffdx         // -ff: force including files manged by different Git repository
...

For more, refer

Removing committed changes

@TODO

Creating and pushing tag

$ git tag -a v1.0 -m "Ready to offer externally"
...
$ git push origin v1.0
...

Creating local repository using existing artifacts and pushing it to the remote bare repository

$ git init
$ git add .
$ git status .
$ git commit -m "..."
$ git remote add origin https://github.com/.../....git
$ git push --set-upstream origin master
$ git remote -v
$ git push

Look around local repository

$ git status .          // show the working tree status
$ git branch -avv       // list both remote-tracking branches and local branches.
$ git tag -ln           // list tags
$ git remote -v         // list tracking repositories
$ git show-ref --head   // list references in a local repository
$ git log origin/master -3  // lists 3 recent commits for remote branch 'origin/master'
$ git ls-files         // show information about files in the index and the working tree
$ git config -l        // list all variables set in config file, along with their values.

Companions

GitHub

  • GitHub Markup Support
    • The library that every markup file in a repository goes on before it is rendered on GitHub.com:
Markup Extension Library
Markdown .markdown, .md https://github.com/gjtorikian/commonmarker
MediaWiki .mediawiki, .wiki https://github.com/nricciar/wikicloth
Textile .textile https://github.com/jgarber/redcloth
AsciiDoc .asciidoc, .adoc http://asciidoctor.org/
reStructuredText .rst

GitHub Pages

EGit

Gitorious

  • Desc : Git hosting and collaboration software that you can install yourself
  • License : GNU Affero General Public License

GitLab

Gogs

Tips and Tricks

Typical .gitignore

A typical .gitignore file contains

CVS/
.svn/
/.idea/
/bin/
/target/
/build/
/output/
/Debug/
/Release/
/x86/
/x64/
/obj/
/node_modules/
/pkg/
/run/
/log/
/logs/
/test-output/
/reports/
.apt_generated/
package-lock.json
config.gypi
npm-debug.log
.npmrc
packer_cache/
/**/*.log
/**/*.bak
/**/.~*
/**/._*
/**/.cache*
/**/.*.swp
.lock-wscript
.wafpickle-N

For more, refer

Community content is available under CC-BY-SA unless otherwise noted.