SlideShare a Scribd company logo
Business Informatics Group
Institute of Software Technology and Interactive Systems
Vienna University of Technology
Favoritenstraße 9-11/188-3, 1040 Vienna, Austria
phone: +43 (1) 58801-18804 (secretary), fax: +43 (1) 58801-18896
office@big.tuwien.ac.at, www.big.tuwien.ac.at
A Brief Introduction to Working with Git
10.03.2014
VUT, Vienna, Austria
Philip Langer
History of Versioning Systems
Based on http://codicesoftware.blogspot.com/2010/11/version-control-
timeline.html
local to central …
central to distributed …
1972
sccs
discourage branching …
everything is a branch …
Git: A Distributed Versioning System
 There is no single repository server
 Every peer is a full repository instance
 Single-peer versioning possible
 Including the complete history
 Committing changes is independent of peers
 Allows disconnected operation
 Collaboration is done by pushing/pulling commits
 Comparable to peer-to-peer networks
 The role of peers is purely organizational
 No technical difference among peers
 Single common central server possible
 One peer happens to be the central repo
 But several other architectures are possible too
 Gate-keeper architecture
 Teams of teams
3
commit
push & pull
push & pull
push & pull
<Bob>
<Alice>
<Sally>
<Server>
<Harry>
push & pull
The Four Layers & Transferring Changes Among Them
 Every repository consists of a
 Workspace
 Index (“staging area”)
 Local repository
 Remote repositories
 …
 Transferring changes
 git add
 workspace to index
 git commit
 index to local branch
 git push
 local branch to remote branch
 …
 Changes are organized in commits
 Each commit has a parent
 The history is basically a DAG
4
Before talking about branches…
Demystifying “git reset”, “git checkout”, and “git revert”
 What is HEAD?
 A reference pointing to the last commit (of the current branch)
 Thus, it will be the parent of the next commit
 Relative commit expressions e.g. with HEAD~2
 git reset [--soft | --mixed | --hard] [commit | reference to commit]
 Resets HEAD in history, index, and/or workspace to [commit]
 git reset --hard
 History, index, and workspace
 git reset [--mixed]
 History and index
 git reset --soft
 Only history
 …
5
default:
HEAD
default:
--mixed
History
Index
Workspace
Head
Before talking about branches…
Demystifying “git reset”, “git checkout”, and “git revert”
 What is HEAD?
 A reference pointing to the last commit (of the current branch)
 Thus, it will be the parent of the next commit
 Relative commit expressions e.g. with HEAD~2
 git reset [--soft | --mixed | --hard] [commit | reference to commit]
 Resets HEAD in history, index, and/or workspace to [commit]
 git reset --hard
 History, index, and workspace
 git reset [--mixed]
 History and index
 git reset --soft
 Only history
 …
6
default:
HEAD
default:
--mixed
History
Index
Workspace
Head
Before talking about branches…
Demystifying “git reset”, “git checkout”, and “git revert”
 What is HEAD?
 A reference pointing to the last commit (of the current branch)
 Thus, it will be the parent of the next commit
 Relative commit expressions e.g. with HEAD~2
 git reset [--soft | --mixed | --hard] [commit | reference to commit]
 Resets HEAD in history, index, and/or workspace to [commit]
 git reset --hard
 History, index, and workspace
 git reset [--mixed]
 History and index
 git reset --soft
 Only history
 …
7
default:
HEAD
default:
--mixed
History
Index
Workspace
Head
Before talking about branches…
Demystifying “git reset”, “git checkout”, and “git revert”
 What is HEAD?
 A reference pointing to the last commit (of the current branch)
 Thus, it will be the parent of the next commit
 Relative commit expressions e.g. with HEAD~2
 git reset [--soft | --mixed | --hard] [commit | reference to commit]
 Resets HEAD in history, index, and/or workspace to [commit]
 git reset --hard HEAD~
 History, index, and workspace
 git reset [--mixed]
 History and index
 git reset --soft
 Only history
 …
