- 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/
- Git Cheatsheet by GitHub: https://services.github.com/on-demand/downloads/github-git-cheat-sheet/
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" Commit changes with title and description: git commit -m "Title" -m "Description..." 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 Hard reset of a single file (@ is short for HEAD
):
git checkout @ -- index.html
Test-Delete untracked files:
git clean -n Delete untracked files (not staging): git clean -f Unstage (undo adds): git reset HEAD index.html
Update most recent commit (also update the 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
Undo local merge that hasn't been pushed yet: git reset --hard origin/master Merge only one specific commit: git cherry-pick 073791e7 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 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)
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 Shows commits where the given string was added or removed: git log -S 'assertInvalid' -- src/Illuminate/Testing/TestResponse.php (If assertInvalid only appears once in the git history of src/Illuminate/Testing/TestResponse.php file, it means that once it was introduced, it wasn't removed or added back, hence only one commit is shown in the results.) 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://root@123.123.123.123/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://user@domain.com/~/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
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)