SlideShare ist ein Scribd-Unternehmen logo
1 von 99
Downloaden Sie, um offline zu lesen
Gitを理解するために 
おさえておきたい3つの図 
開発部 
てるー
アジェンダ 
1. 3つの図の紹介 
2. ワークツリー / インデックス / HEAD 
3. コミットツリー 
4. ローカルとリモートのブランチ
アジェンダ 
1. 3つの図の紹介 
2. ワークツリー / インデックス / HEAD 
3. コミットツリー 
4. ローカルとリモートのブランチ
こんなことはありませんか? 
Gitを使っているけど実はイマイチ理解せずになん 
となくで使っている 
以降で紹介する3つの図を思い浮かべながら操作 
をすることでGitをきちんと理解できます。
ワークツリー / インデックス / HEAD 
ワークツリーインデックスHEAD 
A’ 
B’ 
C 
A’ 
B 
C 
A 
B 
C
コミットツリー 
E 
F 
parent 
A B C D 
G 
HEAD 
master 
v0.1 
parent parent parent 
parent 
parent 
parent
ローカルとリモートのブランチ 
リモート 
ローカル 
● origin/master 
● origin/v1.0 
● origin/v2.0 
● master 
● master* 
● v1.0 
● v2.0*
アジェンダ 
1. 3つの図の紹介 
2. ワークツリー / インデックス / HEAD 
3. コミットツリー 
4. ローカルとリモートのブランチ
用語説明 
● ワークツリー 
○ ファイルシステム上のファイルのことを指す 
● インデックス 
○ コミットする対象を指す 
● HEAD 
○ 現在作業しているブランチの先頭を指す
コミットまでの例 (1 / 9) 
ワークツリーインデックスHEAD 
A 
B 
C 
A 
B 
C 
A 
B 
C
コミットまでの例 (2 / 9) 
ワークツリーインデックスHEAD 
A 
B 
C 
emacs A.txt 
A 
B 
C 
A 
B 
C
コミットまでの例 (3 / 9) 
ワークツリーインデックスHEAD 
A’ 
B 
C 
A 
B 
C 
A 
B 
C
コミットまでの例 (4 / 9) 
ワークツリーインデックスHEAD 
A’ 
B 
C 
emacs B.txt 
A 
B 
C 
A 
B 
C
コミットまでの例 (5 / 9) 
ワークツリーインデックスHEAD 
A’ 
B’ 
C 
A 
B 
C 
A 
B 
C
コミットまでの例 (6 / 9) 
ワークツリーインデックスHEAD 
A’ 
B’ 
C 
git add A.txt 
A 
B 
C 
A 
B 
C
コミットまでの例 (7 / 9) 
ワークツリーインデックスHEAD 
A’ 
B’ 
C 
A’ 
B 
C 
A 
B 
C
コミットまでの例 (8 / 9) 
ワークツリーインデックスHEAD 
A’ 
B’ 
C 
git commit 
A’ 
B 
C 
A 
B 
C
コミットまでの例 (9 / 9) 
ワークツリーインデックスHEAD 
A’ 
B’ 
C 
A’ 
B 
C 
A’ 
B 
C
関連するコマンド 
● add 
● commit 
● status 
● diff
git add 
● ワークツリー内の変更をインデックスに追加す 
る 
● コマンド例 
○ git add <ファイル名>
git add <ファイル名> (1 / 3) 
ワークツリーインデックスローカルリポジトリ 
A’ 
B 
C 
A 
B 
C 
A 
B 
C
git add <ファイル名> (2 / 3) 
ワークツリーインデックスローカルリポジトリ 
A’ 
B 
C 
A 
B 
C 
A 
B 
C 
git add A.txt
git add <ファイル名> (3 / 3) 
ワークツリーインデックスローカルリポジトリ 
A’ 
B 
C 
A’ 
B 
C 
A 
B 
C
git commit 
● インデックスの修正内容をHEADにコミットする 
● コマンド例 
○ git commit
git commit (1 / 3) 
ワークツリーインデックスローカルリポジトリ 
A’ 
B’ 
C’ 
A’ 
B’ 
C 
A 
B 
C
git commit (2 / 3) 
ワークツリーインデックスローカルリポジトリ 
A’ 
B’ 
C’ 
A’ 
B’ 
C 
A 
B 
C 
git commit
git commit (3 / 3) 
ワークツリーインデックスローカルリポジトリ 
A’ 
B’ 
C’ 
A’ 
B’ 
C 
A’ 
B’ 
C
git status 
● 状態を表示する 
● コマンド例 
○ git status
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 
#
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が指しているブランチ
git diff 
● 比較する 
● コマンド例 
○ git diff 
○ git diff --cached 
○ git diff HEAD
git diff 
ワークツリーインデックスローカルリポジトリ 
A’ 
B’ 
C’ 
A’ 
B’ 
C 
A 
B 
C
git diff --cached 
ワークツリーインデックスローカルリポジトリ 
A’ 
B’ 
C’ 
A’ 
B’ 
C 
A 
B 
C
git diff HEAD 
ワークツリーインデックスローカルリポジトリ 
A’ 
B’ 
C’ 
A’ 
B’ 
C 
A 
B 
C
アジェンダ 
1. 3つの図の紹介 
2. ワークツリー / インデックス / HEAD 
3. コミットツリー 
4. ローカルとリモートのブランチ
コミットツリーの成長例 (1 / 13) 
A 
HEAD 
master 
B
コミットツリーの成長例 (2 / 13) 
A 
HEAD 
master 
B 
git branch issue-22
コミットツリーの成長例 (3 / 13) 
A 
HEAD 
issue-22 
master 
B
コミットツリーの成長例 (4 / 13) 
A 
HEAD 
issue-22 
master 
B 
git checkout issue-22
コミットツリーの成長例 (5 / 13) 
A 
HEAD 
issue-22 
master 
B
コミットツリーの成長例 (6 / 13) 
A 
HEAD 
issue-22 
master 
B 
git commit
コミットツリーの成長例 (7 / 13) 
A 
master 
HEAD 
B 
issue-22 
C
コミットツリーの成長例 (8 / 13) 
A 
master 
HEAD 
B 
issue-22 
C 
git commit
コミットツリーの成長例 (9 / 13) 
A 
master 
HEAD 
B 
issue-22 
C D
コミットツリーの成長例 (10 / 13) 
A 
master 
HEAD 
B 
issue-22 
C D 
git checkout master
コミットツリーの成長例 (11 / 13) 
A 
master 
B 
C D 
HEAD 
issue-22
コミットツリーの成長例 (12 / 13) 
A 
master 
B 
C D 
HEAD 
issue-22 
git merge --no-ff issue-22
コミットツリーの成長例 (13 / 13) 
A 
master 
B 
C D 
HEAD 
issue-22 
E
関連するコマンド 
● commit 
● branch 
● checkout 
● merge
git commit 
● HEADが指しているブランチにコミットを追加し、 
ブランチの先頭もそれに移動させる 
● コマンド例 
○ git commit
git commit (1 / 3) 
A 
HEAD 
master 
B
git commit (2 / 3) 
A 
HEAD 
master 
B 
git commit
git commit (3 / 3) 
A 
HEAD 
master 
B C
git branch 
● ブランチに関する操作をする 
● コマンド例 
○ git branch <ブランチ名>
git branch <ブランチ名> (1 / 3) 
A B C 
HEAD 
master
git branch <ブランチ名> (2 / 3) 
A B C 
HEAD 
master 
git branch v0.1
git branch <ブランチ名> (3 / 3) 
v0.1 
A B C 
HEAD 
master
git checkout 
● HEADが指す箇所を変更する 
● コマンド例 
○ git checkout <ブランチ名>
git checkout <ブランチ名> (1 / 3) 
E 
F 
A B C D 
v0.1 
HEAD 
master
git checkout <ブランチ名> (2 / 3) 
E 
F 
A B C D 
v0.1 
master 
git checkout v0.1 
HEAD
git checkout <ブランチ名> (3 / 3) 
E 
F 
A B C D 
HEAD 
v0.1 
master
git merge 
● マージする 
● コマンド例 
○ git merge <ブランチ名> 
○ git merge --no-ff <ブランチ名> 
○ git merge --ff-only <ブランチ名>
マージは主に2種類ある 
● マージコミットを生成するマージ 
● Fast-forward を実施するマージ
マージコミットを生成するマージ (1 / 3) 
D 
A B C 
E 
HEAD 
master 
v0.1
マージコミットを生成するマージ (2 / 3) 
D 
A B C 
E 
HEAD 
master 
v0.1 
git merge v0.1
マージコミットを生成するマージ (3 / 3) 
D 
A B C 
E 
HEAD 
master 
v0.1 
F
Fast-forward を実施するマージ (1 / 3) 
C 
A B 
D 
HEAD 
master 
v0.1
Fast-forward を実施するマージ (2 / 3) 
C 
A B 
D 
HEAD 
master 
v0.1 
git merge v0.1
Fast-forward を実施するマージ (3 / 3) 
C 
A B 
D 
HEAD 
v0.1 
master
2つのオプション 
● --no-ff 
○ Fast-forward が実施される条件でマージする際、Fast-forward 
せずにマージコミットを生成する 
○ マージコミットするマージを強制する 
● --ff-only 
○ Fast-forward が実施されない条件でマージを試みると 
エラーになる 
○ Fast-forwardを実施するマージを強制する
アジェンダ 
1. 3つの図の紹介 
2. ワークツリー / インデックス / HEAD 
3. コミットツリー 
4. ローカルとリモートのブランチ
ローカルとリモートの動作例 (1 / 9) 
リモート 
ローカル 
● origin/master 
● origin/v1.0 
● origin/v2.0 
● master 
● master* 
● v1.0 
● v2.0*
ローカルとリモートの動作例 (2 / 9) 
リモート 
ローカル 
● origin/master 
● origin/v1.0 
● origin/v2.0 
● master 
● master* 
● v1.0 
● v2.0* 
git fetch origin
ローカルとリモートの動作例 (3 / 9) 
リモート 
ローカル 
● origin/master* 
● origin/v1.0 
● origin/v2.0* 
● master 
● master* 
● v1.0 
● v2.0* 
fetch
ローカルとリモートの動作例 (4 / 9) 
リモート 
ローカル 
● origin/master* 
● origin/v1.0 
● origin/v2.0* 
● master 
● master* 
● v1.0 
● v2.0* 
git merge --ff-only origin/master
ローカルとリモートの動作例 (5 / 9) 
リモート 
ローカル 
● origin/master* 
● origin/v1.0 
● origin/v2.0* 
● master* 
● master* 
● v1.0 
● v2.0* 
merge
ローカルとリモートの動作例 (6 / 9) 
リモート 
ローカル 
● origin/master* 
● origin/v1.0 
● origin/v2.0* 
● master* 
● master* 
● v1.0 
● v2.0* 
master に対していろいろ実施
ローカルとリモートの動作例 (7 / 9) 
リモート 
ローカル 
● origin/master* 
● origin/v1.0 
● origin/v2.0* 
● master** 
● master* 
● v1.0 
● v2.0*
ローカルとリモートの動作例 (8 / 9) 
リモート 
ローカル 
● origin/master* 
● origin/v1.0 
● origin/v2.0* 
● master** 
● master* 
● v1.0 
● v2.0* 
git push origin master
ローカルとリモートの動作例 (9 / 9) 
リモート 
ローカル 
● origin/master* 
● origin/v1.0 
● origin/v2.0* 
● master** 
● master** 
● v1.0 
● v2.0* 
push
関連するコマンド 
● clone 
● fetch 
● push
git clone 
● リモートリポジトリを複製する 
● コマンド例 
○ git clone <URL>
git clone <URL> (1 / 3) 
リモート 
ローカル 
● master 
● v1.0 
● v2.0
git clone <URL> (2 / 3) 
リモート 
ローカル 
● master 
● v1.0 
● v2.0 
git clone ssh://…
git clone <URL> (3 / 3) 
リモート 
ローカル 
● origin/master 
● origin/v1.0 
● origin/v2.0 
● master 
● master 
● v1.0 
● v2.0
git fetch 
● リモートリポジトリのブランチの内容をローカル 
のリモートブランチへ同期する 
● コマンド例 
○ git fetch <リモート名>
git fetch <リモート名> (1 / 3) 
リモート 
ローカル 
● origin/master 
● origin/v1.0 
● origin/v2.0 
● master 
● master* 
● v1.0 
● v2.0*
git fetch <リモート名> (2 / 3) 
リモート 
ローカル 
● origin/master 
● origin/v1.0 
● origin/v2.0 
● master 
● master* 
● v1.0 
● v2.0* 
git fetch origin
git fetch <リモート名> (3 / 3) 
リモート 
ローカル 
● origin/master* 
● origin/v1.0 
● origin/v2.0* 
● master 
● master* 
● v1.0 
● v2.0* 
fetch
git push 
● ローカルブランチをリモートにあるブランチへ 
マージする (Fast-forward Only) 
● コマンド例 
○ git push <リモート名> <リモートにあるブランチ名>
git push <リモート名> <ブランチ名> (1 / 3) 
リモート 
ローカル 
● origin/master 
● origin/v1.0 
● origin/v2.0 
● master* 
● master 
● v1.0 
● v2.0
git push <リモート名> <ブランチ名> (2 / 3) 
リモート 
ローカル 
● origin/master 
● origin/v1.0 
● origin/v2.0 
● master* 
● master 
● v1.0 
● v2.0 
git push origin master
git push <リモート名> <ブランチ名> (3 / 3) 
リモート 
ローカル 
● origin/master 
● origin/v1.0 
● origin/v2.0 
● master* 
● master* 
● v1.0 
● v2.0 
push
ま と め
ワークツリー / インデックス / HEAD 
ワークツリーインデックスHEAD 
A’ 
B’ 
C 
A’ 
B 
C 
A 
B 
C
コミットツリー 
E 
F 
parent 
A B C D 
G 
HEAD 
master 
v0.1 
parent parent parent 
parent 
parent 
parent
ローカルとリモートのブランチ 
リモート 
ローカル 
● origin/master 
● origin/v1.0 
● origin/v2.0 
● master 
● master* 
● v1.0 
● v2.0*
さいごに 
今回紹介しなかった操作も、たいていはこれら3つ 
の図で表現できるはずです。 
Gitの操作で分からなくなったら、これら3つの図が 
どのように変化をするのかを想像してみてくださ 
い。
お わ り

