Upgrade to Pro — share decks privately, control downloads, hide ads and more …

卒業研究のためのGit

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 卒業研究のためのGit

卒業研究(に限らないけど)でGitを使うための入門

Avatar for Ryuichi KAWAMATA

Ryuichi KAWAMATA

February 03, 2014
Tweet

More Decks by Ryuichi KAWAMATA

Other Decks in Education

Transcript

  1. Gitͱ͸Կͳͷ͔ʢ̏ʣ ˕˕ػೳ͕! ͍ͭͨ! ! ݄̎̍೔ Α͠ɺ˕˕ػೳ͕Ͱ͖ͨͧʂ! ࣍͸☓☓ػೳΛ࣮૷͠Α͏ʂ XXػೳ͕! ͍ͭͨ! !

    ݄̎̏೔ ☓☓ػೳ΋Ͱ͖ͨͧʂ! ࣍͸˛˛ػೳΛ࣮૷͠Α͏ʂ ؒҧ͍ʹ! ؾ͍ͮͨ…! ! ݄̎̑೔ ˕˕ػೳͷؒҧ͍ʹؾ͍ͮͨʂ! ௚͍͚ͨ͠Ͳ̐೔લ͸! Ͳ͏ͳ͍ͬͯͨΜ͚ͩͬ…
  2. Gitͱ͸Կͳͷ͔ʢ̏ʣ ˕˕ػೳ͕! ͍ͭͨ! ! ݄̎̍೔ Α͠ɺ˕˕ػೳ͕Ͱ͖ͨͧʂ! ࣍͸☓☓ػೳΛ࣮૷͠Α͏ʂ XXػೳ͕! ͍ͭͨ! !

    ݄̎̏೔ ☓☓ػೳ΋Ͱ͖ͨͧʂ! ࣍͸˛˛ػೳΛ࣮૷͠Α͏ʂ ؒҧ͍ʹ! ؾ͍ͮͨ…! ! ݄̎̑೔ ˕˕ػೳͷؒҧ͍ʹؾ͍ͮͨʂ! ௚͍͚ͨ͠Ͳ̐೔લ͸! Ͳ͏ͳ͍ͬͯͨΜ͚ͩͬ… ͢΂ͯͷաͪΛੜ·ΕΔલʹফ͠ڈΓ͍ͨ! ! ͢΂ͯͷtypoɺաڈͱະདྷͷ͢΂ͯͷϛεΛ! ! ͜ͷखͰŋŋŋŋŋɻ
  3. Gitͷ࢖͍ํʢ̍ʣΠϯετʔϧ ✤ ·ͣ͸ɺΠϯετʔϧͯ͠Έ·͠ΐ͏! ✤ OS X 10.9΍ɺLinuxͷਓ͸ඪ४Ͱೖ͍ͬͯΔ͸ͣ! ✤ λʔϛφϧΛ։͍ͯɺ$ git

    --versionͱଧͬͯ݁Ռ͕ग़Ε͹
 େৎ෉Ͱ͢! ✤ OS X 10.8Ҏલͷਓ΍ɺೖ͍ͬͯͳ͔ͬͨ৔߹͸ɺ
 http://git-scm.com/download
 ͔Βμ΢ϯϩʔυͯ͠ɺΠϯετʔϧ͠·͠ΐ͏! ✤ GUI͔Β࢖͏ʹ͸ɺSourceTree͕ศརͩͱࢥ͍·͕͢ɺ
 ࠓճ͸λʔϛφϧ͔ΒͷΈͰઆ໌͠·͢
  4. Gitͷ࢖͍ํʢ̐ʣgit init ✤ ࣮ࡍʹɺϦϙδτϦΛ࡞ͬͯΈ·͠ΐ͏! ✤ λʔϛφϧΛ։͍ͯɺ”DirA”Λ࡞੒͠·͢! ✤ $ mkdir DirA

    ✤ ϦϙδτϦΛ࡞੒͠·͢! ✤ $ git init ✤ ӈͷਤͷΑ͏ʹ”.git”͕
 ઃஔ͞Ε·͢ʂ DirA .git
  5. Gitͷ࢖͍ํʢ̑ʣgit add ✤ ࣍ʹɺ”README.txt”Λॻ͍ͯอଘ͠·͠ΐ͏! ✤ อଘͨ͠Βɺgit addίϚϯυΛ࢖͍·͢! ✤ $ git

    add README.txt ✤ ͢ΔͱɺGit͕”README.txt”ͷ
 มߋ఺Λ؂ࢹ͢Δ”४උ”Λ͠·͢ DirA README.txt .git
  6. Gitͷ࢖͍ํʢ̒ʣgit status ✤ ؂ࢹ͞ΕΔϑΝΠϧ͕Ͳ͏ͳΔͷ͔Λ֬ೝ͠·͠ΐ͏! ✤ $ git status
 …
 #

    Changes to be committed:
 # (use "git rm --cached..." to unstage)
 #
 # new file: README.txt ✤ ্ͷΑ͏ͳϝοηʔδͱग़·͢! ✤ Git͕”README.txt”Λ৽͘͠؂ࢹ͢Δ४උΛ
 ࢝ΊͨΑʔͱ͍͏ϝοηʔδͰ͢! ✤ ؂ࢹ͢Δ४උΛ͞ΕͨϑΝΠϧΛɺ
 εςʔδϯά͞Ε͍ͯΔͱݺͼ·͢ DirA README.txt .git
  7. Gitͷ࢖͍ํʢ̓ʣεςʔδϯά ✤ ͜ͷঢ়ଶͰɺߋʹ”README.txt”Λฤूͯ͠ɺ
 ΋͏Ұ౓git statusΛݟͯΈ·͠ΐ͏! ✤ $ git status
 #

    Changes to be committed
 # new file: README.txt
 #
 # Changes not staged for commit:
 # modified: README.txt
 # ✤ લͷεϥΠυͷ࣌ͱҧͬͯɺ
 ʮมߋ఺͕͋Δ͚Ͳεςʔδϯά͞Εͯͳ͍
 ϑΝΠϧ͕͋ΔΑʂʯͱ͍͏ϝοηʔδ͕૿͑·͢! ✤ ΋͏Ұ౓ɺલͷεϥΠυಉ༷ʹgit add͠·͢ DirA README.txt .git
  8. Gitͷ࢖͍ํʢ̔ʣgit commit ✤ ͦΕͰ͸ɺgit statusͰ֬ೝͨ͠มߋ఺Λه࿥͠·͠ΐ͏
 Git͕؅ཧ͢Δมߋ఺ʹ͍ͭͯɺίϛοτͱݺͼ·͢! ✤ $ git commit

    -m“README.txtを追加した”
 [master (root-commit) 0fc233f] README.txtを追加した
 1 file changed, 2 insertions(+)
 create mode 100644 README.txt ✤ มߋ఺Λه࿥͢Δʹ͸ɺ͜ͷΑ͏ʹ
 git commitίϚϯυΛ࢖͍·͢ɻ! ✤ มߋ఺ʹ͍ͭͯͷ؆୯ͳઆ໌Λɺ
 -m “΄͛΄͛”ͷΑ͏ʹҾ਺Ͱೖྗ͠·͢ DirA README.txt .git
  9. Gitͷ࢖͍ํʢ̕ʣgit log ✤ ͭ͗ʹɺgit logίϚϯυͰ
 ίϛοτͷཤྺΛ֬ೝ͠·͠ΐ͏! ✤ $ git log


    commit 0fc233f013774ced26ccb2f6b5833f4f7e120122
 Author: Ryuichi KAWAMATA (@rkmathi) 
 Date: Mon Feb 3 19:43:54 2014 +0900
 README.txtを追加した ✤ ίϛοτҰཡ͕දࣔ͞Ε·͢ DirA README.txt .git
  10. Gitͷ࢖͍ํʢ̍̌ʣ΋͏͍ͪͲ ✤ ผͷϑΝΠϧΛ௥Ճͯ͠ɺ
 ΋͏Ұ౓git commit·ͰͷྲྀΕΛ΍ͬͯΈ·͠ΐ͏! ✤ ࠓճ͸ɺ”main.c”ͱ͍͏ϑΝΠϧΛॻ͍ͯอଘ͠·͢! ✤ $ git

    add main.c
 $ git status
 $ git commit -m “main”cを追加した”
 $ git log
 commit 8f2014419a7c47df7623848a2d4372c2c6158ea9
 Author: Ryuichi KAWAMATA (@rkmathi)
 Date: Mon Feb 3 19:54:25 2014 +0900
 main.cを追加した
 commit 0fc233f013774ced26ccb2f6b5833f4f7e120672
 Author: Ryuichi KAWAMATA (@rkmathi)
 Date: Mon Feb 3 19:43:54 2014 +0900
 README.txtを追加した ✤ ͜ΕͰɺίϛοτཤྺ͕̎ͭʹͳΓ·ͨ͠
 DirA README.txt .git main.c
  11. Gitͷ࢖͍ํʢ̍̎ʣgit show ✤ ࠷৽ͷίϛοτͷ৘ใΛݟΔʹ͸ɺgit showίϚϯυΛ࢖͍·͢! ✤ $ git show
 commit

    8f2014419a7c47df7623848a2d4372c2c6158ea9
 Author: Ryuichi KAWAMATA (@rkmathi) <[email protected]>
 Date: Mon Feb 3 19:54:25 2014 +0900
 
 main.cを追加した
 
 diff --git a/main.c b/main.c
 new file mode 100644
 index 0000000..2efc776
 --- /dev/null
 +++ b/main.c
 @@ -0,0 +1,6 @@
 +#include <stdio.h>
 +
 +int main(void) {
 + printf("Hello, world\n");
 + return 0;
 +} ✤ ͜ΕΛݟΔͱ෼͔Δ௨Γɺίϛοτ͸ϑΝΠϧͷ
 มߋ఺Λه࿥͢Δ΋ͷͰ͢! ✤ ྫ͑͹ɺ্ͷίϛοτ͸લʹԿ΋ͳ͔ͬͨ(/dev/null)͚Ͳɺ
 ৽͘͠”main.c”ͱ͍͏ϑΝΠϧΛ࡞੒͠ɺ6ߦ௥ه͍ͯ͠Δมߋ఺
 Ͱ͋Δͱ͍͏͜ͱ͕Θ͔Γ·͢ DirA README.txt .git main.c
  12. Gitͷ࢖͍ํʢ̍̏ʣίϛοτʹ͍ͭͯ ✤ ߋʹmain.cΛฤू͠ɺίϛοτ͔ͯ͠Βɺ΋͏Ұ౓git showίϚϯυΛͯ͠Έ·͠ΐ͏! ✤ $ git show
 commit e44b226b0a4de0bbf145fc4a7df36cc42974dcb5


    Author: Ryuichi KAWAMATA (@rkmathi) <[email protected]>
 Date: Mon Feb 3 20:12:47 2014 +0900
 
 main.cを変更した
 
 diff --git a/main.c b/main.c
 index 2efc776..4ff6623 100644
 --- a/main.c
 +++ b/main.c
 @@ -1,6 +1,6 @@
 #include <stdio.h>
 int main(void) {
 - printf("Hello, world\n");
 + printf("Hello, Git!\n");
 return 0;
 } ✤ ৽͘͠ϑΝΠϧΛ࡞ͬͨίϛοτͰ͸ͳ͘ɺ
 ͢Ͱʹաڈʹίϛοτ͞Εͨ͜ͱ͕͋ΔϑΝΠϧΛฤूͷ
 ৔߹͸ɺ্ͷΑ͏ʹมߋ͞ΕͨߦΛڭ͑ͯ͘Ε·͢ DirA README.txt .git main.c
  13. Gitͷ࢖͍ํʢ̍̐ʣίϛοτʹ͍ͭͯ ✤ લͷεϥΠυͰݟͨΑ͏ʹɺGitͷίϛοτ͸௚લͷίϛοτͱͷ ࠩ෼ΛੵΈ্͍͖͛ͯ·͢! ✤ ҰͭҰͭͷίϛοτͰɺશͯͷཤྺΛه࿥͍ͯ͠·͢ main.c の4行目を 編集 main.c

    を新規追加 して、編集 commit: e44b226b0… README.txt を新規追加
 して、編集 1൪໨ͷ! ίϛοτ 2൪໨ͷ! ίϛοτ 3൪໨ͷ! ίϛοτ ࠷৽! (HEAD) commit: 8f2014419… commit: 0fc233f01…
  14. Gitͷ࢖͍ํʢ̍̑ʣgit reset —hard ✤ git resetίϚϯυΛ࢖͏ͱɺίϛοτΛ࡟আͨ͠ΓɺϑΝΠϧͷεςʔδϯάΛղআ͢Δ͜ͱ͕Ͱ͖·͢! ✤ ྫ͑͹ɺ࠷৽ͷίϛοτ(0fc233f01…)Λ࡟আͯ͠ɺ̍ͭલͷίϛοτ(~1)ʹ͢Δʹ͸࣍ͷίϚϯυͰͰ͖·͢! ✤ $

    git reset —hard 0fc233f~1 ✤ ͜ΕͰɺ࠷৽ͷίϛοτ͸ԼͷਤͰ͍͏2൪໨ͷίϛοτ(8f2014419…)ʹͳΓ·ͨ͠ main.c の4行目を 編集 main.c を新規追加 して、編集 README.txt を新規追加
 して、編集 1൪໨ͷ! ίϛοτ 2൪໨ͷ! ίϛοτ 3൪໨ͷ! ίϛοτΛ
 ࡟আʂ ☓ ࠷৽! (HEAD) commit: e44b226b0… commit: 8f2014419… commit: 0fc233f01…
  15. Gitͷ࢖͍ํʢ̍̒ʣgit reflog ✤ લͷεϥΠυͷgit reset —hard͸ͱͯ΋ڧྗͰɺίϛοτΛͳ͔ͬͨ͜ͱʹͯ͠͠·͍·͢! ✤ ؒҧ͑ͯgit reset —hardͯ͠ফͯ͠͠·ͬͨΒɺ(͓ͯ͘ΕͰͳ͚Ε͹)git

    reflogίϚϯυͰૢ࡞ͷ֬ೝΛͯ͠ɺ
 ͦͷҐஔΛࢦఆͯ͠git reset --hardΛ࣮ߦ͢Δͱɺݩʹ໭͢͜ͱ͕Ͱ͖·͢ʂ! ✤ $ git reflog
 8f20144 HEAD@{0}: reset: moving to e44b226~1
 e44b226 HEAD@{1}: commit: main.cを変更した
 8f20144 HEAD@{2}: commit: main.cを追加した
 0fc233f HEAD@{3}: commit (initial): README.txtを追加した
 $ git reset —hard “HEAD@{1}" main.c の4行目を 編集 main.c を新規追加 して、編集 README.txt を新規追加
 して、編集 1൪໨ͷ! ίϛοτ 2൪໨ͷ! ίϛοτ 3൪໨ͷ! ίϛοτΛ
 ෮׆ʂʂ ࠷৽! (HEAD) commit: e44b226b0… commit: 8f2014419… commit: 0fc233f01…
  16. Gitͷ࢖͍ํʢ̍̓ʣgit diff ✤ ίϛοτಉ࢜ͷࠩ෼Λ֬ೝ͢Δʹ͸ɺgit diffίϚϯυΛ࢖͍·͢! ✤ $ git diff 0fc2..8f20

    ✤ ͜ΕͰɺ3൪໨(0fc23…)ͱ̎൪໨(8f201…)ͷίϛοτͷࠩ෼Λ֬ೝͰ͖·͢
 ࢦఆ͢Δίϛοτͷϋογϡ͸શ෦ॻ͘ඞཁ͸ͳ͘ɺ
 ॏෳ͍ͯ͠ͳ͚Ε͹ɺ࠷௿ܻ͔͚̐͹େৎ෉Ͱ͢ main.c の4行目を 編集 main.c を新規追加 して、編集 README.txt を新規追加
 して、編集 1൪໨ͷ! ίϛοτ 2൪໨ͷ! ίϛοτ commit: e44b226b0… commit: 8f2014419… commit: 0fc233f01… 3൪໨ͷ! ίϛοτ
  17. Gitͷ࢖͍ํʢ̍̔ʣgit diff ✤ ίϛοτಉ࢜ͷࠩ෼ͷ͏ͪɺ͋ΔϑΝΠϧʹ͍͚ͭͯͩΛ֬ೝ͢Δ͜ͱ΋Ͱ͖·͢! ✤ $ git diff 0fc2..8f20 --

    main.c ✤ ͜ͷΑ͏ʹɺൺ΂͍ͨίϛοτͷޙΖʹϋΠϑϯΛ2ͭܨ͛ͯɺ
 ϑΝΠϧ໊Λྻڍ͢ΔͱɺͦͷϑΝΠϧʹ͍ͭͯͷࠩ෼ͷΈΛݟΔ͜ͱ͕Ͱ͖·͢ main.c の4行目を 編集 main.c を新規追加 して、編集 README.txt を新規追加
 して、編集 1൪໨ͷ! ίϛοτ 2൪໨ͷ! ίϛοτ commit: e44b226b0… commit: 8f2014419… commit: 0fc233f01… 3൪໨ͷ! ίϛοτ
  18. Gitͷ࢖͍ํʢ̍̕ʣͦͷଞ ✤ ଞʹ΋ɺGitʹ͸ศརͳίϚϯυ͕ͨ͘͞Μ͋Γ·͢
 ޙड़͢ΔެࣜͷϚχϡΞϧͳͲͰௐ΂ͯΈ͍ͯͩ͘͞! ✤ git rm / git mv

    ✤ git branch / git checkout ✤ git revert ✤ git cherry-pick ✤ git grep / git ls-files などなど。。。
  19. GitΛ࢖͍͜ͳ͢ʢ̍ʣϚχϡΞϧ ✤ GitΛ࢖͍ͬͯͯɺʮ͜Μͳ͜ͱͰ͖Δ͔ͳʁʯͱ
 ࢥͬͨ࣌ʹ͸ɺϚχϡΞϧΛಡΉͱཧղ͕ਂ·Γ·͢! ✤ GitͷެࣜαΠτʹ೔ຊޠ൛ͷϚχϡΞϧ͕͋ΔͷͰɺ
 ͻͱ௨Γ໨Λ௨͢ͱྑ͍ͱࢥ͍·͢! ✤ Pro Git

    book - Japanese
 http://git-scm.com/book/ja! ✤ ·ͨɺνʔτγʔτΛެ։͞Ε͍ͯΔํ͕͍·͢ͷͰɺ
 ҹ࡮ͯ͠खݩʹ͓͍͓ͯ͘ͱεϜʔζʹֶशͰ͖Δͱ͓΋͍·͢! ✤ Git Cheat Sheet ೔ຊޠ൛
 http://www.textdrop.net/doc/git-cheat-sheet-ja/
  20. GitΛ࢖͍͜ͳ͢ʢ̏ʣgit reset ✤ git resetʹ͸ɺΦϓγϣϯ͕͍͔ͭ͋͘Γɺ
 ͦΕͧΕͰڍಈ͕ҧ͖ͬͯ·͢! ✤ —soft ✤ —mixed

    (またはオプションなし) ✤ —hard ✤ εϥΠυͰ͸--hard͔͠औΓ্͛·ͤΜͰ͕ͨ͠ɺ
 ଞͷΦϓγϣϯʹ͍ͭͯ͸࣍ͷهࣄΛࢀߟʹ͢Δͱྑ͍ͱࢥ͍·͢! ✤ ʮgit reset ʹ͍ͭͯ΋·ͱΊͯΈΔʯ
 http://d.hatena.ne.jp/murank/20110327/1301224770