Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Daily Git
Search
Gabriele Petronella
September 29, 2015
Programming
2
360
Daily Git
A practical dive into everyday-Git
Gabriele Petronella
September 29, 2015
Tweet
Share
More Decks by Gabriele Petronella
See All by Gabriele Petronella
Design System Adventures in React - ReactJS Day 2024
gabro
0
110
Design System Adventures in React
gabro
1
110
Casting Metals
gabro
0
370
Functional Programming in front-end applications
gabro
1
230
Functional Programming in Front-end Applications
gabro
3
190
How to get away with Functional Programming in front-end applications
gabro
3
1.5k
Bridging the tooling gap with Scala.js
gabro
0
290
Monad Transformers Down to Earth
gabro
2
2.7k
Move fast and fix things
gabro
0
350
Other Decks in Programming
See All in Programming
【CA.ai #3】ワークフローから見直すAIエージェント — 必要な場面と“選ばない”判断
satoaoaka
0
240
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
150
20251127_ぼっちのための懇親会対策会議
kokamoto01_metaps
2
430
Giselleで作るAI QAアシスタント 〜 Pull Requestレビューに継続的QAを
codenote
0
170
30分でDoctrineの仕組みと使い方を完全にマスターする / phpconkagawa 2025 Doctrine
ttskch
3
830
Cell-Based Architecture
larchanjo
0
110
Context is King? 〜Verifiability時代とコンテキスト設計 / Beyond "Context is King"
rkaga
9
1.1k
【Streamlit x Snowflake】データ基盤からアプリ開発・AI活用まで、すべてをSnowflake内で実現
ayumu_yamaguchi
1
120
手軽に積ん読を増やすには?/読みたい本と付き合うには?
o0h
PRO
1
170
チームをチームにするEM
hitode909
0
320
AIコーディングエージェント(Manus)
kondai24
0
170
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
6
3.2k
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3k
Automating Front-end Workflow
addyosmani
1371
200k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.2k
Typedesign – Prime Four
hannesfritz
42
2.9k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Become a Pro
speakerdeck
PRO
31
5.7k
4 Signs Your Business is Dying
shpigford
186
22k
Statistics for Hackers
jakevdp
799
230k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
BBQ
matthewcrist
89
9.9k
Transcript
daily git gabriele petronella software engineer @ buildo Twitter: @gabro27
/ @buildoHQ
None
Version control & me 2010-2011: svn 2010-today: git
git add git commit git push git pull
That's it
git is simple
Questions?
None
git is hard
git is java
None
git is (like) java learning it is part of your
job
Takeaways » git is powerful, hence hard » git is
flexible » an idea of the stuff you can do with it
the git model
SVN svn add svn commit git git add git commit
git push
enter the stage
None
let's start! (with the basics)
1. create a new repo
1. create a new repo mkdir darepo cd darepo git
init git commit --allow-empty -m "[init]" http://stackoverflow.com/questions/435646/combine-the-first-two-commits-of-a-git-repository
2. check the repo status
2. check the repo status git status
3. add changes to the index
3. add changes to the index git add .gitignore
3. add changes to the index, the cool way) git
add -p
4. save changes
4. save changes git commit -v
4. (bonus) save changes, the cool way git commit -p
5. Browse the history
5. Browse the history git log
5. browse the history, examples git log --color git log
--color --graph git log --color --graph --oneline git log --color --graph --oneline --decorate
5. browse the history, with style git log --graph --full-history
--all --color -- pretty=format:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s %x20%C(yellow)(%an, %C(white)%ar)"
5. browse the history, à la GitHub git working-history https://gist.github.com/gabro/5883819
6. save changes remotely
6. save changes remotely... git remote add origin
[email protected]
:buildo/git-talk git
push -u origin master
6. ...and get them back git pull --ff # friends
forever <3 shortcut for git fetch git merge --ff origin/master
7. branching
7. branching git branch a-new-feature git checkout a-new-feature or better
git checkout -b a-new-feature
7. merging a branch git checkout master git merge a-new-feature
7. clean-up behind us # delete a branch locally (and
safely) git branch -d a-new-feature # delete a branch remotely git push origin :a-new-feature bonus git branch --merged master | \ grep -v '\\* master' | xargs -n 1 git branch -d
8. ignore stuff
8. ignore stuff in .gitignore npm_modules
Hey how do I...
9. Selectively ignore stuff
9. Selectively ignore stuff *config.json !example_config.json
9. (bonus) fun with directories . !"" foo #"" ignore_me
!"" include_me !"" .gitkeep
9. (bonus) fun with directories /foo !/foo/include_me vs /foo/* !/foo/include_me
http://stackoverflow.com/a/20652768/846273
10. browse the history of a file
10. browse the history of a file git log --follow
/path/to/file
10. browse the history of lines git log -L 1,+10:file.json
10. browse the history of methods/functions/classes git log -L :methodName:path/to/file
None
10. browse the history of methods/functions/classes in ~/.gitconfig [core] attributesfile
= ~/.gitattributes [diff "scala"] xfuncname = "^\\s*(.*(def|object|class|trait) .*)$" in ~/.gitattributes *.scala diff=scala
11. change the remote repo
11. change the remote repo git remote --set-url origin https://github.com/gabro/another-repo
12. move that commit to master?
master feature ! ! ! ! ! ! "##$##% "##$##%
! ! ! ! ! ! ! ! &##'##( &##'##( ! ! ! ! "##$##% "##$##% ! ! !xxxxx! ! ! !xxxxx! &##'##( &#####( ! / ! ________/ "##$##% / ! !/ ! ! &#####(
master ! ! "##$##% !ooooo! !ooooo! feature &#####' ! !
! ! "##$##% "##$##% ! ! ! ! ! ! ! ! &##(##' &##(##' ! ! ! ! "##$##% "##$##% ! ! !xxxxx! ! ! !xxxxx! &##(##' &#####' ! / ! ________/ "##$##% / ! !/ ! ! &#####'
12. move that commit to master? git checkout master git
cherry-pick 231256
13. move to a branch after I've started working
13. move to a branch after I've started working Well,
if you didn't push...
None
13. move to a branch after I've started working git
commit -m "stuff" ...oh sh*t!... git branch new-feature # mark this point as the new branch git reset --hard HEAD~1 # rewind master
14. undo that‽
14. undo that‽ git regret --hard https://github.com/YtvwlD/git-regret
14. undo that‽ ⾠ Delete changes to the working directory
⾠ git reset --hard ⾠ Restore a file to its last committed version ⾠ git checkout /path/to/file
14. undo that‽ Undo last local commit and discard changes
git reset --hard HEAD~1 Undo last local commit git reset --soft HEAD~1
14. undo that‽ Edit last local commit message git commit
--amend
14. undo that‽ Undo last public commit git revert HEAD
14. undo that‽ Edit last public commit message1 1 git
commit --amend; git push -f
None
15. put things away
15. put things away # stash things away git stash
-u # get them back git stash [pop|apply]
16. clean-up branches
16. clean-up branches git rebase -i <some sha> Bonus: find
the fork point git merge-base --fork-point master
17. blame co-workers
17. blame co-workers git blame /path/to/file
17. blame co-workers (the cool way) # now it's bad,
and it was good 10 commits ago git bisect start HEAD HEAD~10 # for each commit we analyze git bisect [good|bad] git bisect log git bisect reset
18. keep a sane workflow
18. keep a sane workflow » small features » short-lived
branches » after merging, no more rebasing » GitHub Flow 2 2 https://guides.github.com/introduction/flow/
useful references » git-scm.com/docs/git-<command> » man git-<command> » try.github.io »
codeschool.com/paths/git » Git Internals by Scott Chacon 3 3 https://github.com/pluralsight/git-internals-pdf
Thank you
Questions?
[email protected]