Weitere ähnliche Inhalte

Was ist angesagt?

Let’s translate FuelPHP docs! [RELOADED]
Let’s translate FuelPHP docs! [RELOADED]Let’s translate FuelPHP docs! [RELOADED]
Let’s translate FuelPHP docs! [RELOADED]
Sho A
 
ソースコードリーディングの基礎
ソースコードリーディングの基礎ソースコードリーディングの基礎
ソースコードリーディングの基礎
hogemuta
 
Go言語で作る webアプリ@gocon 2013 spring
Go言語で作る webアプリ@gocon 2013 springGo言語で作る webアプリ@gocon 2013 spring
Go言語で作る webアプリ@gocon 2013 spring
Takuya Ueda
 

Was ist angesagt? (19)

Let’s translate FuelPHP docs! [RELOADED]
Let’s translate FuelPHP docs! [RELOADED]Let’s translate FuelPHP docs! [RELOADED]
Let’s translate FuelPHP docs! [RELOADED]
 
LibreOffice 4 under NetBSD with pkgsrc
LibreOffice 4 under NetBSD with pkgsrcLibreOffice 4 under NetBSD with pkgsrc
LibreOffice 4 under NetBSD with pkgsrc
 
Ipdump
IpdumpIpdump
Ipdump
 
git 初めの一歩
git 初めの一歩git 初めの一歩
git 初めの一歩
 
