NOTE: All commands below assume use of Git bash if on Windows
- List current keys
ls -al ~/.ssh
- Generate new SSH key
ssh-keygen
or
ssh-keygen -t rsa -b 4096 -C "[email protected]"
- Copy SSH key to clipboard
clip < ~/.ssh/id_rsa.pub
- Start and add key to SSH Agent
eval $(ssh-agent)
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/work_id_rsa
-Add Remote, Set Upstream, and Push
git remote add <name> [email protected]:<account>/<repo>.git
git push -u <name> master
-Change remote URL
git remote set-url <name> [email protected]:<account>/<repo>.git
- Best method for merging
git checkout master
git pull origin master
git merge <branch>
git push origin master
- Quicks tags
git tag release/v1.4
- Annotated
git tag -a release/v1.4 -m "my release version 1.4"
- Delete tag
git tag -d v2.0.0
- Delete remote tag
- delete tag locally first
git tag -d released/aug2002
git push origin :refs/tags/released/aug2002
- Push tag
git push --tags
- Link local and remote tags
git push --follow-tags
- Checkout specific tag
git checkout v2.0.0
- Checkout tag into new branch
git checkout -b {branch_name} {tag}
git checkout -b version2 v2.0.0
- Stage all
git add .
- Stage multiple files
git add <file1> <file2>
- Stage specific file
git add -- <file>
- Unstage all
git reset
- Unstage specific file
git reset -- <file>
- Reset all unstaged files
git checkout -- .
- Reset specific unstaged file
git checkout -- <file>
- See list of remote branches
git branch -r
- Get a remote branch
git fetch && git checkout develop
- Checkout specific commit into new branch using SHA
git checkout -b {branch_name} {sha1}
git checkout -b old-commit 23c942d
- See how many revisions ahead or behind two branches are
git rev-list --left-right --count master...develop
- See what branches are merged into the current branch
git branch --merged
- Delete branch
git branch -d <branch>
- Delete remote branch
git push origin --delete <branch>
- Stop remote tracking
git branch -d -r origin/<branch>
- Reset local config
git config --unset branch.<branch>.remote
git config --unset branch.<branch>.merge
- Full forced clean, including ignored files
- -f | Force delete
- -x | Don't use ignore rules
- -d | Allow recurse into untracked directories
git clean -fxd
- Delete recent local commit on current branch that has NOT been pushed:
git reset --hard @{u}
- Log out commit history
git log --oneline
press q once at (END)
- List all files currently being tracked by Git on the current branch
git ls-tree --full-tree --name-only -r HEAD
- List all files that ever existed, including deleted files.
git log --pretty=format: --name-only --diff-filter=A | sort - | sed '/^$/d'
- View current global excludes filepath (global .gitignore)
git config --get core.excludesfile
- Create global ignore file in user dir
touch ~/.gitignore_global
- Set global gitignore file
git config --global core.excludesfile ~/.gitignore_global
Related Setup: https://gist.github.com/hofmannsven/6814278
Related Pro Tips: https://ochronus.com/git-tips-from-the-trenches/
Interactive Beginners Tutorial: http://try.github.io/
Press minus + shift + s
and return
to chop/fold long lines!
Show folder content: ls -la
Do not put (external) dependencies in version control!
See where Git is located:
which git
Get the version of Git:
git --version
Create an alias (shortcut) for git status
:
git config --global alias.st status
Help:
git help
Initialize Git:
git init
Get everything ready to commit:
git add .
Get custom file ready to commit:
git add index.html
Commit changes:
git commit -m "Message"
Add and commit in one step:
git commit -am "Message"
Remove files from Git:
git rm index.html
Update all changes:
git add -u
Remove file but do not track anymore:
git rm --cached index.html
Move or rename files:
git mv index.html dir/index_new.html
Undo modifications (restore files from latest commited version):
git checkout -- index.html
Restore file from a custom commit (in current branch):
git checkout 6eb715d -- index.html
Go back to commit:
git revert 073791e7dd71b90daa853b2c5acc2c925f02dbc6
Soft reset (move HEAD only; neither staging nor working dir is changed):
git reset --soft 073791e7dd71b90daa853b2c5acc2c925f02dbc6
Undo latest commit: git reset --soft HEAD~
Mixed reset (move HEAD and change staging to match repo; does not affect working dir):
git reset --mixed 073791e7dd71b90daa853b2c5acc2c925f02dbc6
Hard reset (move HEAD and change staging dir and working dir to match repo):
git reset --hard 073791e7dd71b90daa853b2c5acc2c925f02dbc6
Test-Delete untracked files:
git clean -n
Delete untracked files (not staging):
git clean -f
Unstage (undo adds):
git reset HEAD index.html
Commit to most recent commit:
git commit --amend -m "Message"
Update most recent commit message:
git commit --amend -m "New Message"
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
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
Merge only one specific commit:
git cherry-pick 073791e7
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}
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 origin from GitHub project:
git remote add origin https://github.com/user/project.git
Add remote origin from existing empty project on server:
git remote add origin ssh://[email protected]/path/to/repository/.git
Remove origin:
git remote rm origin
Show remote branches:
git branch -r
Show all branches:
git branch -a
Compare:
git diff origin/master..master
Push (set default with -u
):
git push -u origin master
Push to default:
git push origin master
Fetch:
git fetch origin
Fetch a custom branch:
git fetch origin branchname:local_branchname
Pull:
git pull
Pull specific branch:
git pull origin branchname
Merge fetched commits:
git merge origin/master
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
Delete remote branch (push nothing):
git push origin :branchname
or:
git push origin --delete branchname
Create a zip-archive: git archive --format zip --output filename.zip master
Export/write custom log to a file: git log --author=sven --all > log.txt
Ignore files that have already been committed to a Git repository: http://stackoverflow.com/a/1139797/1815847
Hide Git on the web via .htaccess
: RedirectMatch 404 /\.git
(more info here: http://stackoverflow.com/a/17916515/1815847)
Website: https://git-lfs.github.com/
Install: brew install git-lfs
Track *.psd
files: git lfs track "*.psd"
(init, add, commit and push as written above)