Git Basics
------------------------------------------------------
git init <directory>
- Create empty Git repo in specified directory.
Run with no arguments to initialize the current directory as a git repository.
git clone <repo>
- Clone repo located at <repo> onto local machine. Original repo can be
located on the local filesystem or on a remote machine via HTTP or SSH.
git config user.name <name>
- Define author name to be used for all commits in current repo. Devs
commonly use --global flag to set config options for current user.
git add <directory>
- Stage all changes in <directory> for the next commit.
Replace <directory> with a <file> to change a specific file
git commit -m "<message>"
- Commit the staged snapshot, but instead of launching a text editor,
use <message> as the commit message.
git status
- List which files are staged, unstaged, and untracked.
git log
- Display the entire commit history using the default format.
For customization see additional options.
git diff
- Show unstaged changes between your index and working directory.
------------------------------------------------------
Undoing Changes
------------------------------------------------------
git revert <commit>
- Create new commit that undoes all of the changes made in <commit>, then apply it to the current branch.
git reset <file>
- Remove <file> from the staging area, but leave the working directory
unchanged. This unstages a file without overwriting any changes.
git clean -n
- Shows which files would be removed from working directory. Use
the -f flag in place of the -n flag to execute the clean.
------------------------------------------------------
Rewriting Git History
------------------------------------------------------
git commit --amend
- Replace the last commit with the staged changes and last commit
combined. Use with nothing staged to edit the last commit’s message.
git rebase <base>
- Rebase the current branch onto <base>. <base> can be a commit ID,
a branch name, a tag, or a relative reference to HEAD
git reflog
- Show a log of changes to the local repository’s HEAD. Add --relative-date flag to show date info or --all to show all refs.
------------------------------------------------------
Git Branches
------------------------------------------------------
git branch
- List all of the branches in your repo. Add a <branch> argument to
create a new branch with the name <branch>.
git checkout -b <branch>
- Create and check out a new branch named <branch>. Drop the -b flag to checkout an existing branch.
git merge <branch>
- Merge <branch> into the current branch.
------------------------------------------------------
Remote Repositories
------------------------------------------------------
git remote add <name> <url>
- Create a new connection to a remote repo. After adding a remote,
you can use <name> as a shortcut for <url> in other commands.
git fetch <remote> <branch>
- Fetches a specific <branch>, from the repo. Leave off <branch> to fetch all remote refs.
git pull <remote>
- Fetch the specified remote’s copy of current branch and immediately merge it into the local copy.
git push <remote> <branch>
- Push the branch to <remote>, along with necessary commits and
objects. Creates named branch in the remote repo if it doesn’t exist.
------------------------------------------------------
Git config
------------------------------------------------------
git config --global user.name <name>
- Define the author name to be used for all commits by the current user.
git config --global user.email <email>
- Define the author email to be used for all commits by the current user
git config --global alias. <alias-name> <git-command>
- Create shortcut for a Git command. E.g. alias.glog log --graph --oneline will set git glog equivalent to git log --graph --oneline.
git config --system core.editor <editor>
- Set text editor used by commands for all users on the machine. <editor> arg should be the command that launches the desired editor (e.g., vi).
git config --global --edit
- Open the global configuration file in a text editor for manual editing.
------------------------------------------------------
Git diff
------------------------------------------------------
git diff HEAD
- Show difference between working directory and last commit.
git diff --cached
- Show difference between staged changes and last commit
------------------------------------------------------
Git log
------------------------------------------------------
git log -<limit>
- Limit number of commits by <limit>. E.g. git log -5 will limit to 5 commits.
git log --oneline
- Condense each commit to a single line.
git log -p
- Display the full diff of each commit.
git log --stat
- Include which files were altered and the relative number of lines that were added or deleted from each of them.
git log --author= ”<pattern>”
- Search for commits by a particular author.
git log --grep=”<pattern>”
- Search for commits with a commit message that matches <pattern>.
git log <since>..<until>
- Show commits that occur between <since> and <until>. Args can be a
commit ID, branch name, HEAD, or any other kind of revision reference.
git log -- <file>
- Only display commits that have the specified file.
git log --graph --decorate
- --graph flag draws a text based graph of commits on left side of commit
msgs. --decorate adds names of branches or tags of commits shown.
------------------------------------------------------
Git reset
------------------------------------------------------
git reset
- Reset staging area to match most recent commit, but leave the working directory unchanged.
git reset --hard
- Reset staging area and working directory to match most recent commit and overwrites all changes in the working directory.
git reset <commit>
- Move the current branch tip backward to <commit>, reset the staging area to match, but leave the working directory alone.
git reset --hard <commit>
- Same as previous, but resets both the staging area & working directory to match. Deletes uncommitted changes, and all commits after <commit>.
------------------------------------------------------
Git rebase
------------------------------------------------------
git rebase -i <base>
- Interactively rebase current branch onto <base>. Launches editor to enter commands for how each commit will be transferred to the new base.
------------------------------------------------------
Git pull
------------------------------------------------------
git pull --rebase <remote>
- Fetch the remote’s copy of current branch and rebases it into the local copy. Uses git rebase instead of merge to integrate the branches.
------------------------------------------------------
Git push
------------------------------------------------------
git push <remote> --force
- Forces the git push even if it results in a non-fast-forward merge. Do not use the --force flag unless you’re absolutely sure you know what you’re doing.
git push <remote> --all
- Push all of your local branches to the specified remote.
git push <remote> --tags
- Tags aren’t automatically pushed when you push a branch or use the --all flag. The --tags flag sends all of your local tags to the remote repo.
------------------------------------------------------
git init <directory>
- Create empty Git repo in specified directory.
Run with no arguments to initialize the current directory as a git repository.
git clone <repo>
- Clone repo located at <repo> onto local machine. Original repo can be
located on the local filesystem or on a remote machine via HTTP or SSH.
git config user.name <name>
- Define author name to be used for all commits in current repo. Devs
commonly use --global flag to set config options for current user.
git add <directory>
- Stage all changes in <directory> for the next commit.
Replace <directory> with a <file> to change a specific file
git commit -m "<message>"
- Commit the staged snapshot, but instead of launching a text editor,
use <message> as the commit message.
git status
- List which files are staged, unstaged, and untracked.
git log
- Display the entire commit history using the default format.
For customization see additional options.
git diff
- Show unstaged changes between your index and working directory.
------------------------------------------------------
Undoing Changes
------------------------------------------------------
git revert <commit>
- Create new commit that undoes all of the changes made in <commit>, then apply it to the current branch.
git reset <file>
- Remove <file> from the staging area, but leave the working directory
unchanged. This unstages a file without overwriting any changes.
git clean -n
- Shows which files would be removed from working directory. Use
the -f flag in place of the -n flag to execute the clean.
------------------------------------------------------
Rewriting Git History
------------------------------------------------------
git commit --amend
- Replace the last commit with the staged changes and last commit
combined. Use with nothing staged to edit the last commit’s message.
git rebase <base>
- Rebase the current branch onto <base>. <base> can be a commit ID,
a branch name, a tag, or a relative reference to HEAD
git reflog
- Show a log of changes to the local repository’s HEAD. Add --relative-date flag to show date info or --all to show all refs.
------------------------------------------------------
Git Branches
------------------------------------------------------
git branch
- List all of the branches in your repo. Add a <branch> argument to
create a new branch with the name <branch>.
git checkout -b <branch>
- Create and check out a new branch named <branch>. Drop the -b flag to checkout an existing branch.
git merge <branch>
- Merge <branch> into the current branch.
------------------------------------------------------
Remote Repositories
------------------------------------------------------
git remote add <name> <url>
- Create a new connection to a remote repo. After adding a remote,
you can use <name> as a shortcut for <url> in other commands.
git fetch <remote> <branch>
- Fetches a specific <branch>, from the repo. Leave off <branch> to fetch all remote refs.
git pull <remote>
- Fetch the specified remote’s copy of current branch and immediately merge it into the local copy.
git push <remote> <branch>
- Push the branch to <remote>, along with necessary commits and
objects. Creates named branch in the remote repo if it doesn’t exist.
------------------------------------------------------
Git config
------------------------------------------------------
git config --global user.name <name>
- Define the author name to be used for all commits by the current user.
git config --global user.email <email>
- Define the author email to be used for all commits by the current user
git config --global alias. <alias-name> <git-command>
- Create shortcut for a Git command. E.g. alias.glog log --graph --oneline will set git glog equivalent to git log --graph --oneline.
git config --system core.editor <editor>
- Set text editor used by commands for all users on the machine. <editor> arg should be the command that launches the desired editor (e.g., vi).
git config --global --edit
- Open the global configuration file in a text editor for manual editing.
------------------------------------------------------
Git diff
------------------------------------------------------
git diff HEAD
- Show difference between working directory and last commit.
git diff --cached
- Show difference between staged changes and last commit
------------------------------------------------------
Git log
------------------------------------------------------
git log -<limit>
- Limit number of commits by <limit>. E.g. git log -5 will limit to 5 commits.
git log --oneline
- Condense each commit to a single line.
git log -p
- Display the full diff of each commit.
git log --stat
- Include which files were altered and the relative number of lines that were added or deleted from each of them.
git log --author= ”<pattern>”
- Search for commits by a particular author.
git log --grep=”<pattern>”
- Search for commits with a commit message that matches <pattern>.
git log <since>..<until>
- Show commits that occur between <since> and <until>. Args can be a
commit ID, branch name, HEAD, or any other kind of revision reference.
git log -- <file>
- Only display commits that have the specified file.
git log --graph --decorate
- --graph flag draws a text based graph of commits on left side of commit
msgs. --decorate adds names of branches or tags of commits shown.
------------------------------------------------------
Git reset
------------------------------------------------------
git reset
- Reset staging area to match most recent commit, but leave the working directory unchanged.
git reset --hard
- Reset staging area and working directory to match most recent commit and overwrites all changes in the working directory.
git reset <commit>
- Move the current branch tip backward to <commit>, reset the staging area to match, but leave the working directory alone.
git reset --hard <commit>
- Same as previous, but resets both the staging area & working directory to match. Deletes uncommitted changes, and all commits after <commit>.
------------------------------------------------------
Git rebase
------------------------------------------------------
git rebase -i <base>
- Interactively rebase current branch onto <base>. Launches editor to enter commands for how each commit will be transferred to the new base.
------------------------------------------------------
Git pull
------------------------------------------------------
git pull --rebase <remote>
- Fetch the remote’s copy of current branch and rebases it into the local copy. Uses git rebase instead of merge to integrate the branches.
------------------------------------------------------
Git push
------------------------------------------------------
git push <remote> --force
- Forces the git push even if it results in a non-fast-forward merge. Do not use the --force flag unless you’re absolutely sure you know what you’re doing.
git push <remote> --all
- Push all of your local branches to the specified remote.
git push <remote> --tags
- Tags aren’t automatically pushed when you push a branch or use the --all flag. The --tags flag sends all of your local tags to the remote repo.