5分で分かるgitのrefspec
5分で分かるgitのrefspec5分で分かるgitのrefspec
5分で分かるgitのrefspec
 
Altanative macro
Altanative macroAltanative macro
Altanative macro
 
こんにちはGroovy
こんにちはGroovyこんにちはGroovy
こんにちはGroovy
 
最近のRust関連の活動
最近のRust関連の活動最近のRust関連の活動
最近のRust関連の活動
 
5社のGTFSをマージして、PostgreSQLにインポートしてみた
5社のGTFSをマージして、PostgreSQLにインポートしてみた5社のGTFSをマージして、PostgreSQLにインポートしてみた
5社のGTFSをマージして、PostgreSQLにインポートしてみた
 
Pelicanによる www.python.jpの構築
Pelicanによる www.python.jpの構築Pelicanによる www.python.jpの構築
Pelicanによる www.python.jpの構築
 
Common LispでGPGPU
Common LispでGPGPUCommon LispでGPGPU
Common LispでGPGPU
 
ソースコードリーディングの基礎
ソースコードリーディングの基礎ソースコードリーディングの基礎
ソースコードリーディングの基礎
 
githubハンズオン
githubハンズオンgithubハンズオン
githubハンズオン
 
LLdeade Python Language Update
LLdeade Python Language UpdateLLdeade Python Language Update
LLdeade Python Language Update
 
