GitHub provides desktop clients that include a graphical user interface for the most common repository actions and an automatically updating command line edition of Git for advanced scenarios.
Git distributions for Linux and POSIX systems are available on the official Git SCM website.
Configure user information for all local repositories
$ git config --global user.name "[name]"
Sets the name you want attached to your commit transactions
$ git config --global user.email "[email address]"
Sets the email you want attached to your commit transactions
Start a new repository or obtain one from an existing URL
$ git init [project-name]
Creates a new local repository with the specified name
$ git clone [url]
Downloads a project and its entire version history
{% endcapture %}
{% capture colTwo %}
Review edits and craft a commit transaction
$ git status
Lists all new or modified files to be committed
$ git diff
Shows file differences not yet staged
$ git add [file]
Snapshots the file in preparation for versioning
$ git diff --staged
Shows file differences between staging and the last file version
$ git reset [file]
Unstages the file, but preserves its contents
$ git commit -m"[descriptive message]"
Records file snapshots permanently in version history
A branch represents an independent line of development. Branches serve as an abstraction for the edit/stage/commit process. You can think of them as a way to request a brand new working directory, staging area, and project history. New commits are recorded in the history for the current branch, which results in a fork in the history of the project.
The git branch command lets you create, list, rename, and delete branches. It doesn’t let you switch between branches or put a forked history back together again. For this reason, git branch is tightly integrated with the git checkout and git merge commands.
Commands:
Show branches:
git branch
Create branch:
git branch branchname
Change to branch:
git checkout branchname
Create and change to new branch:
git checkout -b branchname
Rename branch:
git branch -m branchname new_branchname
or:
git branch --move branchname new_branchname
Show all completely merged branches with current branch:
git branch --merged
Delete merged branch (only possible if not HEAD):
git branch -d branchname
or:
git branch --delete branchname
Delete not merged branch:
git branch -D branch_to_delete
Merging is Git's way of putting a forked history back together again. The git merge command lets you take the independent lines of development created by git branch and integrate them into a single branch.
Git merge will combine multiple sequences of commits into one unified history. In the most frequent use cases, git merge is used to combine two branches.
True merge (fast forward):
git merge branchname
Merge to master (only if fast forward):
git merge --ff-only branchname
Merge to master (force a new commit):
git merge --no-ff branchname
Stop merge (in case of conflicts):
git merge --abort
Stop merge (in case of conflicts):
git reset --merge
// prior to v1.7.4
Undo local merge that hasn't been pushed yet:
git reset --hard origin/master
Merge only one specific commit:
git cherry-pick 073791e7
sh Rebase is one of two Git utilities that specializes in integrating changes from one branch onto another. The other change integration utility is git merge. Merge is always a forward moving change record. Alternatively, rebase has powerful history rewriting features.
What is git rebase?
sh Rebasing is the process of moving or combining a sequence of commits to a new base commit. Rebasing is most useful and easily visualized in the context of a feature branching workflow.
Rebase:
git checkout branchname
» git rebase master
or:
git merge master branchname
(The rebase moves all of the commits in master
onto the tip of branchname
.)
Cancel rebase:
git rebase --abort
Squashing a commit means, from an idiomatic point of view, to move the changes introduced in said commit into its parent so that you end with one commit out of twos. If you repeat this process multiple times, you can reduce n commit to a single one.
Squash multiple commits into one:
git rebase -i HEAD~3
(source)
Squash-merge a feature branch (as one commit):
git merge --squash branchname
(commit afterwards)
sh git stash temporarily shelves (or stashes) changes you've made to your working copy so you can work on something else, and then come back and re-apply them later on. Stashing is handy if you need to quickly switch context and work on something else, but you're mid-way through a code change and aren't quite ready to commit
Put in stash:
git stash save "Message"
Show stash:
git stash list
Show stash stats:
git stash show stash@{0}
Show stash changes:
git stash show -p stash@{0}
Use custom stash item and drop it:
git stash pop stash@{0}
Use custom stash item and do not drop it:
git stash apply stash@{0}
Use custom stash item and index:
git stash apply --index
Create branch from stash:
git stash branch new_branch
Delete custom stash item:
git stash drop stash@{0}
Delete complete stash:
git stash clear
About: https://help.github.com/articles/ignoring-files
Useful templates: https://github.com/github/gitignore
Add or edit gitignore:
nano .gitignore
Track empty dir:
touch dir/.gitkeep
Show commits:
git log
Show oneline-summary of commits:
git log --oneline
Show oneline-summary of commits with full SHA-1:
git log --format=oneline
Show oneline-summary of the last three commits:
git log --oneline -3
Show only custom commits:
git log --author="Sven"
git log --grep="Message"
git log --until=2013-01-01
git log --since=2013-01-01
Show only custom data of commit:
git log --format=short
git log --format=full
git log --format=fuller
git log --format=email
git log --format=raw
Show changes:
git log -p
Show every commit since special commit for custom file only:
git log 6eb715d.. index.html
Show changes of every commit since special commit for custom file only:
git log -p 6eb715d.. index.html
Show stats and summary of commits:
git log --stat --summary
Show history of commits as graph:
git log --graph
Show history of commits as graph-summary:
git log --oneline --graph --all --decorate
Compare modified files:
git diff
Compare modified files and highlight changes only:
git diff --color-words index.html
Compare modified files within the staging area:
git diff --staged
Compare branches:
git diff master..branchname
Compare branches like above:
git diff --color-words master..branchname^
Compare commits:
git diff 6eb715d
git diff 6eb715d..HEAD
git diff 6eb715d..537a09f
Compare commits of file:
git diff 6eb715d index.html
git diff 6eb715d..537a09f index.html
Compare without caring about spaces:
git diff -b 6eb715d..HEAD
or:
git diff --ignore-space-change 6eb715d..HEAD
Compare without caring about all spaces:
git diff -w 6eb715d..HEAD
or:
git diff --ignore-all-space 6eb715d..HEAD
Useful comparings:
git diff --stat --summary 6eb715d..HEAD
Blame:
git blame -L10,+1 index.html
Show all released versions:
git tag
Show all released versions with comments:
git tag -l -n1
Create release version:
git tag v1.0.0
Create release version with comment:
git tag -a v1.0.0 -m 'Message'
Checkout a specific release version:
git checkout v1.0.0
Show remote:
git remote
Show remote details:
git remote -v
Add remote upstream from GitHub project:
git remote add upstream https://github.com/user/project.git
Add remote upstream from existing empty project on server:
git remote add upstream ssh://[email protected]/path/to/repository/.git
Fetch:
git fetch upstream
Fetch a custom branch:
git fetch upstream branchname:local_branchname
Merge fetched commits:
git merge upstream/master
Remove origin:
git remote rm origin
Show remote branches:
git branch -r
Show all branches (remote and local):
git branch -a
Create and checkout branch from a remote branch:
git checkout -b local_branchname upstream/remote_branchname
Compare:
git diff origin/master..master
Push (set default with -u
):
git push -u origin master
Push:
git push origin master
Force-Push: `git push origin master --force
Pull:
git pull
Pull specific branch:
git pull origin branchname
Fetch a pull request on GitHub by its ID and create a new branch:
git fetch upstream pull/ID/head:new-pr-branch
Clone to localhost:
git clone https://github.com/user/project.git
or:
git clone ssh://[email protected]/~/dir/.git
Clone to localhost folder:
git clone https://github.com/user/project.git ~/dir/folder
Clone specific branch to localhost:
git clone -b branchname https://github.com/user/project.git
Clone with token authentication (in CI environment):
git clone https://oauth2:<token>@gitlab.com/username/repo.git
Delete remote branch (push nothing):
git push origin :branchname
or:
git push origin --delete branchname