gitを理解するためにおさえておきたい3つの図(工事中)

99
Gitを理解するために おさえておきたい3つの図 開発部 てるー

Upload: teloo

Post on 26-May-2015

269 views

Category:

Software


3 download

TRANSCRIPT

Page 1: Gitを理解するためにおさえておきたい3つの図(工事中)

Gitを理解するためにおさえておきたい3つの図

開発部てるー

Page 2: Gitを理解するためにおさえておきたい3つの図(工事中)

アジェンダ

1. 3つの図の紹介

2. ワークツリー / インデックス / HEAD

3. コミットツリー

4. ローカルとリモートのブランチ

Page 3: Gitを理解するためにおさえておきたい3つの図(工事中)

アジェンダ

1. 3つの図の紹介

2. ワークツリー / インデックス / HEAD

3. コミットツリー

4. ローカルとリモートのブランチ

Page 4: Gitを理解するためにおさえておきたい3つの図(工事中)

こんなことはありませんか?

Gitを使っているけど実はイマイチ理解せずになんとなくで使っている

以降で紹介する3つの図を思い浮かべながら操作をすることでGitをきちんと理解できます。

Page 5: Gitを理解するためにおさえておきたい3つの図(工事中)

ワークツリー / インデックス / HEADワークツリー インデックス HEAD

A’

B’

C

A’

B

C

A

B

C

Page 6: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットツリー

E

A B C D

F

G

HEAD

master

v0.1

parent parent parent

parent parent

pare

nt

parent

Page 7: Gitを理解するためにおさえておきたい3つの図(工事中)

リモート

ローカル

● origin/master● origin/v1.0● origin/v2.0

● master

● master*● v1.0● v2.0*

ローカルとリモートのブランチ

Page 8: Gitを理解するためにおさえておきたい3つの図(工事中)

アジェンダ

1. 3つの図の紹介

2. ワークツリー / インデックス / HEAD

3. コミットツリー

4. ローカルとリモートのブランチ

Page 9: Gitを理解するためにおさえておきたい3つの図(工事中)

用語説明

● ワークツリー○ ファイルシステム上のファイルのことを指す

● インデックス○ コミットする対象を指す

● HEAD○ 現在作業しているブランチの先頭を指す

Page 10: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットまでの例 (1 / 9)ワークツリー インデックス HEAD

A

B

C

A

B

C

A

B

C

Page 11: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットまでの例 (2 / 9)ワークツリー インデックス HEAD

A

emacs A.txt

B

C

A

B

C

A

B

C

Page 12: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットまでの例 (3 / 9)ワークツリー インデックス HEAD

A’

B

C

A

B

C

A

B

C

Page 13: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットまでの例 (4 / 9)ワークツリー インデックス HEAD

A’

emacs B.txt

B

C

A

B

C

A

B

C

Page 14: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットまでの例 (5 / 9)ワークツリー インデックス HEAD

A’

B’

C

A

B

C

A

B

C

Page 15: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットまでの例 (6 / 9)ワークツリー インデックス HEAD

A’

git add A.txt

B’

C

A

B

C

A

B

C

Page 16: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットまでの例 (7 / 9)ワークツリー インデックス HEAD

A’

B’

C

A’

B

C

A

B

C

Page 17: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットまでの例 (8 / 9)ワークツリー インデックス HEAD

A’

git commit

B’

C

A’

B

C

A

B

C

Page 18: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットまでの例 (9 / 9)ワークツリー インデックス HEAD

A’

B’

C

A’

B

C

A’

B

C

Page 19: Gitを理解するためにおさえておきたい3つの図(工事中)

関連するコマンド

● add● commit● status● diff

Page 20: Gitを理解するためにおさえておきたい3つの図(工事中)

git add

● ワークツリー内の変更をインデックスに追加する

● コマンド例○ git add <ファイル名>

Page 21: Gitを理解するためにおさえておきたい3つの図(工事中)

git add <ファイル名> (1 / 3)ワークツリー インデックス ローカルリポジトリ

A’

B

C

A

B

C

A

B

C

Page 22: Gitを理解するためにおさえておきたい3つの図(工事中)

git add <ファイル名> (2 / 3)ワークツリー インデックス ローカルリポジトリ

A’

B

C

A

B

C

A

B

C

git add A.txt

Page 23: Gitを理解するためにおさえておきたい3つの図(工事中)

git add <ファイル名> (3 / 3)ワークツリー インデックス ローカルリポジトリ

A’

B

C

A’

B

C

A

B

C

Page 24: Gitを理解するためにおさえておきたい3つの図(工事中)

git commit

● インデックスの修正内容をHEADにコミットする

● コマンド例○ git commit

Page 25: Gitを理解するためにおさえておきたい3つの図(工事中)

