Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Git: An Illustrated Primer
Search
Daniel Cousineau
July 18, 2012
Programming
4
350
Git: An Illustrated Primer
Given at the July BCSPHP Meeting
Daniel Cousineau
July 18, 2012
Tweet
Share
More Decks by Daniel Cousineau
See All by Daniel Cousineau
Time is a Social Construct
dcousineau
1
610
React @ Scale
dcousineau
0
190
Frontend Performance & You
dcousineau
0
310
Feature Flags & You
dcousineau
2
100
React+Redux @ Scale
dcousineau
1
340
Reframing The Problem - DCJS July 2016
dcousineau
0
140
YAFT
dcousineau
2
150
Queues and the beanstalkd
dcousineau
1
670
How Not Writing PHP Makes You Better At PHP
dcousineau
0
390
Other Decks in Programming
See All in Programming
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
150
【CA.ai #3】ワークフローから見直すAIエージェント — 必要な場面と“選ばない”判断
satoaoaka
0
240
React Native New Architecture 移行実践報告
taminif
1
150
認証・認可の基本を学ぼう前編
kouyuume
0
200
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
390
Cap'n Webについて
yusukebe
0
130
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
140
ID管理機能開発の裏側 高速にSaaS連携を実現したチームのAI活用編
atzzcokek
0
220
Full-Cycle Reactivity in Angular: SignalStore mit Signal Forms und Resources
manfredsteyer
PRO
0
130
俺流レスポンシブコーディング 2025
tak_dcxi
14
8.7k
dotfiles 式年遷宮 令和最新版
masawada
1
760
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
110
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3k
Practical Orchestrator
shlominoach
190
11k
Producing Creativity
orderedlist
PRO
348
40k
The Language of Interfaces
destraynor
162
25k
Navigating Team Friction
lara
191
16k
Context Engineering - Making Every Token Count
addyosmani
9
510
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.2k
How to train your dragon (web standard)
notwaldorf
97
6.4k
A better future with KSS
kneath
240
18k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
720
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
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