8
default:
HEAD
default:
--mixed
History
Index
Workspace
Head
Before talking about branches…
Demystifying “git reset”, “git checkout”, and “git revert”
 What is HEAD?
 A reference pointing to the last commit (of the current branch)
 Thus, it will be the parent of the next commit
 Relative commit expressions e.g. with HEAD~2
 git reset [--soft | --mixed | --hard] [commit | reference to commit]
 Resets HEAD in history, index, and/or workspace to [commit]
 git reset --hard HEAD~
 History, index, and workspace
 git reset [--mixed]
 History and index
 git reset --soft
 Only history
 …
9
default:
HEAD
default:
--mixed
History
Index
Workspace
Head
!
Before talking about branches…
Demystifying “git reset”, “git checkout”, and “git revert”
 What is HEAD?
 A reference pointing to the last commit (of the current branch)
 Thus, it will be the parent of the next commit
 Relative commit expressions e.g. with HEAD~2
 git reset [--soft | --mixed | --hard] [commit | reference to commit]
 Resets HEAD in history, index, and/or workspace to [commit]
 git reset --hard
 History, index, and workspace
 git reset [--mixed]
 History and index
 git reset --soft
 Only history
 …
10
default:
HEAD
default:
--mixed
History
Index
Workspace
Head
Before talking about branches…
Demystifying “git reset”, “git checkout”, and “git revert”
 What is HEAD?
 A reference pointing to the last commit (of the current branch)
 Thus, it will be the parent of the next commit
 Relative commit expressions e.g. with HEAD~2
 git reset [--soft | --mixed | --hard] [commit | reference to commit]
 Resets HEAD in history, index, and/or workspace to [commit]
 git reset --hard
 History, index, and workspace
 git reset [--mixed]
 History and index
 git reset --soft
 Only history
 …
11
default:
HEAD
default:
--mixed
History
Index
Workspace
Head
Reset index
after wrong
add
Before talking about branches…
Demystifying “git reset”, “git checkout”, and “git revert”
 What is HEAD?
 A reference pointing to the last commit (of the current branch)
 Thus, it will be the parent of the next commit
 Relative commit expressions e.g. with HEAD~2
 git reset [--soft | --mixed | --hard] [commit | reference to commit]
 Resets HEAD in history, index, and/or workspace to [commit]
 git reset --hard
 History, index, and workspace
 git reset [--mixed] HEAD~
 History and index
 git reset --soft
 Only history
 …
12
default:
HEAD
default:
--mixed
History
Index
Workspace
Head
Before talking about branches…
Demystifying “git reset”, “git checkout”, and “git revert”
 What is HEAD?
 A reference pointing to the last commit (of the current branch)
 Thus, it will be the parent of the next commit
 Relative commit expressions e.g. with HEAD~2
 git reset [--soft | --mixed | --hard] [commit | reference to commit]
 Resets HEAD in history, index, and/or workspace to [commit]
 git reset --hard
 History, index, and workspace
 git reset [--mixed] HEAD~
 History and index
 git reset --soft
 Only history
 …
13
default:
HEAD
default:
--mixed
History
Index
Workspace
Head
Undo last
commit, however
it‘s still there
Before talking about branches…
Demystifying “git reset”, “git checkout”, and “git revert”
 What is HEAD?
 A reference pointing to the last commit (of the current branch)
 Thus, it will be the parent of the next commit
 Relative commit expressions e.g. with HEAD~2
 git reset [--soft | --mixed | --hard] [commit | reference to commit]
 Resets HEAD in history, index, and/or workspace to [commit]
 git reset --hard
 History, index, and workspace
 git reset [--mixed]
 History and index
 git reset --soft
 Only history
 …