Go言語のスライスを理解しよう
Go言語のスライスを理解しようGo言語のスライスを理解しよう
Go言語のスライスを理解しよう
 
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
 
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツールPyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
 
Git overview (v 0.96)
Git overview (v 0.96)Git overview (v 0.96)
Git overview (v 0.96)
 
Go言語で作る webアプリ@gocon 2013 spring
Go言語で作る webアプリ@gocon 2013 springGo言語で作る webアプリ@gocon 2013 spring
Go言語で作る webアプリ@gocon 2013 spring
 

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

Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Nobuhiro Iwamatsu
 
Gitのよく使うコマンド
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンド
YUKI Kaoru
 
20120324 git training
20120324 git training20120324 git training
20120324 git training
Takeshi AKIMA
 
Git pyfes201207-presen
Git pyfes201207-presenGit pyfes201207-presen
Git pyfes201207-presen
Kouhei Maeda
 

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

Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
 
ソフトウェア工学2023 08 GitHub
ソフトウェア工学2023 08 GitHubソフトウェア工学2023 08 GitHub
ソフトウェア工学2023 08 GitHub
 
Git 入門
Git 入門Git 入門
Git 入門
 
Git (実践入門編)
Git (実践入門編)Git (実践入門編)
Git (実践入門編)
 
