やりなおせる git 入門

75
やりなおせるGit入門 2013-06-01 広島 Git 勉強会 201306

Upload: tomohiko-himura

Post on 22-May-2015

26.763 views

Category:

Documents


0 download

DESCRIPTION

広島Git 勉強会 201306 の資料。 補足はこちらに http://blog.eiel.info/blog/2013/06/02/hiroshima-git/ 元に戻すを主眼に、危険と少し危険にコマンドを分類してみた。 危険 - 変更が消えてしまい復元できない 少し危険 - コミットへの参照がない状態になる

TRANSCRIPT

Page 1: やりなおせる Git 入門

やりなおせるGit入門2013-06-01 広島 Git 勉強会 201306

Page 2: やりなおせる Git 入門

自己紹介

•ひむらともひこ• Twitter eielh• Github eiel• http://eiel.info/

Page 3: やりなおせる Git 入門
Page 4: やりなおせる Git 入門

目的

•元に戻せないのは怖い•元に戻せるようになろう•危険 と 少し危険 を知る

Page 5: やりなおせる Git 入門

とみせかけてreset と checkout

の話をする

Page 6: やりなおせる Git 入門
Page 7: やりなおせる Git 入門

ふつうの Git 入門+ やりなおせる

Page 8: やりなおせる Git 入門

事前準備

•$ echo readme > README.md

•$ ls .README.md

•$ cat README.mdreadme

Page 9: やりなおせる Git 入門

はじめてのコミット

•git init

•git add .

•git commit -m ‘initial commit’

Page 10: やりなおせる Git 入門

間違えたらどーするの?

Page 11: やりなおせる Git 入門

git init

•間違えた!•最初からやりなおしたい•rm -rf .git

Page 12: やりなおせる Git 入門

git add .

•間違えた!• add する前にもどしたい•git rm --cached .

Page 13: やりなおせる Git 入門

ん?覚えられないって?

• git status すると書いてあります

Page 14: やりなおせる Git 入門

git status$ git status# On branch master## Initial commit## Changes to be committed:# (use "git rm --cached <file>..." to unstage)## new file: README.md#

Page 15: やりなおせる Git 入門

