Git入門 あの頃に戻るには

961 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
961
On SlideShare
0
From Embeds
0
Number of Embeds
275
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Git入門 あの頃に戻るには

  1. 1. Git入門 あの頃に戻るには Loco Partners 大須賀 義浩 Thursday, September 12, 13
  2. 2. 過去に戻りたい そう思うことってありますよね 例えば Thursday, September 12, 13
  3. 3. 「私は・・・鹿目さんとの出会いをやり直したい 彼女に守られる私ではなく、 彼女を守る私になりたい」 Thursday, September 12, 13
  4. 4. 閑話休題 Thursday, September 12, 13
  5. 5. プログラムを編集してたら、 なんか知らないけど動かなくなってしまった・・・ 編集前の状態に戻したい・・・ そんなとき、簡単に戻すことができる Thursday, September 12, 13
  6. 6. そう、Gitならね Thursday, September 12, 13
  7. 7. $ git checkout -- target.txt $ git checkout target.txt でも戻るけど、あまり良くない。 仮にtarget.txtというブランチがあった場合、 『そのブランチへのチェックアウト』 という動作になってしまう。 Case1 変更したファイル(未add)を元に戻したい Thursday, September 12, 13
  8. 8. $ git status # On branch master # Changes not staged for commit: # (use "git add/rm <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: target.txt Case1 変更したファイル(未add)を元に戻したい Text ちなみに git status を見ると、 戻し方が書いてあります。(しんせつ) Thursday, September 12, 13
  9. 9. $ git reset HEAD target.txt $ git checkout -- target.txt ちなみに親切なことに定評のある git status を見ると、 $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: target.txt Case2 addしちゃったファイルを元に戻したい Thursday, September 12, 13
  10. 10. $ echo 'hoge' >> target.txt $ git add target.txt $ echo 'fuga' >> target.txt $ git commit -m 'こみっと!' ところで、編集→git add→編集→git commit とした場合、どうなるかご存知ですか? ここでコミットされるのは、 addした時点のtarget.txtです Thursday, September 12, 13
  11. 11. A commit HEAD B インデックス ワーキング ツリー ワーキングツリー 現在のファイルの状態 インデックス addした変更 HEAD コミットを指すポインタ Thursday, September 12, 13
  12. 12. A HEAD B インデックス ワーキング ツリー ファイルを編集すると ワーキングツリーが変わる Thursday, September 12, 13
  13. 13. A HEAD B インデックス ワーキング ツリー git add で、ワーキングツリーの内容が インデックスに登録される Thursday, September 12, 13
  14. 14. A HEAD B インデックス ワーキング ツリー C git commit で、インデックスの状態の コミットが作成される Thursday, September 12, 13
  15. 15. では git reset HEAD git checkout -- とは何だったのか Thursday, September 12, 13
  16. 16. A HEAD B インデックス ワーキング ツリー git reset HEAD は、インデックスを HEADまで戻す インデックス Thursday, September 12, 13
  17. 17. A HEAD B インデックス ワーキング ツリー git checkout -- は、ワーキングツリーを インデックスまで戻す ワーキング ツリー Thursday, September 12, 13
  18. 18. これをふまへて Thursday, September 12, 13
  19. 19. $ git reset --hard HEAD git reset は、HEADを指定したコミットの位置に移動するコマンド --hardというオプションを付けると、HEAD、インデックス、ワーキング ツリーが指定したコミットの位置に移動します。 (--hardオプションを使う時は、個別のファイルを指定することはできな い。) Case3 全てのファイルを、直前のコミットの状態 に戻したい Thursday, September 12, 13
  20. 20. A HEAD B インデックス ワーキング ツリー git reset --hard HEAD インデックス ワーキング ツリー Thursday, September 12, 13
  21. 21. $ git reset --hard HEAD^ HEAD^ というのは、HEADのひとつ前のコミットのエイリアス (HEADとかHEAD^とかよくわかんない、とにかくあの時に戻りたい という場合はcommit_idを指定する $ git reset --hard 73da94c0204aaac817bc2(以下略) commit idはgit logなどで確認 ) Case4 全てのファイルを、ひとつ前のコミットの 状態に戻したい Thursday, September 12, 13
  22. 22. A HEAD B インデックス ワーキング ツリー git reset --hard HEAD^ インデックス ワーキング ツリー HEAD Thursday, September 12, 13
  23. 23. A HEAD B --hard があれば --soft もあります git reset --soft HEAD^ インデックス ワーキング ツリー HEAD Thursday, September 12, 13
  24. 24. A B この状態で $ git commit -am ‘こみっと!’ すると インデックス ワーキング ツリー HEAD Thursday, September 12, 13
  25. 25. A C Aの後にCというコミットが作成されます インデックス ワーキング ツリー HEAD Thursday, September 12, 13
  26. 26. git reset のオプションは他にも --mixed --merge --keep があります。 コミットの取消方法としては git-revert もあり、 指定したコミット"だけ"無かったことにしたい時な どに使用します。 Thursday, September 12, 13
  27. 27. Thursday, September 12, 13
  28. 28. Enjoy Git! Thursday, September 12, 13

×