実際に見てみよう
% git cat-file-p HEAD
tree 2e4038cce3649c830daaf38f6e411b4d55d5b7ac
parent 897d06bcb89a12574271e74e90048cb26fe5f6bb
author John Smith <js@example.com> 1398774567 +0900
committer John Smith <js@example.com> 1398774567 +0900
Add new file: greeting2.txt
16.
実際に見てみよう
% git cat-file-p HEAD
tree 2e4038cce3649c830daaf38f6e411b4d55d5b7ac
parent 897d06bcb89a12574271e74e90048cb26fe5f6bb
author John Smith <js@example.com> 1398774567 +0900
committer John Smith <js@example.com> 1398774567 +0900
Add new file: greeting2.txt
cat-file: Gitに登録されたオブジェクト(データ)をダンプするコマンド
-p: いい感じの出力にするオプション
HEAD: 最新のコミット
git cat-file -p HEAD
→「最新のコミットオブジェクトをいい感じに表示してくれ」
17.
実際に見てみよう
% git cat-file-p HEAD
tree 2e4038cce3649c830daaf38f6e411b4d55d5b7ac
parent 897d06bcb89a12574271e74e90048cb26fe5f6bb
author John Smith <js@example.com> 1398774567 +0900
committer John Smith <js@example.com> 1398774567 +0900
Add new file: greeting2.txt
tree: ディレクトリツリーのスナップショット
(2e4038…: treeオブジェクトの名前)
18.
実際に見てみよう
% git cat-file-p HEAD
tree 2e4038cce3649c830daaf38f6e411b4d55d5b7ac
parent 897d06bcb89a12574271e74e90048cb26fe5f6bb
author John Smith <js@example.com> 1398774567 +0900
committer John Smith <js@example.com> 1398774567 +0900
Add new file: greeting2.txt
parent: 親コミット
19.
実際に見てみよう
% git cat-file-p HEAD
tree 2e4038cce3649c830daaf38f6e411b4d55d5b7ac
parent 897d06bcb89a12574271e74e90048cb26fe5f6bb
author John Smith <js@example.com> 1398774567 +0900
committer John Smith <js@example.com> 1398774567 +0900
Add new file: greeting2.txt
author: コミット内容の作者+作成日時
committer: authorが作った内容を実際のコミットオブジェクトにした人+日時
大抵の場合 author=committer なので今のところ気にしなくて良い
20.
実際に見てみよう
% git cat-file-p HEAD
tree 2e4038cce3649c830daaf38f6e411b4d55d5b7ac
parent 897d06bcb89a12574271e74e90048cb26fe5f6bb
author John Smith <js@example.com> 1398774567 +0900
committer John Smith <js@example.com> 1398774567 +0900
Add new file: greeting2.txt
“Add new…”: コミットメッセージ
21.
実際に見てみよう
% git cat-file-p HEAD
tree 2e4038cce3649c830daaf38f6e411b4d55d5b7ac
parent 897d06bcb89a12574271e74e90048cb26fe5f6bb
author John Smith <js@example.com> 1398774567 +0900
committer John Smith <js@example.com> 1398774567 +0900
Add new file: greeting2.txt
コミット =
ツリーのスナップショットへのポインタ
+ 親コミットへのポインタ
+ 著作者情報+コミッター情報
+ コミットメッセージ
2. ワーキングツリーの内容を捨てる
① checkout-- <path>
② checkout <commit-ish> -- <path>
②<commit-ish>を指定した場合、そのコミットの内
容でインデックスとワーキングツリーの<path>を上
書きします。
②は<commit-ish>と書いてるけど実は tree オブジェクト指定でも OK.(<tree-ish>)
191.
checkout <commit-ish> --<path>
さっきの続きです。ここで checkout HEAD --
hello.txt を実行すると・・・
working tree index
hello.txt
greeting.txthello.txt
greeting.txt
HEAD
hello.txt
greeting.txt
192.
checkout <commit-ish> --<path>
インデックスのhello.txtがHEADのhello.txtで上書
きされ・・・
working tree index
hello.txt
greeting.txthello.txt
greeting.txt
HEAD
hello.txt
greeting.txt
git checkout HEAD -- greeting.txt
193.
checkout <commit-ish> --<path>
ワーキングツリーのhello.txtも同じ内容で上書きさ
れます。
どちらの書式も編集内容が捨てられるので注意し
てください。
working tree index
hello.txt
greeting.txthello.txt
greeting.txt
HEAD
hello.txt
greeting.txt
git checkout HEAD -- greeting.txt
3. ワーキングツリーの内容を捨てる(2)
reset --hard[ HEAD ]
インデックスとワーキングツリーをHEADの内容で
上書きします。HEADは省略可能。
HEADの位置に他の<commit-ish>を指定可能ですが、カレントブランチが指す場所を変更する副作用がある
ので、要注意。
196.
reset --hard
動作は checkoutHEAD -- . (pathにカレントディレ
クトリを指定)と同じで・・・
working tree index
hello.txt
greeting.txthello.txt
greeting.txt
HEAD
hello.txt
greeting.txt
greeting.txt
reset HEAD --<path>
ワーキングツリーの hello.txt がローカルな変更を
持っており、インデックスにそれが登録されている
とします。
working tree index
hello.txt
greeting.txthello.txt
HEAD
hello.txt
greeting.txt
213.
greeting.txt
reset HEAD --<path>
git reset HEAD -- hello.txt によって、HEADの
hello.txt の内容でインデックスを更新します。つま
り、ワーキングツリーをもとに追加されていたイン
デックスの変更が捨てられます。
working tree index
hello.txt
greeting.txthello.txt
HEAD
hello.txt
greeting.txt
git reset HEAD -- hello.txt
214.
greeting.txt
reset HEAD --<path>
ちなみに git init した直後だと git rm --cached
<path> を使う必要があります。いずれにしろ git
status にどうしたら良いか表示されているので、
迷ったら status の出力を見ましょう。
working tree index
hello.txt
greeting.txthello.txt
HEAD
hello.txt
greeting.txt
git reset HEAD -- hello.txt
1. ブランチを作成/削除/名前変更する
① branch<branch> [ <commit-ish> ]
② branch -d | -D <branch>
③ branch -m [ <old> ] <new>
① 指定したコミットに新しいブランチの参照を
<branch> という名前で作成します。<commit-ish>
を省略すると HEAD に作成します。
261.
branch <branch> [<commit-ish> ]
branch は単にブランチヘッドとなる参照を作成し
ます。図はコミット32ff01にbarというブランチを作
成した場合。
foo
HEAD
git branch bar 32ff01
32ff01
foo
HEAD
32ff01 bar
262.
branch <branch> [<commit-ish> ]
コミットを指定しなければHEADに新しい参照を作
ることになります。
foo
HEAD
git branch bar
foo
HEAD
bar
263.
1. ブランチを作成/削除/名前変更する
① branch<branch> [ <commit-ish> ]
② branch -d | -D <branch>
③ branch -m [ <old> ] <new>
② 指定した <branch> を削除します。 -d では
HEAD から到達可能なコミットに付けられた参照で
ないと(=カレントブランチにマージされてないと)削
除できません。 -D であれば無条件に削除します。
264.
branch -d |-D <branch>
branch -d はブランチヘッド参照を削除します。-d
だとHEADの祖先に付いているブランチのみ削除
できます。
foo
HEAD
git branch -d bar
foo
HEAD
bar
buz
buz
265.
branch -d |-D <branch>
これはマージされていないブランチを削除しないた
めの安全装置です。上の場合、 buz を削除するこ
とはできません。
foo
HEAD
git branch -d buz
buz
foo
HEAD
266.
branch -d |-D <branch>
HEADの祖先でないブランチを削除したければ、
branch -D を使います。
foo
HEAD
git branch -D buz
foo
HEAD
buz
267.
1. ブランチを作成/削除/名前変更する
① branch<branch> [ <commit-ish> ]
② branch -d | -D <branch>
③ branch -m [ <old> ] <new>
③ ブランチ <old> の名前を <new> に変更しま
す。<old> を指定しない場合はカレントブランチの
名前が <new> に変更されます。
268.
branch -m [<old> ] <new>
branch -m でブランチヘッドの名前を変更できま
す。
foo
HEAD
git branch -m buz bar
foo
HEAD
buz
bar
rebase <commit-ish>
参照 barを新しいコミットに付け替えてカレントブラ
ンチをbarに切り替えます。
master
HEAD git rebase master
bar
master
HEAD
bar
287.
rebase <commit-ish>
応用として rebase-i を使ってcherry-pickする際に
編集を加えたり、コミットを取捨選択したり、といっ
たことを対話的に指定できます。
図では2つだったコミットを1つにまとめてます
master
HEAD git rebase -i master
bar
master
HEAD
bar
1. タグを作成/削除する
① tag<tag> [ <commit-ish> ]
② tag -a <tag> [ <commit-ish> ]
③ tag -d <tag>
① 指定したコミットを指すタグ(参照)を作成します
292.
tag <tag> [<commit-ish> ]
指定したコミットに参照のタグを作成します。コミッ
トを指定しない場合、HEADが対象になります。
master
HEAD
git tag backup bar
bar
master
HEAD
bar
backup
293.
1. タグを作成/削除する
① tag<tag> <commit-ish>
② tag -a <tag> <commit-ish>
③ tag -d <tag>
② 指定したコミットを指すアノテーションタグを作成
します。
294.
tag -a <tag>[ <commit-ish> ]
-a を指定するとアノテーションタグを作成します。
実際には指定したコミットを指すタグオブジェクト
(△)を作成し、それを指す参照のタグを作成しま
す。
master
HEAD
git tag -a backup bar
bar
master
HEAD
backup
bar
295.
1. タグを作成/削除する
① tag<tag> <commit-ish>
② tag -a <tag> <commit-ish>
③ tag -d <tag>
③ 指定したタグ(参照)を削除します。
296.
tag -a <tag>[ <commit-ish> ]
-d を指定するとタグを削除します。アノテーションタ
グが指定された場合、タグオブジェクトはすぐに削
除されるわけではありませんが、そのうちGCで削
除されます。
master
HEAD
git tag -d backup
bar
master
HEAD
bar
backup