git commit -m ‘intial commit`

•間違えた!•コミットメッセージなおしたい• git commit --amend -m ‘replace message’

Page 16: やりなおせる Git 入門

初回は特別なので難しい

•最初からやりなおしたくなれば•rm -rf .git

Page 17: やりなおせる Git 入門

NeXT STEPふたつめのコミット

Page 18: やりなおせる Git 入門

ふたつめのコミット

•$ echo readyou > README.md

•$ git add -u

•$ git commit -m ‘second commit’

Page 19: やりなおせる Git 入門

ファイルの変更

•間違えた!•変更をなしにしたい•git checkout README.md

•変更は消えてしまう•危険

Page 20: やりなおせる Git 入門

git add -u

•間違えた!•変更をまだ追加したくないの•git reset README.md

•変更は 残ったまま•安全

Page 21: やりなおせる Git 入門

git commit

• 間違えた!! • commit する前と同じ状態にしたい• git reset --soft HEAD^

• 変更は残ったまま & コミットは追えなくなる• 少し危険

Page 22: やりなおせる Git 入門

登場したコマンド

• git rm --cached

• git checkout ファイル名

• git reset

• git reset --soft コミットのようなもの

Page 23: やりなおせる Git 入門

危険の定義

• 変更が失われてしまい、復元できなくなってしまうようなもの

Page 24: やりなおせる Git 入門

危険なコマンド

• git reset --hard• git checkout ファイル名•ブランチ名の場合は安全•変更した残したいならコミットする

Page 25: やりなおせる Git 入門

少し危険の定義

•コミットが新しく作成され、別物に代わってしまう

•コミットが今のブランチから辿れない

Page 26: やりなおせる Git 入門

少し危険なコマンド

• git commit --amend•ひとつ前のコミットが別のものになります

• git rebase•新しいコミットに置き換えられます

Page 27: やりなおせる Git 入門

危険なコマンドをする前に

•怖いなら•とにかくコミットしとけ• git commit

Page 28: やりなおせる Git 入門

少し危険なコマンドをする前に

•怖いなら•とにかくブランチを作成しとけ• git branch ブランチ名

Page 29: やりなおせる Git 入門

よくわからない、怖くなったら

• git branch helpme• git add .• git commit -m ‘たすけて’•偉い人に聞く

Page 30: やりなおせる Git 入門

もう少し詳しく

Page 31: やりなおせる Git 入門

reset と checkout

•必要な知識•ワークツリー•インデックス•コミット•ツリーのようなもの

Page 32: やりなおせる Git 入門

ワークツリー

•実際に存在しているファイルやディレクトリ

•編集して変化していく内容

Page 33: やりなおせる Git 入門

コミットコミット

インデックスインデックス

ワークツリーワークツリー

Page 34: やりなおせる Git 入門

コミットコミット

インデックスインデックス

ワークツリーワークツリー

ファイルを変更する

Page 35: やりなおせる Git 入門

インデックス

•コミットを作る前準備をするところ•準備ができたところでコミットするとそれがコミットになる

Page 36: やりなおせる Git 入門

コミットコミット

インデックスインデックス

ワークツリーワークツリー

git add

Page 37: やりなおせる Git 入門

コミット

•復元するために必要なファイルやディレクトリ、コミットメッセージ、作成日、前のコミットなどを保存している

Page 38: やりなおせる Git 入門

コミットコミット

インデックスインデックス

ワークツリーワークツリー

git commit

Page 39: やりなおせる Git 入門

ツリーのようなもの

•ファイルツリーがとりだせるようなもの•コミット•ツリー•インデックス•などなど

Page 40: やりなおせる Git 入門

Reset

•指しているコミットとインデックスを指定したコミットのものに変えるコマンド

• --soft の場合は指しているコミットだけ• --hard の場合はワークツリーも変更•コミットを指定しない場合は HEAD

Page 41: やりなおせる Git 入門

コミットコミット

インデックスインデックス

ワークツリーワークツリー

HEAD^

git reset --soft HEAD^

Page 42: やりなおせる Git 入門

コミットコミット

インデックスインデックス

ワークツリーワークツリー

HEAD^

git reset HEAD^

Page 43: やりなおせる Git 入門

コミットコミット

インデックスインデックス

ワークツリーワークツリー

HEAD^

git reset --hard HEAD^

Page 44: やりなおせる Git 入門

reset の弱い順

• git reset --soft• git reset• git resset --hard

強い

弱い

Page 45: やりなおせる Git 入門

インデックスだけ取り消したい

Page 46: やりなおせる Git 入門

コミットコミット

インデックスインデックス

ワークツリーワークツリー

HEAD

git reset HEAD

Page 47: やりなおせる Git 入門

インデックスもワークツリーもまとめて戻したい

Page 48: やりなおせる Git 入門

コミットコミット

インデックスインデックス

ワークツリーワークツリー

HEAD

git reset --hard HEAD

Page 49: やりなおせる Git 入門

上から切り裂く

Page 50: やりなおせる Git 入門

Checkout ファイル

• `checkout ブランチ` とは区別して考えて• ワークツリーとインデックスを変更する• 指定したファイルをインデックスと同じものに• `ツリーのようなもの`明示的にを指定することもできます

Page 51: やりなおせる Git 入門

コミットコミット

インデックスインデックス

ワークツリーワークツリー

git checkout ファイル名

Page 52: やりなおせる Git 入門

コミットコミット

インデックスインデックス

ワークツリーワークツリー

HEAD^

git checkout HEAD^ ファイル

Page 53: やりなおせる Git 入門

下ふたつだけを自由自在に動かす

Page 54: やりなおせる Git 入門

一番下を動かすのは危険

Page 55: やりなおせる Git 入門

少し危険

Page 56: やりなおせる Git 入門

git commit --amend

A B Cmaster

Page 57: やりなおせる Git 入門

git commit --amend

A B C

C'master

Page 58: やりなおせる Git 入門

C を辿る手段がないreflog などで探せますが

Page 59: やりなおせる Git 入門

master を複製しておくgit branch old

Page 60: やりなおせる Git 入門

git commit --amendold

A B C

C'master

Page 61: やりなおせる Git 入門

git reset --hard oldで元に戻れる

Page 62: やりなおせる Git 入門

git rebase

Page 63: やりなおせる Git 入門

初期状態origin

A B C

Dmaster

Page 64: やりなおせる Git 入門

git rebase originorigin

A B C

D

D'

master

Page 65: やりなおせる Git 入門

master を複製しておくとgit branch old

Page 66: やりなおせる Git 入門

初期状態

old

origin

A B C

Dmaster

Page 67: やりなおせる Git 入門

git rebase origin

old

origin

A B C

D

D'

master

Page 68: やりなおせる Git 入門

git reset --hard oldで元に戻れる

Page 69: やりなおせる Git 入門

別にコミットのID がわかるなら ブランチは

作る必要はありません

Page 70: やりなおせる Git 入門

おまけ

• git revert はあるコミットをなかったことにするコミットを作成します

•新しくコミットを作成するコマンド• git commit の -m はそろそろ卒業しましょう

Page 71: やりなおせる Git 入門

まとめ

• 危険なことをするなら• 変更がコミットされてるか確認する• 消えてもいいなら気にしない• 少し危険なことをするなら• ブランチを作成しとけば元に戻せる

Page 72: やりなおせる Git 入門

まとめ

•危険•git reset --hard•git checkout ファイル名

Page 73: やりなおせる Git 入門

まとめ

•少し危険• git reset コミットのようなもの• git commit --amend• git rebase

Page 74: やりなおせる Git 入門

まとめ

• git reset は ブランチ が指すところを変える• git checkout ファイル名• インデックスとワークツリーを変更する

Page 75: やりなおせる Git 入門

ご清聴ありがとうございました