Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Git: An Illustrated Primer
Search
Daniel Cousineau
July 18, 2012
Programming
370
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
710
React @ Scale
dcousineau
0
250
Frontend Performance & You
dcousineau
0
410
Feature Flags & You
dcousineau
2
130
React+Redux @ Scale
dcousineau
1
370
Reframing The Problem - DCJS July 2016
dcousineau
0
170
YAFT
dcousineau
2
180
Queues and the beanstalkd
dcousineau
1
730
How Not Writing PHP Makes You Better At PHP
dcousineau
0
420
Other Decks in Programming
See All in Programming
AmebaブログはKMPから卒業します
kmars0605
0
310
Spec-Driven Development - Why Vaadin Is the Perfect Fit
simas
PRO
0
190
パスワード再設定メールのURLについて知っておこう
uyuki234
0
200
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
220
[Dev Group Paris Octobre 26] Agentforce, SIforce, Claudeforce, Slackbot… on s'y retrouve ?
nabondance
0
120
Coding with AI: How to trust the storyteller (AWS Community Day Adria, Ljubljana 2026)
slobodan
0
130
最近”作らせてる” ローカルAIアプリの話
akit37
0
520
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
3
1.3k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
510
AI-Powered Domain-Driven Design
ziobrando
0
360
Vue.jsで作る空間解析アプリとCapacitorプラグインのData Bridge
hal_spidernight
1
130
baseline으로 마이그레이션, 리팩토링 안전하게 맡기기
fornewid
1
650
Featured
See All Featured
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Building Better People: How to give real-time feedback that sticks.
wjessup
371
20k
First, design no harm
axbom
PRO
2
1.4k
Bash Introduction
62gerente
615
220k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
750
How STYLIGHT went responsive
nonsquared
100
6.3k
Practical Orchestrator
shlominoach
192
12k
The agentic SEO stack - context over prompts
schlessera
0
990
Automating Front-end Workflow
addyosmani
1370
210k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Abbi's Birthday
coloredviolet
4
11k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
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