SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
Git入門
あの頃に戻るには
Loco Partners
大須賀 義浩
Thursday, September 12, 13
過去に戻りたい
そう思うことってありますよね
例えば
Thursday, September 12, 13
「私は・・・鹿目さんとの出会いをやり直したい
彼女に守られる私ではなく、
彼女を守る私になりたい」
Thursday, September 12, 13
閑話休題
Thursday, September 12, 13
プログラムを編集してたら、
なんか知らないけど動かなくなってしまった・・・
編集前の状態に戻したい・・・
そんなとき、簡単に戻すことができる
Thursday, September 12, 13
そう、Gitならね
Thursday, September 12, 13
$ git checkout -- target.txt
$ git checkout target.txt
でも戻るけど、あまり良くない。
仮にtarget.txtというブランチがあった場合、
『そのブランチへのチェックアウト』
という動作になってしまう。
Case1
変更したファイル(未add)を元に戻したい
Thursday, September 12, 13
$ git status
# On branch master
# Changes not staged for commit:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working
directory)
#
# modified: target.txt
Case1
変更したファイル(未add)を元に戻したい
Text
ちなみに git status を見ると、
戻し方が書いてあります。(しんせつ)
Thursday, September 12, 13
$ git reset HEAD target.txt
$ git checkout -- target.txt
ちなみに親切なことに定評のある git status を見ると、
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: target.txt
Case2
addしちゃったファイルを元に戻したい
Thursday, September 12, 13
$ echo 'hoge' >> target.txt
$ git add target.txt
$ echo 'fuga' >> target.txt
$ git commit -m 'こみっと!'
ところで、編集→git add→編集→git commit
とした場合、どうなるかご存知ですか?
ここでコミットされるのは、
addした時点のtarget.txtです
Thursday, September 12, 13
A
commit
HEAD
B
インデックス
ワーキング
ツリー
ワーキングツリー
現在のファイルの状態
インデックス
addした変更
HEAD
コミットを指すポインタ
Thursday, September 12, 13
A
HEAD
B
インデックス
ワーキング
ツリー
ファイルを編集すると
ワーキングツリーが変わる
Thursday, September 12, 13
A
HEAD
B
インデックス
ワーキング
ツリー
git add で、ワーキングツリーの内容が
インデックスに登録される
Thursday, September 12, 13
A
HEAD
B
インデックス
ワーキング
ツリー
C
git commit で、インデックスの状態の
コミットが作成される
Thursday, September 12, 13
では
git reset HEAD
git checkout --
とは何だったのか
Thursday, September 12, 13
A
HEAD
B
インデックス
ワーキング
ツリー
git reset HEAD は、インデックスを
HEADまで戻す
インデックス
Thursday, September 12, 13
A
HEAD
B
インデックス
ワーキング
ツリー
git checkout -- は、ワーキングツリーを
インデックスまで戻す
ワーキング
ツリー
Thursday, September 12, 13
これをふまへて
Thursday, September 12, 13
$ git reset --hard HEAD
git reset は、HEADを指定したコミットの位置に移動するコマンド
--hardというオプションを付けると、HEAD、インデックス、ワーキング
ツリーが指定したコミットの位置に移動します。
(--hardオプションを使う時は、個別のファイルを指定することはできな
い。)
Case3
全てのファイルを、直前のコミットの状態
に戻したい
Thursday, September 12, 13
A
HEAD
B
インデックス
ワーキング
ツリー
git reset --hard HEAD
インデックス
ワーキング
ツリー
Thursday, September 12, 13
$ git reset --hard HEAD^
HEAD^ というのは、HEADのひとつ前のコミットのエイリアス
(HEADとかHEAD^とかよくわかんない、とにかくあの時に戻りたい
という場合はcommit_idを指定する
$ git reset --hard 73da94c0204aaac817bc2(以下略)
commit idはgit logなどで確認
)
Case4
全てのファイルを、ひとつ前のコミットの
状態に戻したい
Thursday, September 12, 13
A
HEAD
B
インデックス
ワーキング
ツリー
git reset --hard HEAD^
インデックス
ワーキング
ツリー
HEAD
Thursday, September 12, 13
A
HEAD
B
--hard があれば --soft もあります
git reset --soft HEAD^
インデックス
ワーキング
ツリー
HEAD
Thursday, September 12, 13
A B
この状態で
$ git commit -am ‘こみっと!’
すると
インデックス
ワーキング
ツリー
HEAD
Thursday, September 12, 13
A C
Aの後にCというコミットが作成されます
インデックス
ワーキング
ツリー
HEAD
Thursday, September 12, 13
git reset のオプションは他にも
--mixed
--merge
--keep
があります。
コミットの取消方法としては git-revert もあり、
指定したコミット"だけ"無かったことにしたい時な
どに使用します。
Thursday, September 12, 13
Thursday, September 12, 13
Enjoy Git!
Thursday, September 12, 13

