Advanced GIT - Varwig · Fast-Forward/Git Reset Git always tries to preserve history Fast Forward =...

20
Advanced GIT Jan Varwig jan.varwig. org twitter.com/agento Montag, 28. März 2011

Transcript of Advanced GIT - Varwig · Fast-Forward/Git Reset Git always tries to preserve history Fast Forward =...

Page 1: Advanced GIT - Varwig · Fast-Forward/Git Reset Git always tries to preserve history Fast Forward = Reset instead of Merge Because this reset does not lose history ... Rebase git

Advanced GITJan Varwig

jan.varwig.org

twitter.com/agento

Montag, 28. März 2011

Page 2: Advanced GIT - Varwig · Fast-Forward/Git Reset Git always tries to preserve history Fast Forward = Reset instead of Merge Because this reset does not lose history ... Rebase git

Git Basics

How Git works on a low level

Understand concepts better

Be able to read documentation

Montag, 28. März 2011

Page 3: Advanced GIT - Varwig · Fast-Forward/Git Reset Git always tries to preserve history Fast Forward = Reset instead of Merge Because this reset does not lose history ... Rebase git

Git is so awesome

Montag, 28. März 2011

Page 4: Advanced GIT - Varwig · Fast-Forward/Git Reset Git always tries to preserve history Fast Forward = Reset instead of Merge Because this reset does not lose history ... Rebase git

Subversion

Montag, 28. März 2011

Page 5: Advanced GIT - Varwig · Fast-Forward/Git Reset Git always tries to preserve history Fast Forward = Reset instead of Merge Because this reset does not lose history ... Rebase git

Git

Montag, 28. März 2011

Page 6: Advanced GIT - Varwig · Fast-Forward/Git Reset Git always tries to preserve history Fast Forward = Reset instead of Merge Because this reset does not lose history ... Rebase git

Git is so awesome

I can haz Datenstrukturen?

Fuck yeah .git

Branches WTF

OMG Rebase

I herd u liek Push/Pull

Tricks

Montag, 28. März 2011

Page 7: Advanced GIT - Varwig · Fast-Forward/Git Reset Git always tries to preserve history Fast Forward = Reset instead of Merge Because this reset does not lose history ... Rebase git

Git is so stupid

Directed object graph

Only 4 data types

Commit

Tree

Blob

Tag

Inspect objects with git cat-file -p <object>

Montag, 28. März 2011

Page 9: Advanced GIT - Varwig · Fast-Forward/Git Reset Git always tries to preserve history Fast Forward = Reset instead of Merge Because this reset does not lose history ... Rebase git

Pointers

Branches are pointers to commits

Types of branches

Local

Remote

Misnamed

Located in .git/refs/heads

Montag, 28. März 2011

Page 10: Advanced GIT - Varwig · Fast-Forward/Git Reset Git always tries to preserve history Fast Forward = Reset instead of Merge Because this reset does not lose history ... Rebase git

Fast-Forward/Git reset

Montag, 28. März 2011

Page 11: Advanced GIT - Varwig · Fast-Forward/Git Reset Git always tries to preserve history Fast Forward = Reset instead of Merge Because this reset does not lose history ... Rebase git

Fast-Forward/Git Reset

Git always tries to preserve history

Fast Forward = Reset instead of Merge

Because this reset does not lose history

Montag, 28. März 2011

Page 12: Advanced GIT - Varwig · Fast-Forward/Git Reset Git always tries to preserve history Fast Forward = Reset instead of Merge Because this reset does not lose history ... Rebase git

R.E.B.A.S.E.It’s like Skynet for Commits

Montag, 28. März 2011

Page 13: Advanced GIT - Varwig · Fast-Forward/Git Reset Git always tries to preserve history Fast Forward = Reset instead of Merge Because this reset does not lose history ... Rebase git

Rebase

git rebase --onto <newbase> <upstream> [<branch>]

git rebase <newbase/upstream> [<branch>]

Commits in <branch>, that aren’t in <upstream> are applied to <newbase>, the result is the new state of <branch>

git rebase --interactive

git rebase --continue | --skip | --abort

Montag, 28. März 2011

Page 14: Advanced GIT - Varwig · Fast-Forward/Git Reset Git always tries to preserve history Fast Forward = Reset instead of Merge Because this reset does not lose history ... Rebase git

Push/Pull

Montag, 28. März 2011

Page 15: Advanced GIT - Varwig · Fast-Forward/Git Reset Git always tries to preserve history Fast Forward = Reset instead of Merge Because this reset does not lose history ... Rebase git

Push/Pull

git push <remote> refs/tags/<tag>:refs/tags/<tag>

git fetch

git pull = git fetch + git merge

Montag, 28. März 2011

Page 16: Advanced GIT - Varwig · Fast-Forward/Git Reset Git always tries to preserve history Fast Forward = Reset instead of Merge Because this reset does not lose history ... Rebase git

Refspecs

git push <remote> refs/tags/<tag>:refs/tags/<tag>Disambiguation1. .git/<name>(HEAD, FETCH_HEAD, ORIG_HEAD, MERGE_HEAD

and CHERRY_PICK_HEAD); 2. refs/<name>3. refs/tags/<name>4. refs/heads/<name>5. refs/remotes/<name>6. refs/remotes/<name>/HEAD

Montag, 28. März 2011

Page 17: Advanced GIT - Varwig · Fast-Forward/Git Reset Git always tries to preserve history Fast Forward = Reset instead of Merge Because this reset does not lose history ... Rebase git

Tricks

Montag, 28. März 2011

Page 18: Advanced GIT - Varwig · Fast-Forward/Git Reset Git always tries to preserve history Fast Forward = Reset instead of Merge Because this reset does not lose history ... Rebase git

Config Settings

alias.reb=!BASE=$(git log --merges -n 1 --format=%H) && git rebase -i $BASE

merge.conflictstyle=diff3

rebase.autosquash=true

branch.master.rebase=true

branch.autosetuprebase=always

Montag, 28. März 2011

Page 19: Advanced GIT - Varwig · Fast-Forward/Git Reset Git always tries to preserve history Fast Forward = Reset instead of Merge Because this reset does not lose history ... Rebase git

RTFMRead the fucking manpage

Montag, 28. März 2011

Page 20: Advanced GIT - Varwig · Fast-Forward/Git Reset Git always tries to preserve history Fast Forward = Reset instead of Merge Because this reset does not lose history ... Rebase git

KTHXBYEJan Varwig

jan.varwig.org

twitter.com/agento

Montag, 28. März 2011