Git - a powerful version control tool

52

Transcript of Git - a powerful version control tool

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-systemhttps://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 CycleUntracked Staged UnstagedCommitted

object state action

Life CycleUntracked Staged UnstagedCommitted

object state action

Life CycleUntracked Staged UnstagedCommitted

object state action

Life CycleUntracked Staged UnstagedCommitted

object state action

Basic Operations

Basic OperationsUntracked Staged UnstagedCommitted

object state action

new objects

Basic OperationsUntracked Staged UnstagedCommitted

object state action

new objects

$ git init

Basic OperationsUntracked Staged UnstagedCommitted

object state action

new objects

$ git init

Basic OperationsUntracked Staged UnstagedCommitted

object state action

new objects

$ git init $ git add stages objects

Basic OperationsUntracked Staged UnstagedCommitted

object state action

new objects

$ git init $ git add stages objects

$ git commitcommited objects

now, objects in version control

What’s a commit?

change summaries

change descriptions

author infomation

unique id

git “commit”

Basic OperationsUntracked Staged UnstagedCommitted

object state action

new objects

$ git init $ git add stages objects

$ git commitcommited objects

something changed !!!

commited objects### objects changes ###

Basic OperationsUntracked Staged UnstagedCommitted

object state action

New objects

$ git init $ git add Stages objects

$ git commitCommited objects

changes is now in version controlbut having no change descriptions

Unstaged objects### objects changes ###

$ git addStages objects

Basic OperationsUntracked Staged UnstagedCommitted

object state action

New objects

$ git init $ git add Stages objects

$ git commitCommited objects

Unstaged objects### objects changes ###

$ git addStages objects

changes is now in version controlwith commit descriptions

$ git commitCommited objects

Basic OperationsUntracked Staged UnstagedCommitted

object state action

New objects

$ git init $ git add Stages objects

$ git commitCommited objects

Unstaged objects### objects changes ###

$ git addStages objects

$ git commitCommited objects

Staged objects$ git rm

Basic OperationsUntracked Staged UnstagedCommitted

object state action

New objects

$ git init $ git add Stages objects

$ git commitCommited objects

Unstaged objects### objects changes ###

$ git addStages objects

$ git commitCommited objects

Staged objects$ git rm

$ git commitCommited objects

Object State & ChangeUntracked 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 charsBut… 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+onehttp://lmgtfy.com/?q=git+branch+modelhttp://lmgtfy.com/?q=git+flowhttp://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~