Git
Global Settings
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/
Reminder
Press minus + shift + s and return to chop/fold long lines!
Show folder content: ls -la
Notes
Do not put (external) dependencies in version control!
Setup
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
General
Description |
Command |
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 |
Reset
Description |
Command |
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 |
Update & Delete
Description |
Command |
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” |
Branch
Description |
Command |
|
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 |
|
Merge
Description |
Command |
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) |
Stash
Description |
Command |
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 |
Gitignore & Gitkeep
Description |
Command |
|
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 |
|
Log
Description |
Command |
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
Description |
Command |
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 |
Releases & Version Tags |
|
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 |
Collaborate
Description |
Command |
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:@gitlab.com/username/repo.git |
Delete remote branch (push nothing): git push origin :branchname or:git push origin –delete branchname |
|
Archive
Description |
Command |
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 |
Troubleshooting
Description |
Command |
Ignore files that have already been committed to a Git repository: |
http://stackoverflow.com/a/1139797/1815847 |
Security
Description |
Command |
Hide Git on the web via .htaccess: |
RedirectMatch 404 /.git (more info here: http://stackoverflow.com/a/17916515/1815847) |
Large File Storage
Description |
Command |
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) |