git commit (1 / 3)ワークツリー インデックス ローカルリポジトリ

A’

B’

C’

A’

B’

C

A

B

C

Page 26: Gitを理解するためにおさえておきたい3つの図(工事中)

git commit (2 / 3)ワークツリー インデックス ローカルリポジトリ

A’

B’

C’

A’

B’

C

A

B

C

git commit

Page 27: Gitを理解するためにおさえておきたい3つの図(工事中)

git commit (3 / 3)ワークツリー インデックス ローカルリポジトリ

A’

B’

C’

A’

B’

C

A’

B’

C

Page 28: Gitを理解するためにおさえておきたい3つの図(工事中)

git status

● 状態を表示する

● コマンド例○ git status

Page 29: Gitを理解するためにおさえておきたい3つの図(工事中)

git status$ git status# On branch master# Changes to be committed:# (use "git reset HEAD <file>..." to unstage)## modified: A.txt## 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: B.txt#

Page 30: Gitを理解するためにおさえておきたい3つの図(工事中)

git status$ git status# On branch master# Changes to be committed:# (use "git reset HEAD <file>..." to unstage)## modified: A.txt## 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: B.txt#

インデックス

ワークツリー

HEADが指しているブランチ

Page 31: Gitを理解するためにおさえておきたい3つの図(工事中)

git diff

● 比較する

● コマンド例○ git diff○ git diff --cached○ git diff HEAD

Page 32: Gitを理解するためにおさえておきたい3つの図(工事中)

git diffワークツリー インデックス ローカルリポジトリ

A’

B’

C’

A’

B’

C

A

B

C

Page 33: Gitを理解するためにおさえておきたい3つの図(工事中)

git diff --cachedワークツリー インデックス ローカルリポジトリ

A’

B’

C’

A’

B’

C

A

B

C

Page 34: Gitを理解するためにおさえておきたい3つの図(工事中)

git diff HEADワークツリー インデックス ローカルリポジトリ

A’

B’

C’

A’

B’

C

A

B

C

Page 35: Gitを理解するためにおさえておきたい3つの図(工事中)

アジェンダ

1. 3つの図の紹介

2. ワークツリー / インデックス / HEAD

3. コミットツリー

4. ローカルとリモートのブランチ

Page 36: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットツリーの成長例 (1 / 13)

A

master

HEAD

B

Page 37: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットツリーの成長例 (2 / 13)

A

master

HEAD

B

git branch issue-22

Page 38: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットツリーの成長例 (3 / 13)

A

master

HEAD

B

issue-22

Page 39: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットツリーの成長例 (4 / 13)

A

master

HEAD

B

issue-22

git checkout issue-22

Page 40: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットツリーの成長例 (5 / 13)

A

master

HEAD

B

issue-22

Page 41: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットツリーの成長例 (6 / 13)

A

master

HEAD

B

issue-22

git commit

Page 42: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットツリーの成長例 (7 / 13)

A

master

HEAD

B

issue-22

C

Page 43: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットツリーの成長例 (8 / 13)

A

master

HEAD

B

issue-22

C

git commit

Page 44: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットツリーの成長例 (9 / 13)

A

master

HEAD

B

issue-22

C D

Page 45: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットツリーの成長例 (10 / 13)

A

master

HEAD

B

issue-22

C D

git checkout master

Page 46: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットツリーの成長例 (11 / 13)

A

master

B

C DHEAD

issue-22

Page 47: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットツリーの成長例 (12 / 13)

A

master

B

C DHEAD

issue-22

git merge --no-ff issue-22

Page 48: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットツリーの成長例 (13 / 13)

A

master

B

C DHEAD

issue-22

E

Page 49: Gitを理解するためにおさえておきたい3つの図(工事中)

関連するコマンド

● commit● branch● checkout● merge

Page 50: Gitを理解するためにおさえておきたい3つの図(工事中)

git commit

● HEADが指しているブランチにコミットを追加し、ブランチの先頭もそれに移動させる

● コマンド例○ git commit

Page 51: Gitを理解するためにおさえておきたい3つの図(工事中)

git commit (1 / 3)

A

master

HEAD

B

Page 52: Gitを理解するためにおさえておきたい3つの図(工事中)

git commit (2 / 3)

A

master

HEAD

B

git commit

Page 53: Gitを理解するためにおさえておきたい3つの図(工事中)

git commit (3 / 3)

A

master

HEAD

B C

Page 54: Gitを理解するためにおさえておきたい3つの図(工事中)

git branch

● ブランチに関する操作をする

● コマンド例○ git branch <ブランチ名>

Page 55: Gitを理解するためにおさえておきたい3つの図(工事中)

git branch <ブランチ名> (1 / 3)

A B C

HEAD

master

Page 56: Gitを理解するためにおさえておきたい3つの図(工事中)

