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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
130
Design System Adventures in React
gabro
1
120
Casting Metals
gabro
0
370
Functional Programming in front-end applications
gabro
1
240
Functional Programming in Front-end Applications
gabro
3
200
How to get away with Functional Programming in front-end applications
gabro
3
1.6k
Bridging the tooling gap with Scala.js
gabro
0
290
Monad Transformers Down to Earth
gabro
2
2.8k
Move fast and fix things
gabro
0
350
Other Decks in Programming
See All in Programming
SourceGeneratorのススメ
htkym
0
190
AIエージェントのキホンから学ぶ「エージェンティックコーディング」実践入門
masahiro_nishimi
4
310
MUSUBIXとは
nahisaho
0
130
Grafana:建立系統全知視角的捷徑
blueswen
0
330
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
370
CSC307 Lecture 07
javiergs
PRO
0
550
Spinner 軸ズレ現象を調べたらレンダリング深淵に飲まれた #レバテックMeetup
bengo4com
1
230
ThorVG Viewer In VS Code
nors
0
760
Vibe Coding - AI 驅動的軟體開發
mickyp100
0
170
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
970
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
990
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.5k
Featured
See All Featured
The Invisible Side of Design
smashingmag
302
51k
Thoughts on Productivity
jonyablonski
74
5k
Skip the Path - Find Your Career Trail
mkilby
0
52
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
77
How STYLIGHT went responsive
nonsquared
100
6k
Ruling the World: When Life Gets Gamed
codingconduct
0
140
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.6k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
240
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
64
The untapped power of vector embeddings
frankvandijk
1
1.6k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
YesSQL, Process and Tooling at Scale
rocio
174
15k
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]