SlideShare a Scribd company logo
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

More Related Content

PDF
PDF
Gitとちょっと仲良くなるために覚えたことまとめ
PDF
Gitで始めるバージョン管理
PDF
Git-dojo In Sendagaya.rb
PPTX
Git introduction2
PDF
PDF
Gitでやるたのしい歴史改変
PPTX
Github第4章
Gitとちょっと仲良くなるために覚えたことまとめ
Gitで始めるバージョン管理
Git-dojo In Sendagaya.rb
Git introduction2
Gitでやるたのしい歴史改変
Github第4章

Viewers also liked (8)

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

Similar to Git入門 あの頃に戻るには (20)

PPTX
Git 勉強会
PDF
gitで過去に戻りたい
PDF
Git 入門
PDF
PDF
テーマ別Git tips
KEY
20120324 git training
PDF
Gitの使い方あれこれ
PDF
はじめてのGit
PDF
Git勉強会 2016 Gitで卒論を管理しよう回
PDF
バージョン管理
PPTX
今さら聞けない人のためのGit超入門 OSC2018広島版
PDF
やりなおせる Git 入門
PPTX
git入門(講義っぽく)
PPTX
今さら聞けない人のためのgit超入門
PDF
Gitのよく使うコマンド
PPTX
今さら聞けない人のためのGit超入門 2020/12/19
PDF
Git超入門(ハンズオン).pdf
PPTX
今さら聞けない人のためのGit超入門
PDF
はじめてのGit #gitkyoto
PPT
Githubことはじめ
Git 勉強会
gitで過去に戻りたい
Git 入門
テーマ別Git tips
20120324 git training
Gitの使い方あれこれ
はじめてのGit
Git勉強会 2016 Gitで卒論を管理しよう回
バージョン管理
今さら聞けない人のためのGit超入門 OSC2018広島版
やりなおせる Git 入門
git入門(講義っぽく)
今さら聞けない人のためのgit超入門
Gitのよく使うコマンド
今さら聞けない人のためのGit超入門 2020/12/19
Git超入門(ハンズオン).pdf
今さら聞けない人のためのGit超入門
はじめてのGit #gitkyoto
Githubことはじめ
Ad

Git入門 あの頃に戻るには