git branch <ブランチ名> (2 / 3)

A B C

HEAD

master

git branch v0.1

Page 57: Gitを理解するためにおさえておきたい3つの図(工事中)

git branch <ブランチ名> (3 / 3)

A B C

HEAD

masterv0.1

Page 58: Gitを理解するためにおさえておきたい3つの図(工事中)

git checkout

● HEADが指す箇所を変更する

● コマンド例○ git checkout <ブランチ名>

Page 59: Gitを理解するためにおさえておきたい3つの図(工事中)

git checkout <ブランチ名> (1 / 3)

E

A B C D

F

master

v0.1

HEAD

Page 60: Gitを理解するためにおさえておきたい3つの図(工事中)

git checkout <ブランチ名> (2 / 3)

E

A B C D

F

master

v0.1

git checkout v0.1

HEAD

Page 61: Gitを理解するためにおさえておきたい3つの図(工事中)

git checkout <ブランチ名> (3 / 3)

E

A B C D

F

master

v0.1HEAD

Page 62: Gitを理解するためにおさえておきたい3つの図(工事中)

git merge

● マージする

● コマンド例○ git merge <ブランチ名>○ git merge --no-ff <ブランチ名>○ git merge --ff-only <ブランチ名>

Page 63: Gitを理解するためにおさえておきたい3つの図(工事中)

マージは主に2種類ある

● マージコミットを生成するマージ

● Fast-forward を実施するマージ

Page 64: Gitを理解するためにおさえておきたい3つの図(工事中)

マージコミットを生成するマージ (1 / 3)

D

A B C

EHEAD

master

v0.1

Page 65: Gitを理解するためにおさえておきたい3つの図(工事中)

マージコミットを生成するマージ (2 / 3)

D

A B C

EHEAD

master

v0.1

git merge v0.1

Page 66: Gitを理解するためにおさえておきたい3つの図(工事中)

マージコミットを生成するマージ (3 / 3)

D

A B C

EHEAD

master

v0.1

F

Page 67: Gitを理解するためにおさえておきたい3つの図(工事中)

Fast-forward を実施するマージ (1 / 3)

C

A B

DHEAD

master

v0.1

Page 68: Gitを理解するためにおさえておきたい3つの図(工事中)

Fast-forward を実施するマージ (2 / 3)

C

A B

DHEAD

master

v0.1

git merge v0.1

Page 69: Gitを理解するためにおさえておきたい3つの図(工事中)

Fast-forward を実施するマージ (3 / 3)

C

A B

D

HEAD

masterv0.1

Page 70: Gitを理解するためにおさえておきたい3つの図(工事中)

2つのオプション

● --no-ff○ Fast-forward が実施される条件でマージする際、Fast-

forward せずにマージコミットを生成する○ マージコミットするマージを強制する

● --ff-only○ Fast-forward が実施されない条件でマージを試みると

エラーになる○ Fast-forwardを実施するマージを強制する

Page 71: Gitを理解するためにおさえておきたい3つの図(工事中)

アジェンダ

1. 3つの図の紹介

2. ワークツリー / インデックス / HEAD

3. コミットツリー

4. ローカルとリモートのブランチ

Page 72: Gitを理解するためにおさえておきたい3つの図(工事中)

リモート

ローカル

● origin/master● origin/v1.0● origin/v2.0

● master

● master*● v1.0● v2.0*

ローカルとリモートの動作例 (1 / 9)

Page 73: Gitを理解するためにおさえておきたい3つの図(工事中)

リモート

ローカル

● origin/master● origin/v1.0● origin/v2.0

● master

● master*● v1.0● v2.0*

ローカルとリモートの動作例 (2 / 9)

git fetch origin

Page 74: Gitを理解するためにおさえておきたい3つの図(工事中)

リモート

ローカル

● origin/master*● origin/v1.0● origin/v2.0*

● master

● master*● v1.0● v2.0*

ローカルとリモートの動作例 (3 / 9)

fetch

Page 75: Gitを理解するためにおさえておきたい3つの図(工事中)

リモート

ローカル

● origin/master*● origin/v1.0● origin/v2.0*

● master

● master*● v1.0● v2.0*

ローカルとリモートの動作例 (4 / 9)

git merge --ff-only origin/master

Page 76: Gitを理解するためにおさえておきたい3つの図(工事中)

リモート

ローカル

● origin/master*● origin/v1.0● origin/v2.0*

● master*

● master*● v1.0● v2.0*

ローカルとリモートの動作例 (5 / 9)

merge

Page 77: Gitを理解するためにおさえておきたい3つの図(工事中)

リモート

ローカル

● origin/master*● origin/v1.0● origin/v2.0*

● master*

● master*● v1.0● v2.0*

ローカルとリモートの動作例 (6 / 9)

master に対していろいろ実施

