Lemi Orhan Ergin: You Should Be Aware of
Lemi Orhan Ergin: You Should Be Aware of
/lemiorhan
lemiorhanergin.com
@lemiorhan
Do you push every commit
just a!er you create ?
ANTIPATTERN DANGER
do you have
loooooong living
topic branches ?
FEATURE 13
HEAD
master
TAG/v13
version 2.0
master
commit early
ORIGIN/master
commit o!en
no need to compile
no need for CI
it’s only for versioning
master
ORIGIN/master
master
ORIGIN/master
master
ORIGIN/master
master
ORIGIN/master
master
ORIGIN/master
REGULARLY
Get incoming change sets
from source to topic
branch via merge
STEP 3 $ git merge master
HEAD
TOPIC
master
ORIGIN/master
REGULARLY
Get incoming change sets
from source to topic
branch via merge
STEP 3 $ git merge master
TOPIC
master
ORIGIN/master
HEAD
STEP 4
$ git checkout master
$ git merge --squash topic
TOPIC
master
ORIGIN/master
HEAD
use terminal
GUIs are prison balls of developers
it’s ok to use GUIs while checking diffs,
resolving conflicts and viewing commit graph
stop adding
every change
prevent commits from being big ball of muds
commit
$ git config --global commit.template ~/.git-commit-template.txt
$ git config --global commit.cleanup strip
messages # WHAT
# <issue id> (this commit will...) <subject>
documents! # RELATED
# Provide links or keys to any relevant issues or other resources
c5 c6
FIX
HEAD
LOCAL
master UPSTREAM
c1 c2 c3 c4 c7
c5 c6
FIX
REBASE & FORCE PUSH
master $ git rebase master
$ git push -f
c1 c2 c3 c4 c7
c5’
c5 c6’
c6
FIX
HEAD LOCAL
master UPSTREAM
c1 c2 c3 c4 c7
c5 c6
FIX
REBASE & FORCE PUSH
master $ git rebase master
$ git push -f
c1 c2 c3 c4 c7
c5’
c5 c6’
c6
FIX
HEAD LOCAL
master UPSTREAM
c1 c2 c3 c4 c7
c5’
c5 c6’
c6
FIX
PULL A FORCE-PUSHED BRANCH
master
$ git pull
c1 c2 c3 c4 c7
c5 c6
FIX
HEAD
LOCAL
master UPSTREAM
c1 c2 c3 c4 c7
c5’
c5 c6’
c6
FIX
PULL A FORCE-PUSHED BRANCH
master
$ git pull
c1 c2 c3 c4 c7
c5 c6 c5’
c5 c6’
c6
FIX ORIGIN/FIX
HEAD
LOCAL
master UPSTREAM
c1 c2 c3 c4 c7
c5’
c5 c6’
c6
FIX
PULL A FORCE-PUSHED BRANCH
master
$ git pull
c1 c2 c3 c4 c7
c5 c6 c5’
c5 c6’
c6
c8
LOCAL
ORIGIN/FIX
c1 c2 c3 c4 c7
c5’
c5 c6’
c6
FIX
PULL WITH REBASE
master
$ git pull --rebase
c1 c2 c3 c4 c7
c5 c6
FIX
HEAD
LOCAL
master UPSTREAM
c1 c2 c3 c4 c7
c5’
c5 c6’
c6
FIX
PULL WITH REBASE
master
$ git pull --rebase
c1 c2 c3 c4 c7
c5’
c5 c6’
c6
FIX
HEAD LOCAL
master UPSTREAM
c1 c2 c3 c4 c7
c5’
c5 c6’
c6
FIX
1. TORTURING GIT BY PUSH 16. BRANCH CEMETERY
2. BROKEN TIME MACHINE 17. UNCONTROLLED POWER
3. LONG LIVING BRANCHES 18. WEB OF REPOSITORIES
4. TOO LATE TO VALIDATE 19. ORACLE SYNDROME
5. CHERRY-PICK OVERDOSE 20. WAITING FOR HACKERS
6. LOST IN COMMIT GRAPH 21. EVIL MERGE
7. BUTTON ADDICT 22. BRANCH OVERDOSE
8. TRASH HOUSE 23. CHUCKY THE COMMAND
9. BIG BALL OF MUD 24. NO HERO TO SAVE LIVES
10. AMBIGIOUS COMMIT MESSAGES 25. DUPLICATE COMMITS
11. ZOMBIE REBASE 26. BIG FAT COMMIT
12. CODE LOSING SYNDROME 27. CONFLICT-FOBIA
13. MESS UP WITH THE ROLLBACK 28. MERGE HELL
14. CENTRALIZED GIT 29. F*UCK UP WITH FORCE PUSH
15. MERGE FANATIC 30. LIVING AT DETACHED HEAD STATE
LET’S RECAP
TAG/v1.1
HEAD
master
TAG/v1.1
HEAD
my poor friend
worked for
3 long days
$ git checkout master
login
HEAD
master
TAG/v1.1
when he moved to
another branch, all
commits were gone
$ git reflog
login
HEAD
master
TAG/v1.1
login
HEAD
master
d d a d 6 e
63 0 e w e are
h e o n
t earching for
TAG/v1.1 s
HEAD
master
TAG/v1.1
typofix
HEAD
master
TAG/v1.1
typofix