Git 勉強会
Git 勉強会Git 勉強会
Git 勉強会
 
Gitのよく使うコマンド
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンド
 
Gitを使ってみませんか
Gitを使ってみませんかGitを使ってみませんか
Gitを使ってみませんか
 
Git lev 1-おひとりさま用-
Git lev 1-おひとりさま用-Git lev 1-おひとりさま用-
Git lev 1-おひとりさま用-
 
Gitの便利ワザ
Gitの便利ワザGitの便利ワザ
Gitの便利ワザ
 
Git 実践入門
Git 実践入門Git 実践入門
Git 実践入門
 
20120324 git training
20120324 git training20120324 git training
20120324 git training
 
Git for beginners
Git for beginnersGit for beginners
Git for beginners
 
Git/GitHub
Git/GitHubGit/GitHub
Git/GitHub
 
Git pyfes201207-presen
Git pyfes201207-presenGit pyfes201207-presen
Git pyfes201207-presen
 
Github第4章
Github第4章Github第4章
Github第4章
 
RedmineとGitとスクラム
RedmineとGitとスクラムRedmineとGitとスクラム
RedmineとGitとスクラム
 
Gitとちょっと仲良くなるために覚えたことまとめ
Gitとちょっと仲良くなるために覚えたことまとめGitとちょっと仲良くなるために覚えたことまとめ
Gitとちょっと仲良くなるために覚えたことまとめ
 
Gitの紹介
Gitの紹介Gitの紹介
Gitの紹介
 
2018 07-18 git-hub講座
2018 07-18 git-hub講座2018 07-18 git-hub講座
2018 07-18 git-hub講座
 
JTF 2013
JTF 2013JTF 2013
JTF 2013
 

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