Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

やりなおせる Git 入門

66,417 views

Published on

広島Git 勉強会 201306 の資料。

補足はこちらに http://blog.eiel.info/blog/2013/06/02/hiroshima-git/

元に戻すを主眼に、危険と少し危険にコマンドを分類してみた。

危険 - 変更が消えてしまい復元できない
少し危険 - コミットへの参照がない状態になる

  • Be the first to comment

やりなおせる Git 入門

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

×