Outline
● What is “git” ?
● Glossary
● Git Clients
● Basic Setup
● Working Model
● Life Cycle
● Basic Operations
● Better Practices
●
● Q&A
What is ‘git’ ?
● a distributed version control system
● a powerful version control tool
● and more...
Glossary
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
https://git-scm.com/docs/gitglossary
Git Clients
https://www.iconfinder.com/iconsets/flat-round-system
https://git-scm.com/downloads/guis
Basic Setup
●
○
●
○
* optional flag
Working Model
Local Centralized
(most case)
Distributed
(github, bitbucket, etc.)
https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control
Life Cycle
Life Cycle
Untracked Staged UnstagedCommitted
object state action
Life Cycle
Untracked Staged UnstagedCommitted
object state action
Life Cycle
Untracked Staged UnstagedCommitted
object state action
Life Cycle
Untracked Staged UnstagedCommitted
object state action
Basic Operations
Basic Operations
Untracked Staged UnstagedCommitted
object state action
new objects
Basic Operations
Untracked Staged UnstagedCommitted
object state action
new objects
$ git init
Basic Operations
Untracked Staged UnstagedCommitted
object state action
new objects
$ git init
Basic Operations
Untracked Staged UnstagedCommitted
object state action
new objects
$ git init $ git add stages objects
Basic Operations
Untracked Staged UnstagedCommitted
object state action
new objects
$ git init $ git add stages objects
$ git
commit
commited objects
now, objects in version control
What’s a commit?
change summaries
change descriptions
author infomation
unique id
git “commit”
Basic Operations
Untracked Staged UnstagedCommitted
object state action
new objects
$ git init $ git add stages objects
$ git
commit
commited objects
something changed !!!
commited objects### objects changes ###
Basic Operations
Untracked Staged UnstagedCommitted
object state action
New objects
$ git init $ git add Stages objects
$ git
commit
Commited objects
changes is now in version control
but having no change descriptions
Unstaged objects### objects changes ###
$ git addStages objects
Basic Operations
Untracked Staged UnstagedCommitted
object state action
New objects
$ git init $ git add Stages objects
$ git
commit
Commited objects
Unstaged objects### objects changes ###
$ git addStages objects
changes is now in version control
with commit descriptions
$ git
commit
Commited objects
Basic Operations
Untracked Staged UnstagedCommitted
object state action
New objects
$ git init $ git add Stages objects
$ git
commit
Commited objects
Unstaged objects### objects changes ###
$ git addStages objects
$ git
commit
Commited objects
Staged objects$ git rm
Basic Operations
Untracked Staged UnstagedCommitted
object state action
New objects
$ git init $ git add Stages objects
$ git
commit
Commited objects
Unstaged objects### objects changes ###
$ git addStages objects
$ git
commit
Commited objects
Staged objects$ git rm
$ git
commit
Commited objects
Object State & Change
Untracked Staged UnstagedCommitted
action
$ git diff
Untracked Staged UnstagedCommitted
action
$ git diff
$ git diff --cached
Object State & Change
Basic Operations (local)
●
●
●
●
●
●
●
Basic Operations (remote)
●
●
●
●
●
●
Better Practices
●
Better Practices
●
●
Subject, length <= 50 chars
But… information not enough
Better Practices
●
●
Better~!!!
Subject, length <= 50 chars
Subject, length <= 50 chars
Blank line between long descriptions and subject
long descriptions, length <= 72 chars
exception: long link, email, etc.
Even Better~!
Take responsibility for your commits :-)
Better Practices
●
●
●
●
http://lmgtfy.com/?q=git+lesson+one
http://lmgtfy.com/?q=git+branch+model
http://lmgtfy.com/?q=git+flow
http://nvie.com/posts/a-successful-git-branching-model/
Advanced Lesson
Advance Operations
●
●
●
●
* commit histroy will be changed, danger!!!
Advance - git revert
A B C D E
HEAD, master
$ git revert D
before change:
A B C D E
HEAD, master
D’
Advance - git reset (1/3)
A B C D E
HEAD, master
$ git reset C
before change:
A B C D E
HEAD, master
Advance - git reset (2/3)
A B C D E
HEAD, master
$ git reset --soft C
before change:
A B C D E
HEAD, master
Advance - git reset (3/3)
A B C D E
HEAD, master
$ git reset --hard C
before change:
A B C
HEAD, master
Advance - git cherry-pick
$ git cherry-pick Y
before change:
A B C D E
HEAD, masterX Y Z
A B C D E
HEAD, masterX Y Z
Y’
feature-A
feature-A
Advance - git rebase
$ git rebase C
before change:
A B C
HEAD, feature -A
X’ Y’ Z’
A B C
HEAD, feature-A
X Y Z
master
master
Advance - git merge (1/4)
$ git merge <branch>
before change:
A B
HEAD, master
X Y Z
HEAD, master, feature-A
A B X Y Z
feature-A
Advance - git merge (2/4)
$ git merge --ff <branch>
before change:
A B
X Y Z
HEAD, master, feature-A
A B X Y Z
HEAD, master
feature-A
Advance - git merge (3/4)
$ git merge --no-ff <branch>
before change:
A B
X Y Z
M
HEAD, master
A B
X Y Z
HEAD, master
feature-A
feature-A
Advance - git merge (4/4)
$ git merge <branch>
$ git merge --ff <branch>
$ git merge --no-ff <branch>
before change:
A B C D E
HEAD, masterX Y Z
A B C D E
X Y Z
M
HEAD, master
feature-A
feature-A
Advance - git pull (1/3)
$ git pull
before change:
A B C D E
HEAD, master origin/master
A B C D E
HEAD, master, origin/master
Advance - git pull (2/3)
$ git pull
before change:
A B C
D E
HEAD, master
origin/master
A B C
D E
HEAD, master
origin/master
M
Advance - git pull (3/3)
$ git pull --rebase
before change:
A B C
D E
origin/master
A B D E C’
HEAD, masterorigin/master
HEAD, master
Useful Links
●
○
○
○
○
○
●
○
○
○
○
Best Tutorials
●
○
●
○
●
○
Question Time
The End~

Git - a powerful version control tool