Successfully reported this slideshow.
Your SlideShare is downloading. ×

やりなおせる Git 入門

やりなおせる Git 入門

Download to read offline

広島Git 勉強会 201306 の資料。

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

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

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

広島Git 勉強会 201306 の資料。

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

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

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

Advertisement
Advertisement

More Related Content

Advertisement
Advertisement

やりなおせる 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.md readme
  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. コミットコミット インデックスインデックス ワークツリーワークツリー HEAD git reset HEAD
  45. 45. インデックスも ワークツリーも まとめて戻したい
  46. 46. コミットコミット インデックスインデックス ワークツリーワークツリー HEAD git 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 --amend A B C master
  55. 55. git commit --amend A B C C' master
  56. 56. C を辿る手段がない reflog などで探せますが
  57. 57. master を複製しておく git branch old
  58. 58. git commit --amend old A B C C' master
  59. 59. git reset --hard old で元に戻れる
  60. 60. git rebase
  61. 61. 初期状態 origin A B C D master
  62. 62. git rebase origin origin A B C D D' master
  63. 63. master を複製しておくと git branch old
  64. 64. 初期状態 old origin A B C D master
  65. 65. git rebase origin old origin A B C D D' master
  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. ご清聴ありがとうございました

×