14
default:
HEAD
default:
--mixed
History
Index
Workspace
Head
Does nothing
actualy
(HEAD is default)
Before talking about branches…
Demystifying “git reset”, “git checkout”, and “git revert”
 What is HEAD?
 A reference pointing to the last commit (of the current branch)
 Thus, it will be the parent of the next commit
 Relative commit expressions e.g. with HEAD~2
 git reset [--soft | --mixed | --hard] [commit | reference to commit]
 Resets HEAD in history, index, and/or workspace to [commit]
 git reset --hard
 History, index, and workspace
 git reset [--mixed]
 History and index
 git reset --soft HEAD~
 Only history
 …
15
default:
HEAD
default:
--mixed
History
Index
Workspace
Head
Before talking about branches…
Demystifying “git reset”, “git checkout”, and “git revert”
 What is HEAD?
 A reference pointing to the last commit (of the current branch)
 Thus, it will be the parent of the next commit
 Relative commit expressions e.g. with HEAD~2
 git reset [--soft | --mixed | --hard] [commit | reference to commit]
 Resets HEAD in history, index, and/or workspace to [commit]
 git reset --hard
 History, index, and workspace
 git reset [--mixed]
 History and index
 git reset --soft HEAD~
 Only history
 …
16
default:
HEAD
default:
--mixed
History
Index
Workspace
Head
Undo last
commit, leaving
index untouched
Before talking about branches…
Demystifying “git reset”, “git checkout”, and “git revert”
 What is checkout?
 Get a version from the history
 And overwrite workspace
 (also for creating and changing branches … later)
 git checkout -- <file/s>
 Get version of <file/s> from HEAD
 Overwrite version in workspace
17
History
Index
Workspace
Head
Undo last
commit, leaving
index untouched
Before talking about branches…
Demystifying “git reset”, “git checkout”, and “git revert”
 What is checkout?
 Get a version from the history
 And overwrite workspace
 (also for creating and changing branches … later)
 git checkout -- <file/s>
 Get version of <file/s> from HEAD
 Overwrite version in workspace
18
History
Index
Workspace
Head
Undo local
changes to
workspace.
!
Before talking about branches…
Demystifying “git reset”, “git checkout”, and “git revert”
 What is revert?
 Does not modify history (good if you pushed already)
 Takes a commit from history
 Creates reverse patch
 Commits reverse patch (new commit)
 git revert HEAD~1
19
History
Index
Workspace
Head
Must be clean!
Before talking about branches…
Demystifying “git reset”, “git checkout”, and “git revert”
 What is revert?
 Does not modify history (good if you pushed already)
 Takes a commit from history
 Creates reverse patch
 Commits reverse patch (new commit)
 git revert HEAD~1
20
History
Index
Workspace
Head
Undo commits after
you‘ve already
pushed them.
Must be clean!
Branching
 After all every change (local or remote) is a fork leading to a new branch
 So make branches a first-class concept
 No logical difference between local and remote branches
 Every merge is a branch merge
21
<Bob>
<Server>
<Alice>
Branching
 Each commit has a parent
 A branch is nothing more than a pointer to a commit
22
Current
Branch
Branching
 Each commit has a parent ( DAG)
 A branch is nothing more than a pointer to a commit
23
Branching
 Local branches may link to “tracking branches”
24
Current
Branch
Branching
 Branches can be linked in ./git/config
(links are also created automatically in certain cases;
or may be linked explicitly using git checkout --track)
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = https://code.google.com/a/eclipselabs.org/p/moliz/
[branch "master"]
remote = origin
merge = refs/heads/master
[branch "issue_18_alf"]
remote = origin
merge = refs/heads/issue_18_alf
25
Merging Branches
 git checkout master
git merge iss53
26
Merging Branches
 git checkout master
git merge iss53
27
Note that git pull is a git fetch & git merge
Branching Models of Git
 Several different “models”
 All entirely organizational
 The svn-like model:
 Only one branch
 Only one central repo
 git pull (origin master)
 Apply changes
 git commit (master)
 git push (origin master)
 Good for e.g. papers
 The isolated-development model
 Own branch for current dev
 Own branch for releases
 Own branch for each feature
