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

卒業研究のためのGit

 卒業研究のためのGit

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

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