Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Git: An Illustrated Primer
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Daniel Cousineau
July 18, 2012
Programming
360
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Git: An Illustrated Primer
Given at the July BCSPHP Meeting
Daniel Cousineau
July 18, 2012
More Decks by Daniel Cousineau
See All by Daniel Cousineau
Time is a Social Construct
dcousineau
1
680
React @ Scale
dcousineau
0
230
Frontend Performance & You
dcousineau
0
380
Feature Flags & You
dcousineau
2
120
React+Redux @ Scale
dcousineau
1
360
Reframing The Problem - DCJS July 2016
dcousineau
0
150
YAFT
dcousineau
2
160
Queues and the beanstalkd
dcousineau
1
710
How Not Writing PHP Makes You Better At PHP
dcousineau
0
410
Other Decks in Programming
See All in Programming
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
210
The Arts and Crafts of Work in the AI Era — Toward Mastery in Software Development
kuranuki
1
750
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
260
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
780
AIで効率化できた業務・日常
ochtum
0
120
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
240
AI 時代のソフトウェア設計の学び方
masuda220
PRO
29
12k
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
160
3Dシーンの圧縮
fadis
1
710
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
710
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
490
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
130
Featured
See All Featured
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
200
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
160
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
1
180
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
570
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
280
Accessibility Awareness
sabderemane
1
140
Color Theory Basics | Prateek | Gurzu
gurzu
0
360
How to train your dragon (web standard)
notwaldorf
97
6.7k
How to Ace a Technical Interview
jacobian
281
24k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
720
Transcript
Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com GIT:
An Illustrated Primer
http://mojolive.com/profile/dcousineau Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
History Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com BitKeeper
No Longer Free To Use Linux Kernel Requires Distributed Performant SVN and CVS... Not So Much “CVS is what we should NOT do...”
Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com GIT
thus,
gItting started Daniel Cousineau // follow me : @dcousineau or
http://dcousineau.com
+OSX Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
http://git-scm.com
+OSX Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
$> /usr/bin/ruby -e \ "$(/usr/bin/curl -fsSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)" $> brew install git $> say "Win!"
+Linux Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
$> sudo apt-get install git $> sudo yum install git $> echo "Seriously?"
+Windows Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
http://windows.github.com
+My First Repo Daniel Cousineau // follow me : @dcousineau
or http://dcousineau.com
+Stage New Files Daniel Cousineau // follow me : @dcousineau
or http://dcousineau.com
+Commit Staging Daniel Cousineau // follow me : @dcousineau or
http://dcousineau.com
+staging? Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
working directory index repository
+staging? Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
working directory index repository “staging”
+staging? Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
working directory index repository modify
+staging? Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
working directory index repository git add
+staging? Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
working directory index repository git commit
+Directories Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
+Modify Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
+Branch! Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
+Back to Master Daniel Cousineau // follow me : @dcousineau
or http://dcousineau.com
+Merge! Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
+stashing Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
+Popping Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
branching Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com a
b c MASTER HEAD
Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com a
b c MASTER DEVELOP create new branch HEAD
Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com a
b c MASTER DEVELOP Checkout new branch HEAD
Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com a
b c MASTER DEVELOP commit to develop d HEAD
Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com commit
to master HEAD a b c MASTER DEVELOP d e
Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com a
b c MASTER DEVELOP merge Develop d e f
Remote Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com SVN
GIT d e b a c d e b a c d d e b a c
Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
+Create a Project Daniel Cousineau // follow me : @dcousineau
or http://dcousineau.com
+Create a Project Daniel Cousineau // follow me : @dcousineau
or http://dcousineau.com
+Doing as I am told Daniel Cousineau // follow me
: @dcousineau or http://dcousineau.com
+did as I was told Daniel Cousineau // follow me
: @dcousineau or http://dcousineau.com
+Push Again! Daniel Cousineau // follow me : @dcousineau or
http://dcousineau.com
+Fetching & Merging Daniel Cousineau // follow me : @dcousineau
or http://dcousineau.com
+Pulling Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
+Two Authors Two Pushes Daniel Cousineau // follow me :
@dcousineau or http://dcousineau.com
+Two Authors Two Pushes Daniel Cousineau // follow me :
@dcousineau or http://dcousineau.com
+AFtermath Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
+Aftermath Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
+Aftermath Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
+AFtermath Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
+forking Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
+pull requests Daniel Cousineau // follow me : @dcousineau or
http://dcousineau.com
+MAke Changes IN A NEW BRANCH Daniel Cousineau // follow
me : @dcousineau or http://dcousineau.com
+Push Changes Daniel Cousineau // follow me : @dcousineau or
http://dcousineau.com
+See Our New Branch Daniel Cousineau // follow me :
@dcousineau or http://dcousineau.com
+Create Pull Request Daniel Cousineau // follow me : @dcousineau
or http://dcousineau.com
+Oh Look, Our Pull Request Daniel Cousineau // follow me
: @dcousineau or http://dcousineau.com
+Oh Look Our Pull Request Daniel Cousineau // follow me
: @dcousineau or http://dcousineau.com
+Oh Look, It’s Merged In! Daniel Cousineau // follow me
: @dcousineau or http://dcousineau.com
+Remotes Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
+Adding Another Remote Daniel Cousineau // follow me : @dcousineau
or http://dcousineau.com
+create and sync new branches Daniel Cousineau // follow me
: @dcousineau or http://dcousineau.com
+Delete local and remote branches Daniel Cousineau // follow me
: @dcousineau or http://dcousineau.com
+Pull From One, Push To Another Daniel Cousineau // follow
me : @dcousineau or http://dcousineau.com
GIT FLow Daniel Cousineau // follow me : @dcousineau or
http://dcousineau.com
http://nvie.com/posts/a-successful-git-branching-model/
Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
Subversion and GIT Daniel Cousineau // follow me : @dcousineau
or http://dcousineau.com
+et voilà Daniel Cousineau // follow me : @dcousineau or
http://dcousineau.com $> git svn clone -s -r 1000:HEAD https://url/to/repo ./wkngcpy $> git svn show-ignore > .gitignore
+Workflow Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
Normal GIT Workflow
+Sync Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
$> git svn dcommit --dry-run $> git svn dcommit $> git svn rebase
+With some caveats Daniel Cousineau // follow me : @dcousineau
or http://dcousineau.com anything that has been dcommit’d is set in stone! do. not. touch. git branches well svn... not so much
+Local Branching Daniel Cousineau // follow me : @dcousineau or
http://dcousineau.com $> git merge --squash branch
Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com git
merge --squash localbrn HEAD a b c MASTER localbrn d e
Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com git
merge --squash localbrn HEAD a b MASTER DEC
+Why? Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
SVN is TERRIBLE at merges git-svn will do it if you don’t and when it fails, it does so spectacularly you’ll just litter your commit history
+tracking svn branches Daniel Cousineau // follow me : @dcousineau
or http://dcousineau.com $> git checkout -t remotes/branchname
+creating remote branches Daniel Cousineau // follow me : @dcousineau
or http://dcousineau.com $> git svn branch -m “Creating new branch” branchname $> git checkout -t remotes/branchname
+personal opinion Daniel Cousineau // follow me : @dcousineau or
http://dcousineau.com except for release tagging and a develop branch don’t bother with remote branching just stick to local and squashes
Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com use
git svn locally push for team adoption procure git server full clone push to new git server
Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com use
git svn locally push for team adoption procure git server full clone push to new git server
Advanced Usage Daniel Cousineau // follow me : @dcousineau or
http://dcousineau.com
+reset my local changes Daniel Cousineau // follow me :
@dcousineau or http://dcousineau.com $> git checkout -- . tell git “no more options!”
+Replay Last commit Daniel Cousineau // follow me : @dcousineau
or http://dcousineau.com $> git reset --mixed REF
+Gitting Ready Daniel Cousineau // follow me : @dcousineau or
http://dcousineau.com
+Results Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
+Undo Last commit Daniel Cousineau // follow me : @dcousineau
or http://dcousineau.com $> git reset --hard HEAD^ HEAD^ means commit prior to HEAD. HEAD^2 is 2 commits prior, etc etc.
+“Oops i forgot to branch” Daniel Cousineau // follow me
: @dcousineau or http://dcousineau.com $> git branch newbranchname $> git reset --hard SHA commit immediately before the intended first commit of our new branch
+“Oops i forgot to branch” Daniel Cousineau // follow me
: @dcousineau or http://dcousineau.com
+“Oops i forgot to branch” Daniel Cousineau // follow me
: @dcousineau or http://dcousineau.com
+“Oops I accidentally the commit message” Daniel Cousineau // follow
me : @dcousineau or http://dcousineau.com $> git rebase --interactive SHA commit immediately preceding the commit in question
+Oops Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
+Lay of the land Daniel Cousineau // follow me :
@dcousineau or http://dcousineau.com
+Making decisions Daniel Cousineau // follow me : @dcousineau or
http://dcousineau.com
+Reach 88MPH Daniel Cousineau // follow me : @dcousineau or
http://dcousineau.com
+Fun with Paradoxes Daniel Cousineau // follow me : @dcousineau
or http://dcousineau.com
+Fruits of our labor Daniel Cousineau // follow me :
@dcousineau or http://dcousineau.com
+“Oops I committed the private key” Daniel Cousineau // follow
me : @dcousineau or http://dcousineau.com $> git filter-branch --index-filter \ 'git rm --cached --ignore-unmatch secret.key' \ --prune-empty --tag-name-filter cat -- --all ಠ_ಠ
+Terrible Mistake Daniel Cousineau // follow me : @dcousineau or
http://dcousineau.com
+gone now, here yesterday Daniel Cousineau // follow me :
@dcousineau or http://dcousineau.com
+VooDoo Magic Daniel Cousineau // follow me : @dcousineau or
http://dcousineau.com
+Results Daniel Cousineau // follow me : @dcousineau or http://dcousineau.com
+Cleanup The Mess Daniel Cousineau // follow me : @dcousineau
or http://dcousineau.com
+Look Ma, No secret.key! Daniel Cousineau // follow me :
@dcousineau or http://dcousineau.com
THANKS. FOR YOUR ATTENTION Daniel Cousineau // follow me :
@dcousineau or http://dcousineau.com
+further resources Daniel Cousineau // follow me : @dcousineau or
http://dcousineau.com http://git-scm.com/book FREE! Attribution-NonCommercial-ShareAlike 3.0 Unported https://help.github.com