This document provides numerous examples of Git aliases that can help streamline workflows. It begins by demonstrating aliases for common commands like status, last commit, checkout, add, commit, reset, and grep. It then shows more advanced aliases for managing branches, commits, and reflogs. Throughout, it emphasizes that aliases can make workflows more efficient by avoiding repetitive tasks and that teams should consider sharing standardized aliases. It concludes by encouraging readers to continually learn Git, customize workflows for their needs, and view themselves as craftspeople improving their skills.
2. 2
Who Am INicola Iarocci, a weirdo
Python by Night
I am the author and
maintainer of a few
Python open source
projects: python-eve.org,
python-cerberus.organd
more.
Microsoft MVP
MongoDB Master
I also happen to be a
Microsoft MVP for Visual
Studio and Development
Technologies and a
MongoDB Master.
Communities
I run DevRomagna, a
developers community, and
CoderDojo Ravenna, a
coding club for kids.
http://devromagna.org
C# by Day
I am the author of Sofware
Gestionali Amica, a line of
accounting and invoicing
applications for Italian small
businesses. Check it out at
http://gestionaleamica.com
4. 4
the main branch where the source code of HEAD
always reflects a production-ready state
origin/master
main branch where HEAD always holds the latest
delivered development changes, ready for next release
origin/develop
feature, release and hotfix branches. these always have
a limited life time, since they will be removed eventually
supporting branches
an elegant mental model well suited for packaged
software. Not ideal for frequent release cycles such as
those we have in modern web development
summary
Git Flowa successful git branching model
http://nvie.com/posts/a-successful-git-branching-model/
5. 5
the main branch where the source code of HEAD
always reflects a production-ready state
origin/master
to work on something new, create a descriptively named
branch off of master branch
feature branch
when you need feedback or help, or you think the
branch is ready for merging, open a pull request
pull request & review
a lightweight, branch-based workflow that supports
teams and projects where deployments are made
regularly
summary
GitHub Flowwidely adopted by the open source community
http://scottchacon.com/2011/08/31/github-flow.html
8. 8
show last commit
$ git last
commit c828339f02f832818f868bbfe457e64bfcc3e64a
Author: Nicola Iarocci <nicola@nicolaiarocci.com>
Date: Thu Oct 19 10:28:42 2017 +0200
first commit
$ git config —-global alias.last ‘log -1 HEAD’
9. 9
quick branch checkout
$ git co mybranch
switched to branch ‘mybranch’
$ git config —-global alias.co ‘checkout’
Hint: git co - works like cd - but between branches (git checkout - works, too)
10. 10
checkout to a new branch
$ git cob newbranch
switched to a new branch ‘mybranch’
$ git config —-global alias.cob ‘checkout -b’
branch is created on the fly
12. 12
add staged changes to last commit
$ git add .
$ git fixup
$ git config —-global alias.fixup ‘commit —-amend —-noedit’
skip editing the commit message
13. 13
unstage changes
$ git st
## work
M README.md
$ git unstage README.md
Unstaged changes after reset:
M README.md
$ git config —-global alias.unstage ‘reset HEAD’
pass no filename to unstage all, or use wildcard
15. 15
undo last commit and keep changes
$ git r1
Unstaged changes after reset:
M README.md
$ git config —-global alias.r1 ‘reset HEAD^’
changes are left unstaged
16. 16
undo last commit, discard changes
$ git rh1
HEAD is now at c828339 first commit
$ git config —-global alias.rh1 ‘reset -—hard HEAD^’
use with caution
17. 17
add all changes including untracked,
and commit with message
$ git cm “my commit message”
[mybranch ea88184] my commit message
1 file changed, 1 insertion(+), 1 deletion(-)
!git add -A && git commit -m
19. 19
add all changes including untracked,
then commit as SAVEPOINT
$ git save
[mybranch ea88184] SAVEPOINT
1 file changed, 1 insertion(+), 1 deletion(-)
!git add -A && git commit -m SAVEPOINT
20. 20
resume work after WIP or SAVEPOINT
$ git undo
Unstaged files after reset:
M README.md
$ git config —-global alias.undo ‘reset HEAD^ —-mixed’
functionally identical to ‘r1’ but makes more sense semantically
21. 21
add changes to commit, then wipe that commit
$ git wipe
HEAD is now at 8da9860 my commit message
$ git reflog
8da9860 HEAD@{0}: reset: moving to HEAD~1
4998619 HEAD@{1}: commit: WIPE SAVEPOINT
$ git reset —hard 4998619
HEAD is now at 4998619 WIPE SAVEPOINT
!git add -A && git commit -qm 'WIPE SAVEPOINT' && git reset HEAD~1 --hard
now working dir is clean, but I can still go back if need arises (via reflog)
22. 22
hierarchical, git-powered grep
$ git g “event hooks”
CHANGES
1077:- [new] pre_<method> and ``pre_<method>_<resource>`` event hooks are
now
docs/features.rst
1216:Database event hooks
1219:Database event hooks work like request event hooks
$ git config —-global alias.g ‘grep --break --heading --line-number’
faster than standard grep
23. 23
show a tree with all branches
$ git tree
* bbde45f (HEAD -> expand_cerberus_registries) WIP
* 3a25ea7 (origin/master, master) Merge branch ‘use_ordereddict_from_backport_collections_#1070’
|
| * 9fb1a66 Changelog for #1070
| * fa8da19 use OrderedDict from backport_collections
|/
* cee2f7e Merge branch 'support_for_decimal_type_#1048'
|
| * 46af495 Minor changelog fixes for #1048
| * 3bf1930 Support Decimal type MongoDB
|/
!git log --graph --decorate --all --oneline
which brings us to the next topic…
24. 24
push/unpush current branch to remote
$ git publish
$ git unpublish
In .gitconfig:
branch-name = "!git rev-parse --abbrev-ref HEAD"
publish = "!git push -u origin $(git branch-name)"
unpublish = "!git push origin :$(git branch-name)"
and set it to track upstream branch
31. 31
Aliases
Streamline your workflow.
Don’t Repeat Yourself.
Consider sharing with team.
Rebase
Keep project history clean,
compact and consistent. Not
as hard as you thought.
Keep Learning
Study more advanced git
features. Consider building
your own scripts.
Pick a Workflow
Don’t be afraid to customize
it just to suit your use case,
project, and team.
You Are a Craftsmansharpen your tools