Upload
tomohiko-himura
View
26.763
Download
0
Embed Size (px)
DESCRIPTION
広島Git 勉強会 201306 の資料。 補足はこちらに http://blog.eiel.info/blog/2013/06/02/hiroshima-git/ 元に戻すを主眼に、危険と少し危険にコマンドを分類してみた。 危険 - 変更が消えてしまい復元できない 少し危険 - コミットへの参照がない状態になる
Citation preview
やりなおせるGit入門2013-06-01 広島 Git 勉強会 201306
目的
•元に戻せないのは怖い•元に戻せるようになろう•危険 と 少し危険 を知る
とみせかけてreset と checkout
の話をする
ふつうの Git 入門+ やりなおせる
事前準備
•$ echo readme > README.md
•$ ls .README.md
•$ cat README.mdreadme
はじめてのコミット
•git init
•git add .
•git commit -m ‘initial commit’
間違えたらどーするの?
git init
•間違えた!•最初からやりなおしたい•rm -rf .git
git add .
•間違えた!• add する前にもどしたい•git rm --cached .
ん?覚えられないって?
• git status すると書いてあります
git status$ git status# On branch master## Initial commit## Changes to be committed:# (use "git rm --cached <file>..." to unstage)## new file: README.md#
git commit -m ‘intial commit`
•間違えた!•コミットメッセージなおしたい• git commit --amend -m ‘replace message’
初回は特別なので難しい
•最初からやりなおしたくなれば•rm -rf .git
NeXT STEPふたつめのコミット
ふたつめのコミット
•$ echo readyou > README.md
•$ git add -u
•$ git commit -m ‘second commit’
ファイルの変更
•間違えた!•変更をなしにしたい•git checkout README.md
•変更は消えてしまう•危険
git add -u
•間違えた!•変更をまだ追加したくないの•git reset README.md
•変更は 残ったまま•安全
git commit
• 間違えた!! • commit する前と同じ状態にしたい• git reset --soft HEAD^
• 変更は残ったまま & コミットは追えなくなる• 少し危険
登場したコマンド
• git rm --cached
• git checkout ファイル名
• git reset
• git reset --soft コミットのようなもの
危険の定義
• 変更が失われてしまい、復元できなくなってしまうようなもの
危険なコマンド
• git reset --hard• git checkout ファイル名•ブランチ名の場合は安全•変更した残したいならコミットする
少し危険の定義
•コミットが新しく作成され、別物に代わってしまう
•コミットが今のブランチから辿れない
少し危険なコマンド
• git commit --amend•ひとつ前のコミットが別のものになります
• git rebase•新しいコミットに置き換えられます
危険なコマンドをする前に
•怖いなら•とにかくコミットしとけ• git commit
少し危険なコマンドをする前に
•怖いなら•とにかくブランチを作成しとけ• git branch ブランチ名
よくわからない、怖くなったら
• git branch helpme• git add .• git commit -m ‘たすけて’•偉い人に聞く
もう少し詳しく
reset と checkout
•必要な知識•ワークツリー•インデックス•コミット•ツリーのようなもの
ワークツリー
•実際に存在しているファイルやディレクトリ
•編集して変化していく内容
コミットコミット
インデックスインデックス
ワークツリーワークツリー
コミットコミット
インデックスインデックス
ワークツリーワークツリー
ファイルを変更する
インデックス
•コミットを作る前準備をするところ•準備ができたところでコミットするとそれがコミットになる
コミットコミット
インデックスインデックス
ワークツリーワークツリー
git add
コミット
•復元するために必要なファイルやディレクトリ、コミットメッセージ、作成日、前のコミットなどを保存している
コミットコミット
インデックスインデックス
ワークツリーワークツリー
git commit
ツリーのようなもの
•ファイルツリーがとりだせるようなもの•コミット•ツリー•インデックス•などなど
Reset
•指しているコミットとインデックスを指定したコミットのものに変えるコマンド
• --soft の場合は指しているコミットだけ• --hard の場合はワークツリーも変更•コミットを指定しない場合は HEAD
コミットコミット
インデックスインデックス
ワークツリーワークツリー
HEAD^
git reset --soft HEAD^
コミットコミット
インデックスインデックス
ワークツリーワークツリー
HEAD^
git reset HEAD^
コミットコミット
インデックスインデックス
ワークツリーワークツリー
HEAD^
git reset --hard HEAD^
reset の弱い順
• git reset --soft• git reset• git resset --hard
強い
弱い
インデックスだけ取り消したい
コミットコミット
インデックスインデックス
ワークツリーワークツリー
HEAD
git reset HEAD
インデックスもワークツリーもまとめて戻したい
コミットコミット
インデックスインデックス
ワークツリーワークツリー
HEAD
git reset --hard HEAD
上から切り裂く
Checkout ファイル
• `checkout ブランチ` とは区別して考えて• ワークツリーとインデックスを変更する• 指定したファイルをインデックスと同じものに• `ツリーのようなもの`明示的にを指定することもできます
コミットコミット
インデックスインデックス
ワークツリーワークツリー
git checkout ファイル名
コミットコミット
インデックスインデックス
ワークツリーワークツリー
HEAD^
git checkout HEAD^ ファイル
下ふたつだけを自由自在に動かす
一番下を動かすのは危険
少し危険
git commit --amend
A B Cmaster
git commit --amend
A B C
C'master
C を辿る手段がないreflog などで探せますが
master を複製しておくgit branch old
git commit --amendold
A B C
C'master
git reset --hard oldで元に戻れる
git rebase
初期状態origin
A B C
Dmaster
git rebase originorigin
A B C
D
D'
master
master を複製しておくとgit branch old
初期状態
old
origin
A B C
Dmaster
git rebase origin
old
origin
A B C
D
D'
master
git reset --hard oldで元に戻れる
別にコミットのID がわかるなら ブランチは
作る必要はありません
おまけ
• git revert はあるコミットをなかったことにするコミットを作成します
•新しくコミットを作成するコマンド• git commit の -m はそろそろ卒業しましょう
まとめ
• 危険なことをするなら• 変更がコミットされてるか確認する• 消えてもいいなら気にしない• 少し危険なことをするなら• ブランチを作成しとけば元に戻せる
まとめ
•危険•git reset --hard•git checkout ファイル名
まとめ
•少し危険• git reset コミットのようなもの• git commit --amend• git rebase
まとめ
• git reset は ブランチ が指すところを変える• git checkout ファイル名• インデックスとワークツリーを変更する
ご清聴ありがとうございました