Page 78: Gitを理解するためにおさえておきたい3つの図(工事中)

リモート

ローカル

● origin/master*● origin/v1.0● origin/v2.0*

● master**

● master*● v1.0● v2.0*

ローカルとリモートの動作例 (7 / 9)

Page 79: Gitを理解するためにおさえておきたい3つの図(工事中)

リモート

ローカル

● origin/master*● origin/v1.0● origin/v2.0*

● master**

● master*● v1.0● v2.0*

ローカルとリモートの動作例 (8 / 9)

git push origin master

Page 80: Gitを理解するためにおさえておきたい3つの図(工事中)

リモート

ローカル

● origin/master*● origin/v1.0● origin/v2.0*

● master**

● master**● v1.0● v2.0*

ローカルとリモートの動作例 (9 / 9)

push

Page 81: Gitを理解するためにおさえておきたい3つの図(工事中)

関連するコマンド

● clone● fetch● push

Page 82: Gitを理解するためにおさえておきたい3つの図(工事中)

git clone

● リモートリポジトリを複製する

● コマンド例○ git clone <URL>

Page 83: Gitを理解するためにおさえておきたい3つの図(工事中)

リモート

ローカル

● master● v1.0● v2.0

git clone <URL> (1 / 3)

Page 84: Gitを理解するためにおさえておきたい3つの図(工事中)

リモート

ローカル

● master● v1.0● v2.0

git clone <URL> (2 / 3)

git clone ssh://…

Page 85: Gitを理解するためにおさえておきたい3つの図(工事中)

リモート

ローカル

● origin/master● origin/v1.0● origin/v2.0

● master

● master● v1.0● v2.0

git clone <URL> (3 / 3)

Page 86: Gitを理解するためにおさえておきたい3つの図(工事中)

git fetch

● リモートリポジトリのブランチの内容をローカルのリモートブランチへ同期する

● コマンド例○ git fetch <リモート名>

Page 87: Gitを理解するためにおさえておきたい3つの図(工事中)

リモート

ローカル

● origin/master● origin/v1.0● origin/v2.0

● master

● master*● v1.0● v2.0*

git fetch <リモート名> (1 / 3)

Page 88: Gitを理解するためにおさえておきたい3つの図(工事中)

リモート

ローカル

● origin/master● origin/v1.0● origin/v2.0

● master

● master*● v1.0● v2.0*

git fetch <リモート名> (2 / 3)

git fetch origin

Page 89: Gitを理解するためにおさえておきたい3つの図(工事中)

リモート

ローカル

● origin/master*● origin/v1.0● origin/v2.0*

● master

● master*● v1.0● v2.0*

git fetch <リモート名> (3 / 3)

fetch

Page 90: Gitを理解するためにおさえておきたい3つの図(工事中)

git push

● ローカルブランチをリモートにあるブランチへマージする (Fast-forward Only)

● コマンド例○ git push <リモート名> <リモートにあるブランチ名>

Page 91: Gitを理解するためにおさえておきたい3つの図(工事中)

リモート

ローカル

● origin/master● origin/v1.0● origin/v2.0

● master*

● master● v1.0● v2.0

git push <リモート名> <ブランチ名> (1 / 3)

Page 92: Gitを理解するためにおさえておきたい3つの図(工事中)

リモート

ローカル

● origin/master● origin/v1.0● origin/v2.0

● master*

● master● v1.0● v2.0

git push <リモート名> <ブランチ名> (2 / 3)

git push origin master

Page 93: Gitを理解するためにおさえておきたい3つの図(工事中)

リモート

ローカル

● origin/master● origin/v1.0● origin/v2.0

● master*

● master*● v1.0● v2.0

git push <リモート名> <ブランチ名> (3 / 3)

push

Page 94: Gitを理解するためにおさえておきたい3つの図(工事中)

ま と め

Page 95: Gitを理解するためにおさえておきたい3つの図(工事中)

ワークツリー / インデックス / HEADワークツリー インデックス HEAD

A’

B’

C

A’

B

C

A

B

C

Page 96: Gitを理解するためにおさえておきたい3つの図(工事中)

コミットツリー

E

A B C D

F

G

HEAD

master

v0.1

parent parent parent

parent parent

pare

nt

parent

Page 97: Gitを理解するためにおさえておきたい3つの図(工事中)

リモート

ローカル

● origin/master● origin/v1.0● origin/v2.0

● master

● master*● v1.0● v2.0*

ローカルとリモートのブランチ

Page 98: Gitを理解するためにおさえておきたい3つの図(工事中)

さいごに

今回紹介しなかった操作も、たいていはこれら3つの図で表現できるはずです。

Gitの操作で分からなくなったら、これら3つの図がどのように変化をするのかを想像してみてください。

Page 99: Gitを理解するためにおさえておきたい3つの図(工事中)

お わ り