28
Keeping the History of Topic Branches Clean: Rebase
 git checkout experiment
… // apply changes
git commit -a
git checkout master
git merge experiment
29
Keeping the History of Topic Branches Clean: Rebase
 git checkout experiment
… // apply changes
git commit -a
git checkout master
git merge experiment
30
Keeping the History of Topic Branches Clean: Rebase
 git checkout experiment
… // apply changes
git commit -a
git rebase master
31Rebase is rewriting history! Never rebase pushed history!
Keeping the History of Topic Branches Clean: Rebase
 Improving previous commits
… // apply changes
git commit -a
… // apply changes
git commit -a
git rebase -i HEAD~2
# Rebase 710f0f8..a5f4a0d onto 710f0f8
#
# Commands:
# p, pick = use commit
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
32

More Related Content

PPTX
Git tutorial
PDF
GIT Basics
PPTX
Mercurial for Kittens
PDF
Arnold Bechtoldt, Inovex GmbH Linux systems engineer - Configuration Manageme...
PDF
1. primary dns using bind for a and cname record for ipv4 and ipv6
PDF
HackMTY - GitHub Workshop
PDF
The SaltStack Pub Crawl - Fosscomm 2016
PDF
Pulp - Software Repository Management - a brief introduction
Git tutorial
GIT Basics
Mercurial for Kittens
Arnold Bechtoldt, Inovex GmbH Linux systems engineer - Configuration Manageme...
1. primary dns using bind for a and cname record for ipv4 and ipv6
HackMTY - GitHub Workshop
The SaltStack Pub Crawl - Fosscomm 2016
Pulp - Software Repository Management - a brief introduction

What's hot (20)

PDF
RHive tutorial - HDFS functions
PDF
Configuration management and orchestration with Salt
KEY
Railsconf2011 deployment tips_for_slideshare
TXT
Chapter 03 configuring link aggregation and bridging
PDF
Embedded Systems: Lecture 12: Introduction to Git & GitHub (Part 3)
PDF
Tungsten University: MySQL Multi-Master Operations Made Simple With Tungsten ...
PDF
RHive tutorial - Installation
PDF
Graphing Nagios services with pnp4nagios
PPTX
Linux comands for Hadoop
PPTX
Discovering OpenBSD on AWS
PDF
OpenNebula and SaltStack - OpenNebulaConf 2013
PDF
Git workflows automat-it
PPTX
Supporting Android-based Platform Development in Samsung
PDF
Postgres Vienna DB Meetup 2014
PDF
Koha installation BALID
PDF
Linux Kernel 개발참여방법과 문화 (Contribution)
PDF
Les défis des architectures cloud sur OpenStack
PPTX
Deep Dive in Docker Overlay Networks
DOC
Arp Dan Ipconfig Syntax
PDF
Git hub
RHive tutorial - HDFS functions
Configuration management and orchestration with Salt
Railsconf2011 deployment tips_for_slideshare
Chapter 03 configuring link aggregation and bridging
Embedded Systems: Lecture 12: Introduction to Git & GitHub (Part 3)
Tungsten University: MySQL Multi-Master Operations Made Simple With Tungsten ...
RHive tutorial - Installation
Graphing Nagios services with pnp4nagios
Linux comands for Hadoop
Discovering OpenBSD on AWS
OpenNebula and SaltStack - OpenNebulaConf 2013
Git workflows automat-it
Supporting Android-based Platform Development in Samsung
Postgres Vienna DB Meetup 2014
Koha installation BALID
Linux Kernel 개발참여방법과 문화 (Contribution)
Les défis des architectures cloud sur OpenStack
Deep Dive in Docker Overlay Networks
Arp Dan Ipconfig Syntax
Git hub
Ad

Similar to A Brief Introduction to Working with Git (20)

