Git-ing out of your git messes - Fluent Conf 2017

Git-ing out of your
Git messes
Katie Sylor-Miller
@ksylor && @ohshitgit
Etsy is a global marketplace where people around the world connect,
both online and offline, to make, sell and buy unique goods.
Git-ing out of  your git messes - Fluent Conf 2017
Git-ing out of  your git messes - Fluent Conf 2017
Don’t git into a mess
in the first place
Agenda
Fundamental Concepts
Workflow in-depth
Viewing and changing history
Avoiding (and fixing) messes
Commits
Branches
HEAD
History
Fundamental concepts
Commits
Branches
HEAD
History
Fundamental concepts
What’s in a commit
Each commit contains a few pieces of information:
• A snapshot of the entire repo
• Who made this change
• When this change was made
• A message describing the commit
• A pointer to the previous commit
What’s in a commit
SHA-1
Unique
40-char
hash
Each commit contains a few pieces of information:
• A snapshot of the entire repo
• Who made this change
• When this change was made
• A message describing the commit
• A pointer to the previous commit
Commit hashes
a4df41a8045877d50396d00113598e47f6ad10ef
aec561108fd86412c2a9083d7d95ed1668d2f4e4
6dab6a712177cf2dd2cf8b79a2cee24351be60eb
1a3531222242241153ac8a76b752d5f525a99d2c
912bde5d4e5e962269ddff87da83cc5ce55e75d0
Commit hash abbreviations
a4df41a
aec5611
6dab6a7
1a35312
912bde5
Commits
Branches
HEAD
History
Fundamental concepts
Mental model: branches are a linked list
a4df41aaec56116dab6a71a35312 912bde5
A B C D E
Mental model: branches are a linked list
a4df41aaec56116dab6a71a35312 912bde5
• A snapshot of the entire repo
• Who made this change
• When this change was made
• A message describing the commit
• A pointer to the previous commit
A B C D E
Mental model: branches are a linked list
a4df41aaec56116dab6a71a35312 912bde5
• A snapshot of the entire repo
• Who made this change
• When this change was made
• A message describing the commit
• A pointer to the previous commit
A B C D E
Branches are a linked list reference
A4DF41A6DAB6A7
a4df41aaec56116dab6a71a35312 912bde5
A B C D EA B C D E
master
Branches are a linked list reference text file
A4DF41A6DAB6A7
a4df41aaec56116dab6a71a35312 912bde5
master
.git/refs/heads/master
912bde5d4e5e962269ddff87da83cc5ce55e75d0
A B C D E
ksylormiller:~/ohshitgit (master)$ git branch new-branch
19
Create a new branch
New branches are a new reference
A4DF41A6DAB6A7
a4df41aaec56116dab6a71a35312 912bde5
master
new-branch
A B C D E
New branches are a new text file
A4DF41A
a4df41aaec56116dab6a71a35312 912bde5
master
A B C D E
.git/refs/heads/master
912bde5d4e5e962269ddff87da83cc5ce55e75d0
.git/refs/heads/new-branch
912bde5d4e5e962269ddff87da83cc5ce55e75d0
new-branch
Commits
Branches
HEAD
History
Fundamental concepts
HEAD points to your currently checked-out branch
HEAD
a4df41aaec56116dab6a7 912bde5
master
new-branch
B C D E
HEAD is a reference to a reference
HEAD
A4DF41A6DAB6A7
a4df41aaec56116dab6a7 912bde5
master
new-branch
.git/refs/HEAD
ref: refs/heads/master
B C D E
WTF is the HEAD
• The HEAD decides what branch/commit will be the target of
your actions
• There is only one HEAD per repository
• The HEAD is unique to your local install of git
• The history of the HEAD is recorded, which gives you a way
to undo your work (more on this later)
ksylormiller:~/ohshitgit (master)$ git checkout new-branch
26
Change branches
HEAD points to your currently checked-out branch
HEAD
a4df41aaec56116dab6a7 912bde5
master
new-branch
.git/refs/HEAD
ref: refs/heads/master
B C D E
ksylormiller:~/ohshitgit (master)$ git commit -m “Your message here”
28
Add a new commit to our branch
A new commit becomes the new HEAD
1668d2f
HEAD
a4df41aaec56116dab6a7 912bde5
master
new-branch
B C D E F
Commits
Branches
HEAD
History
Fundamental concepts
History is a linked list
1668d2fa4df41aaec56116dab6a7 912bde5
master
new-branch
B C D E F
History is a linked list tree
master
ca53f4f
1668d2f
a4df41a 912bde5
new-branch
3de21fa
C D E
F
G H
ca53f4f
1668d2f
fd4ab1a
912bde5
3de21fa
new-branch
86bcaed 2d3a4da
whee
3037cf2
master
44ff212
4aa3b5f
c1d2ea8 40648a8
5ae77a5
omg-stop
fd4ab1a
and-another
History is a linked list tree directed acyclic graph
f6e51fd
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
Environments
A simple workflow
A complicated workflow
Workflows in depth
Environments
A simple workflow
A complicated workflow
Workflows in depth
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
Central server where
shared git repositories
are stored
--
Remotes typically are
“bare” - you can’t
directly modify them
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
Your local copy of the
remote git repository
--
Lives in a .git folder
--
Contains the entire
history of a remote repo
plus local changes
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
Snapshot of changes to
the current branch that
you want to commit
--
Is a copy of all of the
files in the repo, not just
the changed files
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
Where changes to
files are made
--
Analogous to the
physical directory
where files are stored
on disk
Environments
A simple workflow
A complicated workflow
Workflows in depth
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
MASTER MASTER
baz.php
foo.php
bar.php
baz.php
foo.php
bar.php
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
MASTER MASTER
baz.php
foo.php
bar.php
baz.php
foo.php
bar.php
git status
is your BFF
by Etsy seller SmittenKittenKendall
ksylormiller:~/ohshitgit (master)$ git status
On branch master
Your branch is up-to-date with ‘origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: bar.php
no changes added to commit (use "git add" and/or "git commit -a”)
44
git status is your BFF
ksylormiller:~/ohshitgit (master)$ git add bar.php
45
git add
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
MASTER MASTER
baz.php
foo.php
bar.php
baz.php
foo.php
bar.php
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
MASTER MASTER
baz.php
foo.php
bar.php
baz.php
foo.php
bar.php
ksylormiller:~/ohshitgit (master)$ git commit -m "Meaningful commit message"
[master 4875652] Meaningful commit message
1 file changed, 1 insertion(+)
48
git commit
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
MASTER
MASTER
baz.php
foo.php
bar.php
ksylormiller:~/ohshitgit (master)$ git push
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 328 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/ksylor/fluent-example.git
4875652..97e8858 master -> master
50
git push
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
MASTER
MASTER
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
MASTER MASTER
But… it’s usually not
that simple
Environments
A simple workflow
A complicated workflow
Workflows in depth
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
MASTER
MASTER
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
MASTER
ORIGIN/
MASTER
MASTER
ksylormiller:~/ohshitgit (master)$ git fetch
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/ksylor/fluent-example
97e8858..8a97966 master -> origin/master
57
git fetch
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
MASTER
ORIGIN/
MASTER
MASTER
ksylormiller:~/ohshitgit (master)$ git merge origin/master
59
git merge
Merge remote-tracking branch 'origin/master'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
~
~
~
~
"~/ohshitgit/.git/MERGE_MSG" 7L, 293C
60
oh god we’re in vim
ksylormiller:~/ohshitgit (master)$ git merge origin/master
Updating 97e8858..8a97966
Fast-forward
README.md | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 README.md
61
git merge complete
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
MASTER
ORIGIN/
MASTER
MASTER
ksylormiller:~/ohshitgit (master)$ git pull
Merge made by the 'recursive' strategy.
README.md | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 README.md
63
git pull == git fetch && git merge
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
MASTER
ORIGIN/
MASTER
MASTER
ksylormiller:~/ohshitgit (master)$ git push
Counting objects: 8, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 537 bytes | 0 bytes/s, done.
Total 5 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 1 local object.
To https://github.com/ksylor/fluent-example.git
8a97966..91f6790 master -> master
65
git push
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
ORIGIN/
MASTER
MASTERMASTER
Rebase all the things!
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
MASTER
ORIGIN/
MASTER
MASTER
ksylormiller:~/ohshitgit (master)$ git rebase origin/master
First, rewinding head to replay your work on top of it...
Applying: Meaningful commit message
69
git rebase
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
MASTER
ORIGIN/
MASTER
MASTER
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
MASTER
ORIGIN/
MASTER
MASTER
ksylormiller:~/ohshitgit (master)$ git pull --rebase
First, rewinding head to replay your work on top of it...
Applying: Meaningful commit message
72
git pull --rebase == git fetch && git rebase
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
MASTER
ORIGIN/
MASTER
MASTER
ksylormiller:~/ohshitgit (master)$ git push
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 331 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/ksylor/fluent-example.git
f6e51fd..3c2335c master -> master
74
git push
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
MASTER
ORIGIN/
MASTER
MASTER
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
MASTER
ORIGIN/
MASTER
MASTER
Viewing history
Changing history
Viewing and changing history
Viewing history
Changing history
Viewing and changing history
View the history of a branch
1668d2f
HEAD
a4df41aaec56116dab6a7 912bde5
master
B C D E F
ksylormiller:~/ohshitgit (master)$ git log
commit 3c2335c50a1ad48a283a475e3d3f9ac445a20ff5
Author: Katie Sylor-Miller <katie@ohshitgit.com>
Date: Thu Jun 8 23:42:05 2017 -0400
Another awesome commit
A detailed message about this commit goes here
commit f6e51fdd6650c7bbc39895c0392ec6a9fb5a9c15
Author: Someone else <someone@ohshitgit.com>
Date: Thu Jun 8 23:39:36 2017 -0400
Oh hai this is a change
commit 4f9a80ff7732f252ffbe7841e96748707da1a78d
80
git log
by Etsy seller Birdwoodshack
git reflog
is your magic
time machine
ksylormiller:~/ohshitgit (master)$ git reflog
3c2335c HEAD@{0}: rebase finished: returning to refs/heads/master
3c2335c HEAD@{1}: pull --rebase: lolz
f6e51fd HEAD@{2}: pull --rebase: checkout f6e51fdd6650c7bbc39895c0392ec6a9fb5a9c15
f4f4d99 HEAD@{3}: reset: moving to HEAD@{4}
f6e51fd HEAD@{4}: reset: moving to HEAD~
1ecad3a HEAD@{5}: rebase finished: returning to refs/heads/master
1ecad3a HEAD@{6}: rebase: lolz
f6e51fd HEAD@{7}: rebase: checkout origin/master
f4f4d99 HEAD@{8}: commit: lolz
4f9a80f HEAD@{9}: commit: Another awesome commit
4875652 HEAD@{10}: commit: Meaningful commit message
82
git reflog
HEAD notation
• HEAD@{index} : go to a specific point
• HEAD~ == HEAD@{currentindex+1} : back one action
• HEAD~x == HEAD@{currentindex+x} : back x actions
• Or, you can always reference by hash
ksylormiller:~/ohshitgit (master)$ git show HEAD@{8}
commit f4f4d996d44bbf824cdd22ace9e6d154d27c9a5d
Author: Katie Sylor-Miller <katie@ohshitgit.com>
Date: Thu Jun 8 23:42:05 2017 -0400
lolz
diff --git a/bar.php b/bar.php
index f81fce0..bdd3cb3 100644
--- a/bar.php
+++ b/bar.php
@@ -1 +1,4 @@
this is a file
-with nothing
+with some lolz
84
git show
ksylormiller:~/ohshitgit (master)$ git checkout HEAD@{8}
Note: checking out 'HEAD@{8}'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD is now at a4df41a... Merge remote-tracking branch 'origin/master'
ksylormiller:~/ohshitgit (master) ((detached from a4df41a))$
85
git checkout
A detached HEAD is when your
HEAD points directly to a
commit or a tracking branch
(not an editable branch)
WTF is a detached HEAD?
post-checkout detached HEAD
1668d2f
HEAD
a4df41aaec56116dab6a7 912bde5
master
B C D E F
Viewing history
Changing history
Viewing and changing history
Changing history of a branch
1668d2f
HEAD
a4df41aaec56116dab6a7
master
B C D E F
912bde5
git reset brings you back to a
previous state in history,
undoing everything that
changed between now and then
Hit the reset button
ksylormiller:~/ohshitgit (master)$ git reflog
1668d2f HEAD@{0}: rebase finished: returning to refs/heads/master
3c2335c HEAD@{1}: pull --rebase: lolz
912bde5 HEAD@{2}: pull --rebase: checkout
f6e51fdd6650c7bbc39895c0392ec6a9fb5a9c15
f4f4d99 HEAD@{3}: commit: lolz
91
git reflog
ksylormiller:~/ohshitgit (master)$ git reset HEAD@{3}
Unstaged changes after reset:
M foo.php
92
git reset
Three basic types of resetting
Discards the changes
from the affected
commits
Leaves the changes
from the affected
commits in the
workspace (default)
--hard--mixed--soft
Leaves the changes
from the affected
commits in staging
Post-reset
1668d2f
HEAD
a4df41aaec56116dab6a7
master
Changes move
to the index
or workspace
or discarded
912bde5
B C D E F
Disclaimer: never
change public history
git revert creates a new commit
that undoes the changes in the
specified commit(s)
Undo a public commit
ksylormiller:~/ohshitgit (master)$ git revert f4f4d99
97
git revert
Revert "lolz"
This reverts commit f4f4d996d44bbf824cdd22ace9e6d154d27c9a5d.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Your branch is ahead of 'origin/master' by 3 commits.
# (use "git push" to publish your local commits)
#
# Changes to be committed:
# modified: bar.php
#
~
"~/ohshitgit/.git/COMMIT_EDITMSG" 14L, 450C
98
ugh, vim again
ksylormiller:~/ohshitgit (master)$ git revert
f4f4d996d44bbf824cdd22ace9e6d154d27c9a5d
[master b483271] Revert "lolz"
1 file changed, 3 deletions(-)
99
git revert complete
Post-revert
1668d2f
HEAD
a4df41aaec5611 b75fb8b912bde5
master
reverts changes from
C D E F G
Always be committing
Always be branching
Avoiding & getting out of messes
Always be committing
Always be branching
Avoiding & getting out of messes
Lots of commits are better
• Commits are cheap and easy
• Save your progress over time
• Easier to backtrack if you screw up
• Less chance of committing the wrong thing when you are
reviewing small changes
Problem: Committing
the wrong thing
• Set up your command line to show you what branch you are on
• Use .gitignore to your advantage
• Remember git status is your BFF
• Understand how staging works (subsequent changes to a file
are not reflected)
Avoid the problem: Committing the wrong thing
ksylormiller:~/ohshitgit (master)$ git commit --amend
# insert vim here
106
Fix the problem: Entering the wrong commit message
ksylormiller:~/ohshitgit (master)$ git commit --amend
[master f0c2e62] My correct commit message
1 file changed, 3 deletions(-)
107
Fix the problem: Entering the wrong commit message
ksylormiller:~/ohshitgit (master)$ git add file/i/forgot/to/commit.ext
ksylormiller:~/ohshitgit (master)$ git commit --amend —no-edit
[master 014035a] My correct commit message
1 file changed, 1 insertion(+), 3 deletions(-)
108
Fix the problem: Forgetting to commit a file
Always be committing
Always be branching
Avoiding & getting out of messes
• Safety net: you aren’t changing master directly until your
feature is ready for prime time
• Allows you to switch between tasks/manage unrelated
changes
• Share larger features or long-term work with your team and
preserve its history
• Caution: Don’t use long-lived feature branches
Why a feature branch workflow is better
Problem: Staying up
to date
MERGE
Adds a new commit to
your feature branch.
You are resolving
potential conflicts created
by other people’s code.
Replays your commits on
top of the latest of master.
You are resolving
potential conflicts created
by your own code.
REBASE
Merge vs. rebase
Problem: Rebasing
kinda sucks
ksylormiller:~/ohshitgit (feature-branch)$ git rebase -i HEAD~2
114
Avoid the problem: Combine commits before rebasing
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
MASTER
ORIGIN/
MASTER
FEATURE-
BRANCH
MASTER
pick 2f5bae4 example feature branch
pick 0ee2a20 Another commit
# Rebase aaff258..0ee2a20 onto aaff258
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
~
"~/ohshitgit/.git/rebase-merge/git-rebase-todo" 20L, 670C
116
Interactive rebase
pick 2f5bae4 example feature branch
fixup 0ee2a20 Another commit
# Rebase aaff258..0ee2a20 onto aaff258
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
~
"~/ohshitgit/.git/rebase-merge/git-rebase-todo" 20L, 670C
117
Interactive rebase
ksylormiller:~/ohshitgit (feature-branch)$ git rebase -i HEAD~2
[detached HEAD a682e3a] example feature branch
3 files changed, 5 insertions(+)
Successfully rebased and updated refs/heads/feature-branch.
118
Avoid rebasing problems: combine commits
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
MASTER
ORIGIN/
MASTER
FEATURE-
BRANCH
MASTER
Problem: Merging
back into master
Git-ing out of  your git messes - Fluent Conf 2017
REMOTE/ORIGIN
Your machineGithub
LOCAL STAGING/INDEX WORKSPACE
MASTER
FEATURE-
BRANCH
Problem: Merge
conflicts
• Update your local master and origin/master all.the.time.
• Rebase your feature branches to stay up to date
• Periodically squash feature branch commits to reduce the
number of conflicts to resolve (esp. when rebasing)
• Communication with teammates
• If things don’t seem right, abort!
Avoid the problem: Merge conflicts
Git-ing out of  your git messes - Fluent Conf 2017
ksylormiller:~/ohshitgit (master)$ git diff --check
foo.php:1: leftover conflict marker
foo.php:4: leftover conflict marker
foo.php:5: trailing whitespace.
+fdfakadsfldjfasd^M
foo.php:6: leftover conflict marker
126
check your diffs before committing!
That’s it! Easy, right?
• Understand the fundamentals (commits, branches, HEAD,
history, workflows)
• Know how to view & fix history (reflog is git’s magic time
machine)
• Always be committing
• Always be branching (but stay up to date)
• DON’T PANIC, everything is fixable
Avoid git messes in the first place
If all else fails
ohshitgit.com
Thank you!
@ksylor
@ohshitgit
1 of 130

Recommended

GIT in a nutshellGIT in a nutshell
GIT in a nutshellalignan
309 views30 slides
Git SCMGit SCM
Git SCMStefan Prutianu
2.5K views41 slides

More Related Content

What's hot

Git for beginnerGit for beginner
Git for beginnerTrung Huynh
1.3K views32 slides
Git Git
Git Dong-Yi Wu
216 views39 slides

What's hot(20)

Git for beginnerGit for beginner
Git for beginner
Trung Huynh1.3K views
Git Git
Git
Dong-Yi Wu216 views
Git Basics at Rails UndergroundGit Basics at Rails Underground
Git Basics at Rails Underground
Ariejan de Vroom1.6K views
Git session Dropsolid.comGit session Dropsolid.com
Git session Dropsolid.com
dropsolid912 views
Learn Git BasicsLearn Git Basics
Learn Git Basics
Prakash Dantuluri736 views
Git for the absolute beginnersGit for the absolute beginners
Git for the absolute beginners
Gabriele Baldassarre2K views
Basic Git IntroBasic Git Intro
Basic Git Intro
Yoad Snapir6.2K views
Gitting out of troubleGitting out of trouble
Gitting out of trouble
Jon Senchyna69 views
Introduction to Git and GitHubIntroduction to Git and GitHub
Introduction to Git and GitHub
Bioinformatics and Computational Biosciences Branch46.1K views
Basic GitBasic Git
Basic Git
Knut Haugen310 views
Git RealGit Real
Git Real
Gong Haibing696 views
Git & GitHub WorkShopGit & GitHub WorkShop
Git & GitHub WorkShop
SheilaJimenezMorejon859 views
Git - Basic Crash CourseGit - Basic Crash Course
Git - Basic Crash Course
Nilay Binjola1.6K views
Git   tips and tricksGit   tips and tricks
Git tips and tricks
Chris Ballance420 views
Grokking opensource with githubGrokking opensource with github
Grokking opensource with github
GoogleDeveloperStude4661 views
Use Git like a pro - condensedUse Git like a pro - condensed
Use Git like a pro - condensed
Jesús Miguel Benito Calzada276 views
Git tutorialGit tutorial
Git tutorial
Elli Kanal4.8K views
Git tutorialGit tutorial
Git tutorial
Pham Quy (Jack)4K views
Git real slidesGit real slides
Git real slides
Lucas Couto3.5K views

Similar to Git-ing out of your git messes - Fluent Conf 2017

Version Control & GitVersion Control & Git
Version Control & GitJason Byrne
1.2K views27 slides
GittalkGittalk
Gittalkprtinsley
787 views76 slides

Similar to Git-ing out of your git messes - Fluent Conf 2017(20)

Introduction to Git (Greg Lonnon)Introduction to Git (Greg Lonnon)
Introduction to Git (Greg Lonnon)
Boise Web Technologies Group1.1K views
Git basic commandsGit basic commands
Git basic commands
Adarsh Konchady617 views
Version Control & GitVersion Control & Git
Version Control & Git
Jason Byrne1.2K views
GittalkGittalk
Gittalk
prtinsley787 views
Honestly Git Playground 20190221Honestly Git Playground 20190221
Honestly Git Playground 20190221
Shinho Kang61 views
Git undoGit undo
Git undo
Avilay Parekh1K views
Git internalsGit internals
Git internals
Haggai Philip Zagury2.9K views
Git walkthroughGit walkthrough
Git walkthrough
Bimal Jain25 views
Gitlikeapro 2019Gitlikeapro 2019
Gitlikeapro 2019
Jesús Miguel Benito Calzada44 views
GitGit
Git
Mayank Patel1.5K views
Did you git yet?Did you git yet?
Did you git yet?
Michael Fong148 views
Exprimiendo GITExprimiendo GIT
Exprimiendo GIT
betabeers874 views
Git tutorialGit tutorial
Git tutorial
mobaires1K views
Git cheat sheet with diagram-5.pdfGit cheat sheet with diagram-5.pdf
Git cheat sheet with diagram-5.pdf
NiranjanKumarGanjiku125 views
Keep you GIT history cleanKeep you GIT history clean
Keep you GIT history clean
tomasbro278 views
Introducción a git y GitHubIntroducción a git y GitHub
Introducción a git y GitHub
Lucas Videla1.2K views

Recently uploaded(20)

Stone Masonry and Brick Masonry.pdfStone Masonry and Brick Masonry.pdf
Stone Masonry and Brick Masonry.pdf
Mohammed Abdullah Laskar19 views
Paper 3.pdfPaper 3.pdf
Paper 3.pdf
Javad Kadkhodapour6 views
SEMI CONDUCTORSSEMI CONDUCTORS
SEMI CONDUCTORS
pavaniaalla200516 views
FLOW IN PIPES NOTES.pdfFLOW IN PIPES NOTES.pdf
FLOW IN PIPES NOTES.pdf
Dearest Arhelo85 views
Wire Cutting & StrippingWire Cutting & Stripping
Wire Cutting & Stripping
Iwiss Tools Co.,Ltd6 views
Dynamics of Hard-Magnetic Soft MaterialsDynamics of Hard-Magnetic Soft Materials
Dynamics of Hard-Magnetic Soft Materials
Shivendra Nandan13 views
Solar PVSolar PV
Solar PV
Iwiss Tools Co.,Ltd11 views
Wire RopeWire Rope
Wire Rope
Iwiss Tools Co.,Ltd8 views
Saikat Chakraborty Java Oracle Certificate.pdfSaikat Chakraborty Java Oracle Certificate.pdf
Saikat Chakraborty Java Oracle Certificate.pdf
SaikatChakraborty78714811 views
cloud computing-virtualization.pptxcloud computing-virtualization.pptx
cloud computing-virtualization.pptx
RajaulKarim2078 views
String.pptxString.pptx
String.pptx
Ananthi Palanisamy47 views
SWM L1-L14_drhasan (Part 1).pdfSWM L1-L14_drhasan (Part 1).pdf
SWM L1-L14_drhasan (Part 1).pdf
MahmudHasan74787044 views
PlumbingPlumbing
Plumbing
Iwiss Tools Co.,Ltd11 views

Git-ing out of your git messes - Fluent Conf 2017