やりなおせる git 入門
DESCRIPTION
広島Git 勉強会 201306 の資料。 補足はこちらに http://blog.eiel.info/blog/2013/06/02/hiroshima-git/ 元に戻すを主眼に、危険と少し危険にコマンドを分類してみた。 危険 - 変更が消えてしまい復元できない 少し危険 - コミットへの参照がない状態になるTRANSCRIPT
![Page 1: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/1.jpg)
やりなおせるGit入門2013-06-01 広島 Git 勉強会 201306
![Page 3: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/3.jpg)
![Page 4: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/4.jpg)
目的
•元に戻せないのは怖い•元に戻せるようになろう•危険 と 少し危険 を知る
![Page 5: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/5.jpg)
とみせかけてreset と checkout
の話をする
![Page 6: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/6.jpg)
![Page 7: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/7.jpg)
ふつうの Git 入門+ やりなおせる
![Page 8: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/8.jpg)
事前準備
•$ echo readme > README.md
•$ ls .README.md
•$ cat README.mdreadme
![Page 9: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/9.jpg)
はじめてのコミット
•git init
•git add .
•git commit -m ‘initial commit’
![Page 10: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/10.jpg)
間違えたらどーするの?
![Page 11: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/11.jpg)
git init
•間違えた!•最初からやりなおしたい•rm -rf .git
![Page 12: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/12.jpg)
git add .
•間違えた!• add する前にもどしたい•git rm --cached .
![Page 13: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/13.jpg)
ん?覚えられないって?
• git status すると書いてあります
![Page 14: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/14.jpg)
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 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/15.jpg)
git commit -m ‘intial commit`
•間違えた!•コミットメッセージなおしたい• git commit --amend -m ‘replace message’
![Page 16: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/16.jpg)
初回は特別なので難しい
•最初からやりなおしたくなれば•rm -rf .git
![Page 17: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/17.jpg)
NeXT STEPふたつめのコミット
![Page 18: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/18.jpg)
ふたつめのコミット
•$ echo readyou > README.md
•$ git add -u
•$ git commit -m ‘second commit’
![Page 19: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/19.jpg)
ファイルの変更
•間違えた!•変更をなしにしたい•git checkout README.md
•変更は消えてしまう•危険
![Page 20: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/20.jpg)
git add -u
•間違えた!•変更をまだ追加したくないの•git reset README.md
•変更は 残ったまま•安全
![Page 21: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/21.jpg)
git commit
• 間違えた!! • commit する前と同じ状態にしたい• git reset --soft HEAD^
• 変更は残ったまま & コミットは追えなくなる• 少し危険
![Page 22: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/22.jpg)
登場したコマンド
• git rm --cached
• git checkout ファイル名
• git reset
• git reset --soft コミットのようなもの
![Page 23: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/23.jpg)
危険の定義
• 変更が失われてしまい、復元できなくなってしまうようなもの
![Page 24: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/24.jpg)
危険なコマンド
• git reset --hard• git checkout ファイル名•ブランチ名の場合は安全•変更した残したいならコミットする
![Page 25: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/25.jpg)
少し危険の定義
•コミットが新しく作成され、別物に代わってしまう
•コミットが今のブランチから辿れない
![Page 26: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/26.jpg)
少し危険なコマンド
• git commit --amend•ひとつ前のコミットが別のものになります
• git rebase•新しいコミットに置き換えられます
![Page 27: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/27.jpg)
危険なコマンドをする前に
•怖いなら•とにかくコミットしとけ• git commit
![Page 28: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/28.jpg)
少し危険なコマンドをする前に
•怖いなら•とにかくブランチを作成しとけ• git branch ブランチ名
![Page 29: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/29.jpg)
よくわからない、怖くなったら
• git branch helpme• git add .• git commit -m ‘たすけて’•偉い人に聞く
![Page 30: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/30.jpg)
もう少し詳しく
![Page 31: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/31.jpg)
reset と checkout
•必要な知識•ワークツリー•インデックス•コミット•ツリーのようなもの
![Page 32: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/32.jpg)
ワークツリー
•実際に存在しているファイルやディレクトリ
•編集して変化していく内容
![Page 33: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/33.jpg)
コミットコミット
インデックスインデックス
ワークツリーワークツリー
![Page 34: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/34.jpg)
コミットコミット
インデックスインデックス
ワークツリーワークツリー
ファイルを変更する
![Page 35: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/35.jpg)
インデックス
•コミットを作る前準備をするところ•準備ができたところでコミットするとそれがコミットになる
![Page 36: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/36.jpg)
コミットコミット
インデックスインデックス
ワークツリーワークツリー
git add
![Page 37: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/37.jpg)
コミット
•復元するために必要なファイルやディレクトリ、コミットメッセージ、作成日、前のコミットなどを保存している
![Page 38: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/38.jpg)
コミットコミット
インデックスインデックス
ワークツリーワークツリー
git commit
![Page 39: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/39.jpg)
ツリーのようなもの
•ファイルツリーがとりだせるようなもの•コミット•ツリー•インデックス•などなど
![Page 40: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/40.jpg)
Reset
•指しているコミットとインデックスを指定したコミットのものに変えるコマンド
• --soft の場合は指しているコミットだけ• --hard の場合はワークツリーも変更•コミットを指定しない場合は HEAD
![Page 41: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/41.jpg)
コミットコミット
インデックスインデックス
ワークツリーワークツリー
HEAD^
git reset --soft HEAD^
![Page 42: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/42.jpg)
コミットコミット
インデックスインデックス
ワークツリーワークツリー
HEAD^
git reset HEAD^
![Page 43: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/43.jpg)
コミットコミット
インデックスインデックス
ワークツリーワークツリー
HEAD^
git reset --hard HEAD^
![Page 44: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/44.jpg)
reset の弱い順
• git reset --soft• git reset• git resset --hard
強い
弱い
![Page 45: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/45.jpg)
インデックスだけ取り消したい
![Page 46: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/46.jpg)
コミットコミット
インデックスインデックス
ワークツリーワークツリー
HEAD
git reset HEAD
![Page 47: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/47.jpg)
インデックスもワークツリーもまとめて戻したい
![Page 48: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/48.jpg)
コミットコミット
インデックスインデックス
ワークツリーワークツリー
HEAD
git reset --hard HEAD
![Page 49: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/49.jpg)
上から切り裂く
![Page 50: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/50.jpg)
Checkout ファイル
• `checkout ブランチ` とは区別して考えて• ワークツリーとインデックスを変更する• 指定したファイルをインデックスと同じものに• `ツリーのようなもの`明示的にを指定することもできます
![Page 51: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/51.jpg)
コミットコミット
インデックスインデックス
ワークツリーワークツリー
git checkout ファイル名
![Page 52: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/52.jpg)
コミットコミット
インデックスインデックス
ワークツリーワークツリー
HEAD^
git checkout HEAD^ ファイル
![Page 53: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/53.jpg)
下ふたつだけを自由自在に動かす
![Page 54: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/54.jpg)
一番下を動かすのは危険
![Page 55: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/55.jpg)
少し危険
![Page 56: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/56.jpg)
git commit --amend
A B Cmaster
![Page 57: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/57.jpg)
git commit --amend
A B C
C'master
![Page 58: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/58.jpg)
C を辿る手段がないreflog などで探せますが
![Page 59: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/59.jpg)
master を複製しておくgit branch old
![Page 60: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/60.jpg)
git commit --amendold
A B C
C'master
![Page 61: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/61.jpg)
git reset --hard oldで元に戻れる
![Page 62: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/62.jpg)
git rebase
![Page 63: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/63.jpg)
初期状態origin
A B C
Dmaster
![Page 64: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/64.jpg)
git rebase originorigin
A B C
D
D'
master
![Page 65: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/65.jpg)
master を複製しておくとgit branch old
![Page 66: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/66.jpg)
初期状態
old
origin
A B C
Dmaster
![Page 67: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/67.jpg)
git rebase origin
old
origin
A B C
D
D'
master
![Page 68: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/68.jpg)
git reset --hard oldで元に戻れる
![Page 69: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/69.jpg)
別にコミットのID がわかるなら ブランチは
作る必要はありません
![Page 70: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/70.jpg)
おまけ
• git revert はあるコミットをなかったことにするコミットを作成します
•新しくコミットを作成するコマンド• git commit の -m はそろそろ卒業しましょう
![Page 71: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/71.jpg)
まとめ
• 危険なことをするなら• 変更がコミットされてるか確認する• 消えてもいいなら気にしない• 少し危険なことをするなら• ブランチを作成しとけば元に戻せる
![Page 72: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/72.jpg)
まとめ
•危険•git reset --hard•git checkout ファイル名
![Page 73: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/73.jpg)
まとめ
•少し危険• git reset コミットのようなもの• git commit --amend• git rebase
![Page 74: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/74.jpg)
まとめ
• git reset は ブランチ が指すところを変える• git checkout ファイル名• インデックスとワークツリーを変更する
![Page 75: やりなおせる Git 入門](https://reader034.vdocuments.pub/reader034/viewer/2022050805/555e8042d8b42a41328b50f4/html5/thumbnails/75.jpg)
ご清聴ありがとうございました