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
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
120
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
LLM Çağında Backend Olmak: 10 Milyon Prompt'u Milisaniyede Sorgulamak
selcukusta
0
140
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
320
The Art of Re-Architecture - Droidcon India 2025
siddroid
0
150
Denoのセキュリティに関する仕組みの紹介 (toranoana.deno #23)
uki00a
0
190
Claude Codeの「Compacting Conversation」を体感50%減! CLAUDE.md + 8 Skills で挑むコンテキスト管理術
kmurahama
1
670
Spinner 軸ズレ現象を調べたらレンダリング深淵に飲まれた #レバテックMeetup
bengo4com
1
200
perlをWebAssembly上で動かすと何が嬉しいの??? / Where does Perl-on-Wasm actually make sense?
mackee
0
240
Implementation Patterns
denyspoltorak
0
140
公共交通オープンデータ × モバイルUX 複雑な運行情報を 『直感』に変換する技術
tinykitten
PRO
0
170
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
440
Giselleで作るAI QAアシスタント 〜 Pull Requestレビューに継続的QAを
codenote
0
320
AIコーディングエージェント(Gemini)
kondai24
0
310
Featured
See All Featured
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
60
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
200
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
400
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.2k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
2
69
Deep Space Network (abreviated)
tonyrice
0
28
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
410
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.3k
How to make the Groovebox
asonas
2
1.9k
How to train your dragon (web standard)
notwaldorf
97
6.5k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
130
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]