Mais conteúdo relacionado

Destaque

IDN TLDをAzureのWebサイトで使う方法
IDN TLDをAzureのWebサイトで使う方法IDN TLDをAzureのWebサイトで使う方法
IDN TLDをAzureのWebサイトで使う方法Yoshihiro Ohsuka
 
CakePHP2でMySQL Replication
CakePHP2でMySQL ReplicationCakePHP2でMySQL Replication
CakePHP2でMySQL ReplicationYoshihiro Ohsuka
 
reluxの開発体制 - weekdayランサーズ勉強会 -
reluxの開発体制 - weekdayランサーズ勉強会 -reluxの開発体制 - weekdayランサーズ勉強会 -
reluxの開発体制 - weekdayランサーズ勉強会 -Yoshihiro Ohsuka
 
Awsjpcasestudies
AwsjpcasestudiesAwsjpcasestudies
Awsjpcasestudiesakitsukada
 
PHPという概念が存在しない退屈な世界
PHPという概念が存在しない退屈な世界PHPという概念が存在しない退屈な世界
PHPという概念が存在しない退屈な世界Yoshihiro Ohsuka
 
PHPという概念が存在しない退屈な世界 - AWS LambdaでWebAPP編
PHPという概念が存在しない退屈な世界 - AWS LambdaでWebAPP編PHPという概念が存在しない退屈な世界 - AWS LambdaでWebAPP編
PHPという概念が存在しない退屈な世界 - AWS LambdaでWebAPP編Yoshihiro Ohsuka
 
apachehereというPHPのBuiltin Serverっぽいやつをつくった
apachehereというPHPのBuiltin ServerっぽいやつをつくったapachehereというPHPのBuiltin Serverっぽいやつをつくった
apachehereというPHPのBuiltin ServerっぽいやつをつくったJunichi Ishida
 

Destaque (8)

IDN TLDをAzureのWebサイトで使う方法
IDN TLDをAzureのWebサイトで使う方法IDN TLDをAzureのWebサイトで使う方法
IDN TLDをAzureのWebサイトで使う方法
 
CakePHP2でMySQL Replication
CakePHP2でMySQL ReplicationCakePHP2でMySQL Replication
CakePHP2でMySQL Replication
 
reluxの開発体制 - weekdayランサーズ勉強会 -
reluxの開発体制 - weekdayランサーズ勉強会 -reluxの開発体制 - weekdayランサーズ勉強会 -
reluxの開発体制 - weekdayランサーズ勉強会 -
 
Awsjpcasestudies
AwsjpcasestudiesAwsjpcasestudies
Awsjpcasestudies
 
PHPという概念が存在しない退屈な世界
PHPという概念が存在しない退屈な世界PHPという概念が存在しない退屈な世界
PHPという概念が存在しない退屈な世界
 
PHPという概念が存在しない退屈な世界 - AWS LambdaでWebAPP編
PHPという概念が存在しない退屈な世界 - AWS LambdaでWebAPP編PHPという概念が存在しない退屈な世界 - AWS LambdaでWebAPP編
PHPという概念が存在しない退屈な世界 - AWS LambdaでWebAPP編
 
面白いは正義
面白いは正義面白いは正義
面白いは正義
 
apachehereというPHPのBuiltin Serverっぽいやつをつくった
apachehereというPHPのBuiltin ServerっぽいやつをつくったapachehereというPHPのBuiltin Serverっぽいやつをつくった
apachehereというPHPのBuiltin Serverっぽいやつをつくった
 

Git入門 あの頃に戻るには