PDF
Version Control & Git
PPTX
Git like a pro EDD18 - Full edition
PDF
GIT: Content-addressable filesystem and Version Control System
PDF
PPTX
Git basic
PPTX
Git-ing out of your git messes
PDF
Git-ing out of your git messes - Fluent Conf 2017
PDF
Git training
PDF
Atlassian git cheatsheet
PDF
Exprimiendo GIT
PDF
Git internals
PDF
Git cheat-sheet-education
PDF
Techmoneyguide
PDF
Understanding GIT
PDF
Git cheat-sheet-education
PDF
test
PPT
Effective Git with Eclipse
PPTX
Git undo
PPTX
Use Git like a pro - condensed
PDF
Did you git yet?
Version Control & Git
Git like a pro EDD18 - Full edition
GIT: Content-addressable filesystem and Version Control System
Git basic
Git-ing out of your git messes
Git-ing out of your git messes - Fluent Conf 2017
Git training
Atlassian git cheatsheet
Exprimiendo GIT
Git internals
Git cheat-sheet-education
Techmoneyguide
Understanding GIT
Git cheat-sheet-education
test
Effective Git with Eclipse
Git undo
Use Git like a pro - condensed
Did you git yet?
Ad

More from Philip Langer (7)

PDF
Tailor made model comparison: How to customize EMF Compare for your modeling ...
PDF
What every Eclipse developer should know about EMF
PDF
Play Framework: The Basics
PDF
You need to extend your models? EMF Facet vs. EMF Profiles
PDF
Adaptable Model Versioning using Model Transformation By Demonstration
PDF
From UML Profiles to EMF Profiles and Beyond (TOOLS'11)
PDF
Colex: A Web-based Collaborative Conflict Lexicon
Tailor made model comparison: How to customize EMF Compare for your modeling ...
What every Eclipse developer should know about EMF
Play Framework: The Basics
You need to extend your models? EMF Facet vs. EMF Profiles
Adaptable Model Versioning using Model Transformation By Demonstration
From UML Profiles to EMF Profiles and Beyond (TOOLS'11)
Colex: A Web-based Collaborative Conflict Lexicon

Recently uploaded (20)

PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
sap open course for s4hana steps from ECC to s4
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Encapsulation_ Review paper, used for researhc scholars
PPTX
Machine Learning_overview_presentation.pptx
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Empathic Computing: Creating Shared Understanding
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PPTX
A Presentation on Artificial Intelligence
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
A comparative analysis of optical character recognition models for extracting...
MIND Revenue Release Quarter 2 2025 Press Release
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
sap open course for s4hana steps from ECC to s4
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Encapsulation_ Review paper, used for researhc scholars
Machine Learning_overview_presentation.pptx
Review of recent advances in non-invasive hemoglobin estimation
Chapter 3 Spatial Domain Image Processing.pdf
Building Integrated photovoltaic BIPV_UPV.pdf
Advanced methodologies resolving dimensionality complications for autism neur...
Empathic Computing: Creating Shared Understanding
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
A Presentation on Artificial Intelligence
Assigned Numbers - 2025 - Bluetooth® Document
Reach Out and Touch Someone: Haptics and Empathic Computing
Spectral efficient network and resource selection model in 5G networks
MYSQL Presentation for SQL database connectivity
Per capita expenditure prediction using model stacking based on satellite ima...
A comparative analysis of optical character recognition models for extracting...

A Brief Introduction to Working with Git

  • 1. Business Informatics Group Institute of Software Technology and Interactive Systems Vienna University of Technology Favoritenstraße 9-11/188-3, 1040 Vienna, Austria phone: +43 (1) 58801-18804 (secretary), fax: +43 (1) 58801-18896 office@big.tuwien.ac.at, www.big.tuwien.ac.at A Brief Introduction to Working with Git 10.03.2014 VUT, Vienna, Austria Philip Langer
  • 2. History of Versioning Systems Based on http://codicesoftware.blogspot.com/2010/11/version-control- timeline.html local to central … central to distributed … 1972 sccs discourage branching … everything is a branch …
  • 3. Git: A Distributed Versioning System  There is no single repository server  Every peer is a full repository instance  Single-peer versioning possible  Including the complete history  Committing changes is independent of peers  Allows disconnected operation  Collaboration is done by pushing/pulling commits  Comparable to peer-to-peer networks  The role of peers is purely organizational  No technical difference among peers  Single common central server possible  One peer happens to be the central repo  But several other architectures are possible too  Gate-keeper architecture  Teams of teams 3 commit push & pull push & pull push & pull <Bob> <Alice> <Sally> <Server> <Harry> push & pull
  • 4. The Four Layers & Transferring Changes Among Them  Every repository consists of a  Workspace  Index (“staging area”)  Local repository  Remote repositories  …  Transferring changes  git add  workspace to index  git commit  index to local branch  git push  local branch to remote branch  …  Changes are organized in commits  Each commit has a parent  The history is basically a DAG 4
  • 5. Before talking about branches… Demystifying “git reset”, “git checkout”, and “git revert”  What is HEAD?  A reference pointing to the last commit (of the current branch)  Thus, it will be the parent of the next commit  Relative commit expressions e.g. with HEAD~2  git reset [--soft | --mixed | --hard] [commit | reference to commit]  Resets HEAD in history, index, and/or workspace to [commit]  git reset --hard  History, index, and workspace  git reset [--mixed]  History and index  git reset --soft  Only history  … 5 default: HEAD default: --mixed History Index Workspace Head
  • 6. Before talking about branches… Demystifying “git reset”, “git checkout”, and “git revert”  What is HEAD?  A reference pointing to the last commit (of the current branch)  Thus, it will be the parent of the next commit  Relative commit expressions e.g. with HEAD~2  git reset [--soft | --mixed | --hard] [commit | reference to commit]  Resets HEAD in history, index, and/or workspace to [commit]  git reset --hard  History, index, and workspace  git reset [--mixed]  History and index  git reset --soft  Only history  … 6 default: HEAD default: --mixed History Index Workspace Head
  • 7. Before talking about branches… Demystifying “git reset”, “git checkout”, and “git revert”  What is HEAD?  A reference pointing to the last commit (of the current branch)  Thus, it will be the parent of the next commit  Relative commit expressions e.g. with HEAD~2  git reset [--soft | --mixed | --hard] [commit | reference to commit]  Resets HEAD in history, index, and/or workspace to [commit]  git reset --hard  History, index, and workspace  git reset [--mixed]  History and index  git reset --soft  Only history  … 7 default: HEAD default: --mixed History Index Workspace Head
  • 8. Before talking about branches… Demystifying “git reset”, “git checkout”, and “git revert”  What is HEAD?  A reference pointing to the last commit (of the current branch)  Thus, it will be the parent of the next commit  Relative commit expressions e.g. with HEAD~2  git reset [--soft | --mixed | --hard] [commit | reference to commit]  Resets HEAD in history, index, and/or workspace to [commit]  git reset --hard HEAD~  History, index, and workspace  git reset [--mixed]  History and index  git reset --soft  Only history  … 8 default: HEAD default: --mixed History Index Workspace Head
  • 9. Before talking about branches… Demystifying “git reset”, “git checkout”, and “git revert”  What is HEAD?  A reference pointing to the last commit (of the current branch)  Thus, it will be the parent of the next commit  Relative commit expressions e.g. with HEAD~2  git reset [--soft | --mixed | --hard] [commit | reference to commit]  Resets HEAD in history, index, and/or workspace to [commit]  git reset --hard HEAD~  History, index, and workspace  git reset [--mixed]  History and index  git reset --soft  Only history  … 9 default: HEAD default: --mixed History Index Workspace Head !
  • 10. Before talking about branches… Demystifying “git reset”, “git checkout”, and “git revert”  What is HEAD?  A reference pointing to the last commit (of the current branch)  Thus, it will be the parent of the next commit  Relative commit expressions e.g. with HEAD~2  git reset [--soft | --mixed | --hard] [commit | reference to commit]  Resets HEAD in history, index, and/or workspace to [commit]  git reset --hard  History, index, and workspace  git reset [--mixed]  History and index  git reset --soft  Only history  … 10 default: HEAD default: --mixed History Index Workspace Head
  • 11. Before talking about branches… Demystifying “git reset”, “git checkout”, and “git revert”  What is HEAD?  A reference pointing to the last commit (of the current branch)  Thus, it will be the parent of the next commit  Relative commit expressions e.g. with HEAD~2  git reset [--soft | --mixed | --hard] [commit | reference to commit]  Resets HEAD in history, index, and/or workspace to [commit]  git reset --hard  History, index, and workspace  git reset [--mixed]  History and index  git reset --soft  Only history  … 11 default: HEAD default: --mixed History Index Workspace Head Reset index after wrong add
  • 12. Before talking about branches… Demystifying “git reset”, “git checkout”, and “git revert”  What is HEAD?  A reference pointing to the last commit (of the current branch)  Thus, it will be the parent of the next commit  Relative commit expressions e.g. with HEAD~2  git reset [--soft | --mixed | --hard] [commit | reference to commit]  Resets HEAD in history, index, and/or workspace to [commit]  git reset --hard  History, index, and workspace  git reset [--mixed] HEAD~  History and index  git reset --soft  Only history  … 12 default: HEAD default: --mixed History Index Workspace Head
  • 13. Before talking about branches… Demystifying “git reset”, “git checkout”, and “git revert”  What is HEAD?  A reference pointing to the last commit (of the current branch)  Thus, it will be the parent of the next commit  Relative commit expressions e.g. with HEAD~2  git reset [--soft | --mixed | --hard] [commit | reference to commit]  Resets HEAD in history, index, and/or workspace to [commit]  git reset --hard  History, index, and workspace  git reset [--mixed] HEAD~  History and index  git reset --soft  Only history  … 13 default: HEAD default: --mixed History Index Workspace Head Undo last commit, however it‘s still there
  • 14. Before talking about branches… Demystifying “git reset”, “git checkout”, and “git revert”  What is HEAD?  A reference pointing to the last commit (of the current branch)  Thus, it will be the parent of the next commit  Relative commit expressions e.g. with HEAD~2  git reset [--soft | --mixed | --hard] [commit | reference to commit]  Resets HEAD in history, index, and/or workspace to [commit]  git reset --hard  History, index, and workspace  git reset [--mixed]  History and index  git reset --soft  Only history  … 14 default: HEAD default: --mixed History Index Workspace Head Does nothing actualy (HEAD is default)
  • 15. Before talking about branches… Demystifying “git reset”, “git checkout”, and “git revert”  What is HEAD?  A reference pointing to the last commit (of the current branch)  Thus, it will be the parent of the next commit  Relative commit expressions e.g. with HEAD~2  git reset [--soft | --mixed | --hard] [commit | reference to commit]  Resets HEAD in history, index, and/or workspace to [commit]  git reset --hard  History, index, and workspace  git reset [--mixed]  History and index  git reset --soft HEAD~  Only history  … 15 default: HEAD default: --mixed History Index Workspace Head
  • 16. Before talking about branches… Demystifying “git reset”, “git checkout”, and “git revert”  What is HEAD?  A reference pointing to the last commit (of the current branch)  Thus, it will be the parent of the next commit  Relative commit expressions e.g. with HEAD~2  git reset [--soft | --mixed | --hard] [commit | reference to commit]  Resets HEAD in history, index, and/or workspace to [commit]  git reset --hard  History, index, and workspace  git reset [--mixed]  History and index  git reset --soft HEAD~  Only history  … 16 default: HEAD default: --mixed History Index Workspace Head Undo last commit, leaving index untouched
  • 17. Before talking about branches… Demystifying “git reset”, “git checkout”, and “git revert”  What is checkout?  Get a version from the history  And overwrite workspace  (also for creating and changing branches … later)  git checkout -- <file/s>  Get version of <file/s> from HEAD  Overwrite version in workspace 17 History Index Workspace Head Undo last commit, leaving index untouched
  • 18. Before talking about branches… Demystifying “git reset”, “git checkout”, and “git revert”  What is checkout?  Get a version from the history  And overwrite workspace  (also for creating and changing branches … later)  git checkout -- <file/s>  Get version of <file/s> from HEAD  Overwrite version in workspace 18 History Index Workspace Head Undo local changes to workspace. !
  • 19. Before talking about branches… Demystifying “git reset”, “git checkout”, and “git revert”  What is revert?  Does not modify history (good if you pushed already)  Takes a commit from history  Creates reverse patch  Commits reverse patch (new commit)  git revert HEAD~1 19 History Index Workspace Head Must be clean!
  • 20. Before talking about branches… Demystifying “git reset”, “git checkout”, and “git revert”  What is revert?  Does not modify history (good if you pushed already)  Takes a commit from history  Creates reverse patch  Commits reverse patch (new commit)  git revert HEAD~1 20 History Index Workspace Head Undo commits after you‘ve already pushed them. Must be clean!
  • 21. Branching  After all every change (local or remote) is a fork leading to a new branch  So make branches a first-class concept  No logical difference between local and remote branches  Every merge is a branch merge 21 <Bob> <Server> <Alice>
  • 22. Branching  Each commit has a parent  A branch is nothing more than a pointer to a commit 22 Current Branch
  • 23. Branching  Each commit has a parent ( DAG)  A branch is nothing more than a pointer to a commit 23
  • 24. Branching  Local branches may link to “tracking branches” 24 Current Branch
  • 25. Branching  Branches can be linked in ./git/config (links are also created automatically in certain cases; or may be linked explicitly using git checkout --track) [remote "origin"] fetch = +refs/heads/*:refs/remotes/origin/* url = https://code.google.com/a/eclipselabs.org/p/moliz/ [branch "master"] remote = origin merge = refs/heads/master [branch "issue_18_alf"] remote = origin merge = refs/heads/issue_18_alf 25
  • 26. Merging Branches  git checkout master git merge iss53 26
  • 27. Merging Branches  git checkout master git merge iss53 27 Note that git pull is a git fetch & git merge
  • 28. Branching Models of Git  Several different “models”  All entirely organizational  The svn-like model:  Only one branch  Only one central repo  git pull (origin master)  Apply changes  git commit (master)  git push (origin master)  Good for e.g. papers  The isolated-development model  Own branch for current dev  Own branch for releases  Own branch for each feature 28
  • 29. Keeping the History of Topic Branches Clean: Rebase  git checkout experiment … // apply changes git commit -a git checkout master git merge experiment 29
  • 30. Keeping the History of Topic Branches Clean: Rebase  git checkout experiment … // apply changes git commit -a git checkout master git merge experiment 30
  • 31. Keeping the History of Topic Branches Clean: Rebase  git checkout experiment … // apply changes git commit -a git rebase master 31Rebase is rewriting history! Never rebase pushed history!
  • 32. Keeping the History of Topic Branches Clean: Rebase  Improving previous commits … // apply changes git commit -a … // apply changes git commit -a git rebase -i HEAD~2 # Rebase 710f0f8..a5f4a0d onto 710f0f8 # # Commands: # p, pick = use commit # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit 32

Editor's Notes

  • #3: Prehistory: Versioning was done manually (file was named main_v2.java)RCS and SCCS: text only, no central repository  only one developerCVS: allowed several developers to collaborate using a central repositorySVN: was getting famous because it was easier to use. But it „evangelized“ everyone on the „mainline development model“  no branching should be used.Bitkeeper: Made distributed versioning (P2P) famous and was used for Linux kernel development and several other agile open source projects.Git: Also distributed; it fostered branching because practically everything is a branch: if you check-out and start working, you just created a branch.