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
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
660
React @ Scale
dcousineau
0
210
Frontend Performance & You
dcousineau
0
370
Feature Flags & You
dcousineau
2
110
React+Redux @ Scale
dcousineau
1
350
Reframing The Problem - DCJS July 2016
dcousineau
0
140
YAFT
dcousineau
2
150
Queues and the beanstalkd
dcousineau
1
700
How Not Writing PHP Makes You Better At PHP
dcousineau
0
400
Other Decks in Programming
See All in Programming
new(1.26) ← これすき / kamakura.go #8
utgwkk
0
2.7k
ベクトル検索のフィルタを用いた機械学習モデルとの統合 / python-meetup-fukuoka-06-vector-attr
monochromegane
2
530
Reactive ❤️ Loom: A Forbidden Love Story
franz1981
2
160
20260315 AWSなんもわからん🥲
chiilog
2
170
ふつうの Rubyist、ちいさなデバイス、大きな一年
bash0c7
0
1.1k
20260313 - Grafana & Friends Taipei #1 - Kubernetes v1.36 的開發雜記:那些困在 Alpha 加護病房太久的 Metrics
tico88612
0
230
メッセージングを利用して時間的結合を分離しよう #phperkaigi
kajitack
3
320
Angular-Apps smarter machen mit Gen AI: Lokal und offlinefähig - Hands-on Workshop!
christianliebel
PRO
0
140
Claude Codeログ基盤の構築
giginet
PRO
7
3.6k
Rethinking API Platform Filters
vinceamstoutz
0
620
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
2
390
「接続」—パフォーマンスチューニングの最後の一手 〜点と点を結ぶ、その一瞬のために〜
kentaroutakeda
3
1.9k
Featured
See All Featured
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
230
How to make the Groovebox
asonas
2
2k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
The Pragmatic Product Professional
lauravandoore
37
7.2k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1k
Into the Great Unknown - MozCon
thekraken
40
2.3k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.7k
Utilizing Notion as your number one productivity tool
mfonobong
4
270
Deep Space Network (abreviated)
tonyrice
0
96
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.5k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
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