Slide 1

Slide 1 text

࣮຿Ͱ࢖͑ΔGitίϚϯυ ϖνΦϒ 2019/10/24 akito/yukimasa

Slide 2

Slide 2 text

࣮຿ܦݧ6ϲ݄໨ͷGitൃදձ

Slide 3

Slide 3 text

ࣗݾ঺հ • ໊લɹɿ ஑ా ༗ًকʢϢΩϚαɺϢΩʣ • ॴଐɹɿ גࣜձࣾϛϥΠτσβΠϯ • ݴޠɹɿ Ruby (Rails) / iOSʢswiftʣ/ Androidʢjavaʣ • ࣮຿ɹɿ 6ϲ݄໨ • લ৬ɹɿ ધഫ৐ધһʢλάϘʔτʣ • ग़਎ɹɿ ਆಸ઒ݝԣ඿ࢢ • Twitterɿ @yyykms123

Slide 4

Slide 4 text

ࣗݾ঺հ • ໊લɹɿ ҝ౻ ΞΩτ • ॴଐɹɿ גࣜձࣾϛϥΠτσβΠϯ • ݴޠɹɿ Ruby (Rails) / iOSʢswiftʣ/ Androidʢjavaʣ • ࣮຿ɹɿ 6ϲ݄໨ • લ৬ɹɿ αϙʔτσεΫ • ग़਎ɹɿ ઍ༿ݝחέ୩ࢢ • Twitterɿ @akito_tameto • झຯ ɿ ےτϨ͕޷͖Ͱ͢ὑ

Slide 5

Slide 5 text

ࠓ೔࿩͢͜ͱ 1. ࣮຿ͰΑ͘࢖͏ίϚϯυ 2. ࣮຿Ͱͨ·ʹ࢖͏ίϚϯυ 3. ͓·͚

Slide 6

Slide 6 text

1. ࣮຿ͰΑ͘࢖͏ίϚϯυ

Slide 7

Slide 7 text

1. ࣮຿ͰΑ͘࢖͏ίϚϯυ 7. git diff 8. git add 9. git commit 10. git log 11. git push 12. git reset 1. git pull 2. git fetch 3. git merge 4. git checkout 5. git branch 6. git status

Slide 8

Slide 8 text

·ͣ͸ɺͪ͜Βͷ3ͭʂʂ 7. git diff 8. git add 9. git commit 10. git log 11. git push 12. git reset 1. git pull 2. git fetch 3. git merge 4. git checkout 5. git branch 6. git status

Slide 9

Slide 9 text

ͦͷલʹɺલఏͱͯ͠ʂʂ • GithubͳͲͷ΢ΣϒαʔϏεΛར༻ͯ͠ιʔείʔ υΛ೚ҙͷσΟϨΫτϦͰ git clone Λ͠·͢ɻ • ࣍ʹɺΫϩʔϯΛͨ͠σΟϨΫτϦͰ git init Λߦ ͏͜ͱͰGitίϚϯυΛར༻͢Δࣄ͕Ͱ͖·͢ɻ

Slide 10

Slide 10 text

ͦͯ͠ɺ3ͭͷྖҬ͕͋Γ·͢∑ ƅЧƅ)

Slide 11

Slide 11 text

αʔόʔଆ ϩʔΧϧଆ ϦϞʔτ ϦϙδτϦ ϩʔΧϧ ϦϙδτϦ ϫʔΩϯά πϦʔ

Slide 12

Slide 12 text

git pullͱ͸ʁ

Slide 13

Slide 13 text

git pull • ϦϞʔτϦϙδτϦͷมߋཤྺΛϫʔΩϯάπϦʔ ΁μ΢ϯϩʔυͰ͖Δ • fetch͔Βmerge·ͰΛߦͳ͍ͬͯΔ $ git pull origin master

Slide 14

Slide 14 text

αʔόʔଆ ϩʔΧϧଆ ϦϞʔτ ϦϙδτϦ ϩʔΧϧ ϦϙδτϦ ϫʔΩϯά πϦʔ pull

Slide 15

Slide 15 text

git fetch • ϦϞʔτϦϙδτϦͷมߋཤྺΛϩʔΧϧϦϙδτϦ ΁μ΢ϯϩʔυͰ͖Δ $ git fetch origin • Φϓγϣϯ-pͰ࡟আ͞ΕͨϒϥϯνͳͲ΋൓өͰ͖Δ

Slide 16

Slide 16 text

αʔόʔଆ ϩʔΧϧଆ ϦϞʔτ ϦϙδτϦ ϩʔΧϧ ϦϙδτϦ ϫʔΩϯά πϦʔ pull fetch

Slide 17

Slide 17 text

git merge • ϩʔΧϧϦϙδτϦͷϒϥϯνΛϫʔΩϯάπϦʔͷ ϒϥϯνΛ݁߹Ͱ͖Δ $ git merge master

Slide 18

Slide 18 text

αʔόʔଆ ϩʔΧϧଆ ϦϞʔτ ϦϙδτϦ ϩʔΧϧ ϦϙδτϦ ϫʔΩϯά πϦʔ pull fetch merge

Slide 19

Slide 19 text

݁ՌpullΛ࢖͑͹͍͍ͷʁ

Slide 20

Slide 20 text

fetchͱmergeΛҰॹʹߦ͍ͬͯΔ ͱ͍͏ͷΛཧղͯ͠ɺ໰୊ͳ͚Ε͹ େৎ෉ʂʂ

Slide 21

Slide 21 text

࣍͸ɺͪ͜Βʂʂ 7. git diff 8. git add 9. git commit 10. git log 11. git push 12. git reset 1. git pull 2. git fetch 3. git merge 4. git checkout 5. git branch 6. git status

Slide 22

Slide 22 text

git checkout • Φϓγϣϯ-bΛ͚ͭΔ͜ͱͰݱࡏͷϒϥϯν͔Β ৽͍͠ϒϥϯνΛ࡞੒͢Δ͜ͱ͕Ͱ͖Δ • ฤूͨ͠ϑΝΠϧΛϦηοτ͢Δࣄ΋Ͱ͖Δ • ผϒϥϯνʹ੾Γସ͑Δ͜ͱ΋Ͱ͖Δ $ $ git checkout -b B

Slide 23

Slide 23 text

" " $ $ git checkout A # ݱࡏͷϒϥϯν " " # ݱࡏͷϒϥϯν

Slide 24

Slide 24 text

git branch • ϒϥϯνͷҰཡΛ֬ೝͰ͖Δ $ $ git branch -D ࡟আ͢Δϒϥϯν໊ • ݱࡏͲͷϒϥϯν͔Λ֬ೝͰ͖Δ • Φϓγϣϯ-DͰϒϥϯνΛ࡟আͰ͖Δ

Slide 25

Slide 25 text

࣍͸ɺͪ͜Βʂʂ 7. git diff 8. git add 9. git commit 10. git log 11. git push 12. git reset 1. git pull 2. git fetch 3. git merge 4. git checkout 5. git branch 6. git status

Slide 26

Slide 26 text

git status • ϑΝΠϧमਖ਼ɺ௥ՃͳͲݱࡏͷঢ়گΛ֬ೝͰ͖Δ • جຊΦϓγϣϯΛ࢖༻͢Δ͜ͱ͸ͳ͍

Slide 27

Slide 27 text

git diff • मਖ਼ͨ͠ϑΝΠϧͷৄࡉΛ֬ೝͰ͖Δ • ϑΝΠϧ໊Λࢦఆ͢ΔࣄͰͦͷϑΝΠϧͷΈͷৄࡉΛ ֬ೝͰ͖·͢

Slide 28

Slide 28 text

࣍͸ɺͪ͜Βʂʂ 7. git diff 8. git add 9. git commit 10. git log 11. git push 12. git reset 1. git pull 2. git fetch 3. git merge 4. git checkout 5. git branch 6. git status

Slide 29

Slide 29 text

git add • मਖ਼ɺ௥Ճͨ͠ϑΝΠϧΛεςʔδϯάΤϦΞ΁ ௥ՃͰ͖Δ $ $ git add . • ΦϓγϣϯͰ.(υοτ)Λར༻͢ΔͱશͯΛબ୒Ͱ͖Δ • ϑΝΠϧΛࢦఆ͢Δࣄ΋Ͱ͖Δ • ଞͷΦϓγϣϯ͸͓·͚Ͱ঺հ͠·͢ὑ

Slide 30

Slide 30 text

ͦͷલʹεςʔδϯάΤϦΞͱ͸ʁ • εςʔδϯάΤϦΞͱ͸ίϛοτ͢ΔલʹҰ࣌తʹ อଘΛ͓ͯ͘͜͠ͱ͕Ͱ͖Δ

Slide 31

Slide 31 text

αʔόʔଆ ϩʔΧϧଆ ϦϞʔτ ϦϙδτϦ ϩʔΧϧ ϦϙδτϦ ϫʔΩϯά πϦʔ εςʔδϯάΤϦΞ add

Slide 32

Slide 32 text

git commit • ϦϙδτϦʹ൓ө͢Δʹ͸ొ࿥(ه࿥)Λ͠·͢ $ $ git commit -m ‘ίϛοτϝοηʔδ’ • Φϓγϣϯ-mͰvimͳͲΛ։͔ͣʹίϛοτϝοηʔδΛ ೖྗͰ͖·͢

Slide 33

Slide 33 text

αʔόʔଆ ϩʔΧϧଆ ϦϞʔτ ϦϙδτϦ ϩʔΧϧ ϦϙδτϦ ϫʔΩϯά πϦʔ εςʔδϯάΤϦΞ add commit

Slide 34

Slide 34 text

࣍͸ɺͪ͜Βʂʂ 7. git diff 8. git add 9. git commit 10. git log 11. git push 12. git reset 1. git pull 2. git fetch 3. git merge 4. git checkout 5. git branch 6. git status

Slide 35

Slide 35 text

git log • ίϛοτཤྺΛ֬ೝ͢Δࣄ͕Ͱ͖Δ • Φϓγϣϯ-਺ࣈͰཤྺΛߜΔࣄ͕Ͱ͖Δ • Φϓγϣϯ-onelineͰίϛοτཤྺΛ1ߦͮͭදࣔ • Φϓγϣϯ-graphͰάϥϑͰදࣔͰ͖Δ

Slide 36

Slide 36 text

࣍͸ɺͪ͜Βʂʂ 7. git diff 8. git add 9. git commit 10. git log 11. git push 12. git reset 1. git pull 2. git fetch 3. git merge 4. git checkout 5. git branch 6. git status

Slide 37

Slide 37 text

git push • ϩʔΧϧͰมߋͨ͠಺༰ϦϞʔτ΁ͱ൓өͰ͖Δ $ $ git push origin master

Slide 38

Slide 38 text

αʔόʔଆ ϩʔΧϧଆ ϦϞʔτ ϦϙδτϦ ϩʔΧϧ ϦϙδτϦ ϫʔΩϯά πϦʔ εςʔδϯάΤϦΞ add commit push

Slide 39

Slide 39 text

࠷ޙʹͪ͜Βʂʂ 7. git diff 8. git add 9. git commit 10. git log 11. git push 12. git reset 1. git pull 2. git fetch 3. git merge 4. git checkout 5. git branch 6. git status

Slide 40

Slide 40 text

git reset • मਖ਼ɺaddɺcommitΛϦηοτ͢Δࣄ͕Ͱ͖Δ • Φϓγϣϯ--mixedͰίϛοτɺaddঢ়ଶΛ ϦηοτͰ͖·͢ • Φϓγϣϯ--softͰίϛοτͷঢ়ଶΛϦηοτ • Φϓγϣϯ--hardϑΝΠϧɺίϛοτɺaddঢ়ଶ ΛϦηοτͰ͖Δ

Slide 41

Slide 41 text

ਤΛ·ͱΊΔͱ

Slide 42

Slide 42 text

αʔόʔଆ ϩʔΧϧଆ ϦϞʔτ ϦϙδτϦ ϩʔΧϧ ϦϙδτϦ ϫʔΩϯά πϦʔ εςʔδϯάΤϦΞ add commit push pull fetch merge

Slide 43

Slide 43 text

2. ࣮຿Ͱͨ·ʹ࢖͏ίϚϯυ

Slide 44

Slide 44 text

2. ࣮຿Ͱͨ·ʹ࢖͏ίϚϯυ • git rebase • git cherry-pick • git stash • git revert

Slide 45

Slide 45 text

2. ࣮຿Ͱͨ·ʹ࢖͏ίϚϯυ • git rebase • git cherry-pick • git stash • git revert

Slide 46

Slide 46 text

git rebase ͬͯԿʁ

Slide 47

Slide 47 text

git rebase • ϒϥϯνΛ౷߹͢Δ • ίϛοτཤྺΛݟ΍͘͢͢Δ • ίϛοτͷॱ൪ΛೖΕସ͑Δ • ෳ਺ͷίϛοτΛ·ͱΊΔ • աڈͷίϛοτϝοηʔδΛมߋ͢Δ • 1౓ίϛοτͨ͠಺༰Λฤू͢Δ

Slide 48

Slide 48 text

mergeͱrebaseͷҧ͍ͬͯʁ

Slide 49

Slide 49 text

merge $ $ git checkout master $ $ git merge topic UPQJD NBTUFS

Slide 50

Slide 50 text

NFSHFίϛοτ merge NBTUFS UPQJD $ $ git checkout master $ $ git merge topic UPQJD NBTUFS

Slide 51

Slide 51 text

rebase UPQJD NBTUFS $ $ git checkout topic $ $ git rebase master

Slide 52

Slide 52 text

rebase UPQJD NBTUFS $ $ git checkout topic $ $ git rebase master UPQJD NBTUFS

Slide 53

Slide 53 text

rebase UPQJD NBTUFS $ $ git checkout master $ $ git merge topic $ NBTUFS UPQJD NBTUFS fast forward

Slide 54

Slide 54 text

rebase UPQJD NBTUFS $ $ git checkout master $ $ git merge topic $ NBTUFS NBTUFS UPQJD NFSHFίϛοτ non fast forward

Slide 55

Slide 55 text

ϑΝετϑΥϫʔυͬͯʁ

Slide 56

Slide 56 text

ϑΝετϑΥϫʔυ • merge͢ΔϒϥϯνͷHEADʹͦͷ··Ҡಈ ͢ΔʢϚʔδίϛοτΛ࡞Βͳ͍ʣ • ෼ذޙͰ྆ํͷϒϥϯνʹίϛοτ͕͋Δͱ ϑΝετϑΥϫʔυ͸Ͱ͖ͳ͍

Slide 57

Slide 57 text

fast-forward UPQJD NBTUFS

Slide 58

Slide 58 text

fast-forward UPQJD NBTUFS NBTUFS UPQJD

Slide 59

Slide 59 text

non fast-forward UPQJD NBTUFS

Slide 60

Slide 60 text

non fast-forward UPQJD NBTUFS NBTUFS UPQJD

Slide 61

Slide 61 text

ϒϥϯν͕෼ذ͍ͯͨ͠Β UPQJD NBTUFS non fast-forwardͰϚʔδͱͳΔ

Slide 62

Slide 62 text

rebaseͬͯԿΛ΍ͬͯΔͷʁ

Slide 63

Slide 63 text

rebaseͷಈ͖ 1. topicͷίϛοτΛҰ࣌తʹอଘ 2. masterʹϦηοτ(git reset --hard master) 3. Ұ࣌తʹอଘͨ͠ίϛοτΛҰͭͣͭॱ൪ʹ ద༻͢Δ ※ίϛοτID͕มΘΔ

Slide 64

Slide 64 text

rebaseͷಈ͖ UPQJD NBTUFS

Slide 65

Slide 65 text

rebaseͷಈ͖ UPQJD NBTUFS Ұ࣌อଘ

Slide 66

Slide 66 text

rebaseͷಈ͖ NBTUFS Ұ࣌อଘ UPQJD git reset --hard master

Slide 67

Slide 67 text

rebaseͷಈ͖ NBTUFS Ұ࣌อଘ UPQJD ҰͭͣͭదԠ

Slide 68

Slide 68 text

rebaseͷಈ͖ NBTUFS Ұ࣌อଘ UPQJD ҰͭͣͭదԠ

Slide 69

Slide 69 text

rebaseͷ஫ҙ఺ ϦϞʔτʹpushͯ͋͠Δίϛοτ͸ rebase͠ͳ͍ʂʂ → ෳ਺ਓͰ࡞ۀ͢Δ৔߹ʹଞͷਓ͕pushͰ͖ͳ͘ ͳͬͯ͠·͏ɻ طʹϦϞʔτʹpush͞Ε͍ͯΔϒϥϯνΛrebase͠ ͯɺ͞ΒʹͦΕΛpush͢ΔͱίϛοτID͕มΘΔɻ

Slide 70

Slide 70 text

ίϯϑϦΫτ͕ى͖ͨΒʁ

Slide 71

Slide 71 text

ίϯϑϦΫτ $ $ git rebase master topic First, rewinding head to replay your work on top of it... Applying: new topic Using index info to reconstruct a base tree... M test.txt Falling back to patching base and 3-way merge... Auto-merging test.txt CONFLICT (content): Merge conflict in test.txt error: Failed to merge in the changes. Patch failed at 0001 new topic hint: Use 'git am --show-current-patch' to see the failed patch Resolve all conflicts manually, mark them as resolved with "git add/rm ", then run "git rebase --continue". You can instead skip this commit: run "git rebase --skip". To abort and get back to the state before "git rebase", run "git rebase --abort".

Slide 72

Slide 72 text

3ͭͷબ୒ࢶ • git rebase --continue ίϯϑϦΫτΛղফ͔ͯ͠Βଓ͚Δ৔߹ • git rebase --skip ίϛοτΛඈ͹͢৔߹ • git rebase --abort rebaseΛதஅ͢Δ৔߹

Slide 73

Slide 73 text

mergeͱrebaseͷҧ͍Λ ·ͱΊΔͱ

Slide 74

Slide 74 text

rebase merge • ϒϥϯνͷཤྺ͕มߋ͞Εͳ͍ • Ϛʔδίϛοτ͕࡞੒͞ΕΔ • ن໛͕େ͖͘ͳΔͱཤྺ͕ෳࡶʹͳΔ • ཤྺ͕γϯϓϧʹͳΓݟ΍͘͢ͳΔ • ίϛοτID͕มߋ͞ΕΔͷͰ஫ҙ͕ඞཁ • ίϯϑϦΫτ࣌ͷରԠ͕ෳࡶ

Slide 75

Slide 75 text

Ͳ͏΍ͬͯ࢖͍෼͚Δͷʁ

Slide 76

Slide 76 text

։ൃνʔϜͷӡ༻ʹΑΔʂ

Slide 77

Slide 77 text

ϓϩδΣΫτϝϯόʔ͕Gitʹ ׳Ε͍ͯͳ͍৔߹

Slide 78

Slide 78 text

ཤྺ͕࢒ͬͯϦΧόϦʔ͠΍͍͔͢Βɺ mergeͷํ͕͍͍͔΋ʂ

Slide 79

Slide 79 text

ͱ͍͏͜ͱͰɺ ࠓ·Ͱͷ͕͜ͷ2ͭͷઆ໌ʂ

Slide 80

Slide 80 text

git rebase • ϒϥϯνΛ౷߹͢Δ • ίϛοτཤྺΛݟ΍͘͢͢Δ • ίϛοτͷॱ൪ΛೖΕସ͑Δ • ෳ਺ͷίϛοτΛ·ͱΊΔ • աڈͷίϛοτϝοηʔδΛมߋ͢Δ • 1౓ίϛοτͨ͠಺༰Λฤू͢Δ

Slide 81

Slide 81 text

࣍͸ͪ͜Βʂ

Slide 82

Slide 82 text

git rebase • ϒϥϯνΛ౷߹͢Δ • ίϛοτཤྺΛݟ΍͘͢͢Δ • ίϛοτͷॱ൪ΛೖΕସ͑Δ • ෳ਺ͷίϛοτΛ·ͱΊΔ • աڈͷίϛοτϝοηʔδΛมߋ͢Δ • 1౓ίϛοτͨ͠಺༰Λฤू͢Δ

Slide 83

Slide 83 text

rebaseͷinteractiveϞʔυ

Slide 84

Slide 84 text

rebase --interactive or rebase -i

Slide 85

Slide 85 text

git rebase • ϒϥϯνΛ౷߹͢Δ • ίϛοτཤྺΛݟ΍͘͢͢Δ • ίϛοτͷॱ൪ΛೖΕସ͑Δ • ෳ਺ͷίϛοτΛ·ͱΊΔ • աڈͷίϛοτϝοηʔδΛมߋ͢Δ • 1౓ίϛοτͨ͠಺༰Λฤू͢Δ

Slide 86

Slide 86 text

git rebase -i $ git log --oneline f65ceba E 46c578f C dadaaee D abeb89d B 4dd6e33 A $ ίϛοτCͱDͷॱ൪ΛೖΕସ͍͑ͨʂʂ

Slide 87

Slide 87 text

git rebase -i $ git log --oneline f65ceba E 46c578f C dadaaee D abeb89d B 4dd6e33 A $ ίϛοτCͱDͷॱ൪ΛೖΕସ͍͑ͨʂʂ git rebase -i HEAD~3

Slide 88

Slide 88 text

git rebase -i pick f65ceba E # Rebase abeb89d..f65ceba onto abeb89d (3 commands) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell ..ҎԼলུ.. pick dadaaee D pick 46c578f C ίϛοτCͱDͷॱ൪ΛೖΕସ͍͑ͨʂʂ

Slide 89

Slide 89 text

git rebase -i pick f65ceba E # Rebase abeb89d..f65ceba onto abeb89d (3 commands) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell ..ҎԼলུ.. pick 46c578f C pick dadaaee D ೖΕସ͑Δ ίϛοτCͱDͷॱ൪ΛೖΕସ͍͑ͨʂʂ

Slide 90

Slide 90 text

git rebase -i ίϛοτCͱDͷॱ൪ΛೖΕସ͍͑ͨʂʂ $ git rebase -i HEAD~3 Auto-merging sample.txt CONFLICT (content): Merge conflict in sample.txt error: could not apply 46c578f... C Resolve all conflicts manually, mark them as resolved with "git add/rm ", then run "git rebase --continue". You can instead skip this commit: run "git rebase --skip". To abort and get back to the state before "git rebase", run "git rebase --abort". Could not apply 46c578f... C ίϯϑϦΫτΛղফ͢Δʂʂ ↓ git add sample.txt ↓ git rebase --continue

Slide 91

Slide 91 text

git rebase -i ίϛοτCͱDͷॱ൪ΛೖΕସ͍͑ͨʂʂ $ git log --oneline 4bfc0bf E e1fc7e4 D e319908 C abeb89d B 4dd6e33 A $ ॱ൪ͱίϛοτID͕มΘ͍ͬͯΔ

Slide 92

Slide 92 text

git rebase • ϒϥϯνΛ౷߹͢Δ • ίϛοτཤྺΛݟ΍͘͢͢Δ • ίϛοτͷॱ൪ΛೖΕସ͑Δ • ෳ਺ͷίϛοτΛ·ͱΊΔ • աڈͷίϛοτϝοηʔδΛมߋ͢Δ • 1౓ίϛοτͨ͠಺༰Λฤू͢Δ

Slide 93

Slide 93 text

git rebase -i $ git log --oneline 4bfc0bf E e1fc7e4 D e319908 C abeb89d B 4dd6e33 A $ ίϛοτBͱCͱDΛ·ͱΊ͍ͨʂʂ git rebase -i HEAD~4

Slide 94

Slide 94 text

git rebase -i ίϛοτBͱCͱDΛ·ͱΊ͍ͨʂʂ pick abeb89d B pick 4bfc0bf E # Rebase 4dd6e33..4bfc0bf onto 4bfc0bf (4 commands) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message ..ҎԼলུ.. pick e319908 C pick e1fc7e4 D

Slide 95

Slide 95 text

git rebase -i ίϛοτBͱCͱDΛ·ͱΊ͍ͨʂʂ pick abeb89d B pick 4bfc0bf E # Rebase 4dd6e33..4bfc0bf onto 4bfc0bf (4 commands) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message ..ҎԼলུ.. s e319908 C s e1fc7e4 D ίϛοτΛ1ͭલͷίϛοτʹ౷߹

Slide 96

Slide 96 text

git rebase -i ίϛοτBͱCͱDΛ·ͱΊ͍ͨʂʂ # This is a combination of 3 commits. # This is the 1st commit message: # This is the commit message #2: # This is the commit message #3: # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # ..ҎԼলུ.. B C D

Slide 97

Slide 97 text

git rebase -i ίϛοτBͱCͱDΛ·ͱΊ͍ͨʂʂ # This is a combination of 3 commits. # This is the 1st commit message: # This is the commit message #2: # This is the commit message #3: # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # ..ҎԼলུ.. B+C+D

Slide 98

Slide 98 text

git rebase -i ίϛοτBͱCͱDΛ·ͱΊ͍ͨʂʂ $ git log --oneline 4bfc0bf E 3ba9c8d B+C+D 4dd6e33 A $

Slide 99

Slide 99 text

git rebase • ϒϥϯνΛ౷߹͢Δ • ίϛοτཤྺΛݟ΍͘͢͢Δ • ίϛοτͷॱ൪ΛೖΕସ͑Δ • ෳ਺ͷίϛοτΛ·ͱΊΔ • աڈͷίϛοτϝοηʔδΛมߋ͢Δ • 1౓ίϛοτͨ͠಺༰Λฤू͢Δ

Slide 100

Slide 100 text

git rebase -i $ git log --oneline 4bfc0bf E 3ba9c8d B+C+D 4dd6e33 A $ ίϛοτϝοηʔδΛมߋ͍ͨ͠ʂʂ

Slide 101

Slide 101 text

git rebase -i $ git log --oneline 4bfc0bf E 3ba9c8d B+C+D 4dd6e33 A $ ίϛοτϝοηʔδΛมߋ͍ͨ͠ʂʂ git commit --amend $ git log --oneline 4bfc0bf C 3ba9c8d B+C+D 4dd6e33 A $ 1ͭલͷίϛοτϝοηʔδ͸ git commit --amend ͰมߋͰ͖Δɻ ίϛοτϝοηʔδΛ ʮEʯ͔ΒʮCʯʹมߋɻ

Slide 102

Slide 102 text

git rebase -i $ git log --oneline 4bfc0bf E 3ba9c8d B+C+D 4dd6e33 A $ ίϛοτϝοηʔδΛมߋ͍ͨ͠ʂʂ git commit --amend $ git log --oneline 4bfc0bf C 3ba9c8d B+C+D 4dd6e33 A $ git rebase -i HEAD~2 2ͭҎ্લͷίϛοτϝοηʔδ͸ git rebase -i ͰมߋͰ͖Δɻ

Slide 103

Slide 103 text

git rebase -i ίϛοτϝοηʔδΛมߋ͍ͨ͠ʂʂ pick 94dbe7b E # Rebase 4dd6e33..94dbe7b onto 4dd6e33 (2 commands) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message ..ҎԼলུ.. pick 3ba9c8d B+C+D

Slide 104

Slide 104 text

git rebase -i ίϛοτϝοηʔδΛมߋ͍ͨ͠ʂʂ pick 94dbe7b E # Rebase 4dd6e33..94dbe7b onto 4dd6e33 (2 commands) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message ..ҎԼলུ.. e 3ba9c8d B+C+D

Slide 105

Slide 105 text

git rebase -i ίϛοτϝοηʔδΛมߋ͍ͨ͠ʂʂ $ git rebase -i HEAD~2 Stopped at 3ba9c8d... B+C+D You can amend the commit now, with git commit --amend Once you are satisfied with your changes, run git rebase --continue $

Slide 106

Slide 106 text

git rebase -i ίϛοτϝοηʔδΛมߋ͍ͨ͠ʂʂ $ git rebase -i HEAD~2 Stopped at 3ba9c8d... B+C+D You can amend the commit now, with git commit --amend Once you are satisfied with your changes, run git rebase --continue $ git commit --amend [detached HEAD 3c3629a] B Date: Sat Oct 19 14:20:11 2019 +0900 1 file changed, 3 insertions(+) $ git rebase --continue Successfully rebased and updated refs/heads/master. --amendͰίϛοτϝοηʔδΛ ʮB+C+Dʯ͔ΒʮBʯʹมߋ

Slide 107

Slide 107 text

git rebase -i ίϛοτϝοηʔδΛมߋ͍ͨ͠ʂʂ $ git log --oneline 4bfc0bf C 3ba9c8d B 4dd6e33 A $ edit͸ίϛοτϝοηʔδͷมߋ͚ͩͰͳ͘ɺ ϑΝΠϧͷมߋ౳΋Մೳʂʂ

Slide 108

Slide 108 text

edit͸ࢦఆͨ͠ίϛοτ·Ͱঢ়گ͕໭Γ·͢ɻ ʢࠓճͷ৔߹͸2ͭલͷίϛοτʣ ͳͷͰࢦఆͨ͠ίϛοτͷϑΝΠϧΛमਖ਼͢Δ͜ ͱ΋ՄೳͰ͢ɻ

Slide 109

Slide 109 text

ࠓճ͸ϑΝΠϧͷมߋ΋Ͱ͖Δͱ͍͏͜ͱͰedit Λ࢖༻͠·͕ͨ͠ɺ ίϛοτϝοηʔδΛม͍͚͑ͨͩͰ͋ΔͳΒ͹ rewordΛࢦఆͨ͠ํ͕؆୯Ͱ͢ʂʂ

Slide 110

Slide 110 text

ϦΫΤετ ޮՌ p, pick ίϛοτΛ࢖༻͢Δ r, reword ίϛοτϝοηʔδΛฤू e, edit ίϛοτ಺༰Λमਖ਼͢Δ s, squash มߋ಺༰Λ௚લͷίϛοτʹ౷߹ f, fixup มߋ಺༰Λ௚લͷίϛοτʹ౷߹ ίϛοτϝοηʔδΛഁغ x, exec γΣϧίϚϯυΛ࣮ߦ d, drop ίϛοτΛ࡟আ

Slide 111

Slide 111 text

rebaseͷ·ͱΊ

Slide 112

Slide 112 text

git rebase • ϒϥϯνΛ౷߹͢Δ • ίϛοτཤྺΛݟ΍͘͢͢Δ • ίϛοτͷॱ൪ΛೖΕସ͑Δ • ෳ਺ͷίϛοτΛ·ͱΊΔ • աڈͷίϛοτϝοηʔδΛมߋ͢Δ • 1౓ίϛοτͨ͠಺༰Λฤू͢Δ

Slide 113

Slide 113 text

2. ࣮຿Ͱͨ·ʹ࢖͏ίϚϯυ • git rebase • git cherry-pick • git stash • git revert

Slide 114

Slide 114 text

cherry-pickͬͯԿʁ

Slide 115

Slide 115 text

ಛఆͷίϛοτΛऔΓࠐΉ

Slide 116

Slide 116 text

cherry-pickͷ࢖͍ํ

Slide 117

Slide 117 text

1ͭͷίϛοτͷΈΛऔΓࠐΉ • ࢦఆͨ͠ίϛοτΛίϐʔͯ͠HEADͷޙʹ ௥Ճ͢Δ • ίϛοτID͕มΘΔ $ git cherry-pick

Slide 118

Slide 118 text

1ͭͷίϛοτͷΈΛऔΓࠐΉ $ $ git cherry-pick aaaaaaa aaaaaaa UPQJD NBTUFS bbbbbbb

Slide 119

Slide 119 text

1ͭͷίϛοτͷΈΛऔΓࠐΉ $ $ git cherry-pick aaaaaaa aaaaaaa UPQJD NBTUFS Ұ࣌อଘ bbbbbbb

Slide 120

Slide 120 text

1ͭͷίϛοτͷΈΛऔΓࠐΉ $ $ git cherry-pick aaaaaaa aaaaaaa UPQJD NBTUFS Ұ࣌อଘ bbbbbbb

Slide 121

Slide 121 text

ෳ਺ͷίϛοτΛऔΓࠐΉ • ࢦఆͨ͠ൣғͷίϛοτΛίϐʔͯ͠HEADͷޙʹ௥Ճ͢Δ • ίϛοτID͕มΘΔ • ࢝఺ͷίϛοτID͸औΓࠐΈ͍ͨίϛοτͷ1ͭલʹ͢Δ • ίϛοτͷ௚લΛද͢ʮ^ʯΛར༻͢Ε͹࢝఺ίϛοτ΋ؚΊΔ $ git cherry-pick ..

Slide 122

Slide 122 text

ෳ਺ͷίϛοτΛऔΓࠐΉ $ $ git cherry-pick aaaaaaa^..bbbbbbb UPQJD NBTUFS aaaaaaa bbbbbbb

Slide 123

Slide 123 text

ෳ਺ͷίϛοτΛऔΓࠐΉ $ $ git cherry-pick aaaaaaa^..bbbbbbb UPQJD NBTUFS Ұ࣌อଘ aaaaaaa bbbbbbb

Slide 124

Slide 124 text

ෳ਺ͷίϛοτΛऔΓࠐΉ $ $ git cherry-pick aaaaaaa^..bbbbbbb UPQJD Ұ࣌อଘ ҰͭͣͭదԠ NBTUFS aaaaaaa bbbbbbb

Slide 125

Slide 125 text

ෳ਺ͷίϛοτΛऔΓࠐΉ $ $ git cherry-pick aaaaaaa^..bbbbbbb UPQJD NBTUFS Ұ࣌อଘ ҰͭͣͭదԠ aaaaaaa bbbbbbb

Slide 126

Slide 126 text

cherry-pickͷΦϓγϣϯ

Slide 127

Slide 127 text

ίϛοτϝοηʔδΛมߋ͍ͨ͠ • ී௨ʹcherry-pickΛ͢Δͱݩͷίϛοτϝο ηʔδͱͳΔ • ʮ-eʯΦϓγϣϯͰϝοηʔδΛมߋͰ͖Δ $ git cherry-pick -e

Slide 128

Slide 128 text

ίϛοτΛͤͣʹऔΓࠐΉ • ʮ-nʯΦϓγϣϯͰɺίϛοτͤͣʹऔΓࠐ ΊΔ $ git cherry-pick -n

Slide 129

Slide 129 text

ίϯϑϦΫτ͕ൃੜͨ͠Β • ίϯϑϦΫτղফޙʹ--continueΛ࣮ߦ͢Δ ͜ͱͰcherry-pickͷॲཧ͕࠶։͢Δ $ git cherry-pick --continue

Slide 130

Slide 130 text

cherry-pickͷ஫ҙࣄ߲

Slide 131

Slide 131 text

cherry-pickͷ஫ҙࣄ߲ • ίϛοτID͕มΘΔ • ίϯϑϦΫτ͕ൃੜ͢Δ৔߹͕͋Δ • ෳ਺औΓࠐΉͱ͖ͷ࢝఺͸ɺऔΓࠐΈ͍ͨί ϛοτͷ1ͭલΛબͿ • جຊతʹϚʔδϒϥϯν͸औΓࠐΊͳ͍ ʢʮ-mʯΦϓγϣϯͰՄೳ͕ͩ͋·Γ࢖Θͳ͍ʣ

Slide 132

Slide 132 text

2. ࣮຿Ͱͨ·ʹ࢖͏ίϚϯυ • git rebase • git cherry-pick • git stash • git revert

Slide 133

Slide 133 text

git stash ͬͯԿʁ

Slide 134

Slide 134 text

ίϛοτͤͣʹҰ࣌ୀආ͢Δ

Slide 135

Slide 135 text

git stashͷ࢖͍ํ

Slide 136

Slide 136 text

มߋΛҰ࣌తʹୀආ͢Δ • มߋΛҰ࣌తʹୀආ͓ͯ͘͜͠ͱ͕Ͱ͖Δ • addͨ͠ϑΝΠϧ΋add͍ͯ͠ͳ͍ϑΝΠϧ΋ୀආ͞ΕΔ • save ͸লུՄೳ • ৽نϑΝΠϧ͸ୀආ͞Εͳ͍ $ git stash save

Slide 137

Slide 137 text

৽نϑΝΠϧ΋ୀආ͢Δ • --include-untracked • ৽نϑΝΠϧ΋ୀආͤ͞Δ͜ͱ͕Ͱ͖Δ $ git stash save -u

Slide 138

Slide 138 text

addͨ͠ϑΝΠϧ͸ୀආͨ͘͠ͳ͍ • --keep-index • addͨ͠ϑΝΠϧ͸ୀආ͞Εͳ͍ $ git stash save -k

Slide 139

Slide 139 text

ୀආ͢Δ࣌ʹίϝϯτΛ͚ͭΔ • stashͨ͠ϦετΛ֬ೝ͢Δ࣌ʹศར $ git stash save “ίϝϯτ”

Slide 140

Slide 140 text

ୀආͨ͠ҰཡΛ֬ೝ͢Δ • stashͨ͠ϦετΛ֬ೝ͢Δ • git logͷΦϓγϣϯ΋࢖͑Δ • ʮ-pʯΦϓγϣϯͰมߋ಺༰͕֬ೝͰ͖Δ $ git stash list

Slide 141

Slide 141 text

ୀආͨ͠ϑΝΠϧҰཡΛදࣔ • n൪໨ʹୀආͨ͠ϑΝΠϧҰཡΛ֬ೝͰ͖Δ • listͰ൪߸͕֬ೝͰ͖Δ • ʮ-pʯΦϓγϣϯͰมߋ಺༰͕֬ೝͰ͖Δ $ git stash show stash@{n}

Slide 142

Slide 142 text

ୀආͨ͠มߋΛ໭͢ • n൪໨ʹୀආͨ͠มߋ෼Λ໭͢ • stash@{n} Λলུ͢Δͱ࠷৽ͷୀආͨ͠มߋ෼Λ໭͢ • add͍ͯͨ͠มߋ͸add͞Ε͍ͯͳ͍ঢ়ଶͰ໭Δ • มߋ෼Λ໭ͯ͠΋ୀආͨ͠listʹ࢒Δ $ git stash apply stash@{n}

Slide 143

Slide 143 text

addͨ͠ঢ়ଶͰ໭͢ • addͨ͠ঢ়ଶͰͦͷ··໭͍ͨ࣌͠ʹ࢖͑Δ $ git stash apply stash@{n} --index

Slide 144

Slide 144 text

ୀආͨ͠มߋ෼Λ࡟আ͢Δ • n൪໨ʹୀආͨ͠มߋ෼Λ࡟আ͢Δ • stash@{n} Λলུ͢Δͱ࠷৽ͷୀආͨ͠มߋ෼ Λ࡟আ͢Δ $ git stash drop stash@{n}

Slide 145

Slide 145 text

ୀආͨ͠มߋΛ໭ͯ͠࡟আ͢Δ • applyͱdropΛҰॹʹͰ͖Δ • n൪໨ʹୀආͨ͠มߋ෼Λ໭ͯ͠࡟আ͢Δ • stash@{n} Λলུ͢Δͱ࠷৽ͷୀආͨ͠มߋ෼ ͕ద༻͞ΕΔ $ git stash pop stash@{n}

Slide 146

Slide 146 text

ୀආͨ͠มߋ෼Λ͢΂ͯ࡟আ͢Δ • ୀආͨ͠มߋ෼Λ͢΂ͯ࡟আ͢Δ $ git stash clear

Slide 147

Slide 147 text

ࢦఆͨ͠ϑΝΠϧͷΈ໭͢ • n൪໨ʹୀආͨ͠มߋ෼ͷࢦఆͨ͠ϑΝΠϧΛ ໭͢ • มߋ෼Λ໭ͯ͠΋ୀආͨ͠listʹ࢒Δ $ git checkout stash@{n} <ϑΝΠϧ໊>

Slide 148

Slide 148 text

த్൒୺ͳมߋ͸ίϛοτͤͣʹ stashΛ࢖͏ͱศརʂ

Slide 149

Slide 149 text

2. ࣮຿Ͱͨ·ʹ࢖͏ίϚϯυ • git rebase • git cherry-pick • git stash • git revert

Slide 150

Slide 150 text

git revert ͬͯԿʁ

Slide 151

Slide 151 text

औΓফ͍ͨ͠ίϛοτΛଧͪ ফ͢ίϛοτΛ࡞੒͢Δʂ

Slide 152

Slide 152 text

git reset ͡Όμϝʁ

Slide 153

Slide 153 text

• reset͸ίϛοτΛऔΓফͨ͠ͱ͍͏ ཤྺ͕࢒Βͳ͍ • pushࡁΈͷίϛοτΛreset͢Δͷ͸ NGʂ

Slide 154

Slide 154 text

ϦϞʔτʹpush͞Ε͍ͯΔίϛοτΛ औΓফ͍ͨ࣌͠ͳͲʹ࢖༻Ͱ͖Δ

Slide 155

Slide 155 text

git revertͷ࢖͍ํ

Slide 156

Slide 156 text

ࢦఆͨ͠ίϛοτΛऔΓফ͢ • ࢦఆͨ͠ίϛοτIDΛଧͪফ͢ίϛοτΛ৽͘͠࡞੒͢ Δ • ʮ-eʯͰίϛοτϝοηʔδΛมߋͰ͖ΔʢলུՄʣ • ίϛοτϝοηʔδΛมߋ͠ͳ͍৔߹͸ʮ--no-editʯɹ ΦϓγϣϯΛ͚ͭΔ $ git revert [-e]

Slide 157

Slide 157 text

ίϛοτͤͣʹrevertΛ͢Δ • --no-commit • indexʹ໭͚ͩ͢ͰίϛοτΛߦΘͳ͍ • ෳ਺ͷίϛοτΛ໭ͯ͠ɺ1ͭͷίϛοτͱ͠ ͯpush͢Δ৔߹ʹศར $ git revert -n

Slide 158

Slide 158 text

ϚʔδίϛοτΛrevert͢Δ • --mainline • Ϛʔδͨ͠2ͭίϛοτͷ͏ͪɺͲͪΒ͕਌͔Λ਺ࣈͰࢦఆ ͢Δ • git show΍git logͰϚʔδίϛοτ֬ೝ͢Δͱ਺ࣈ͕Θ͔Δ • ʮMerge:ʯͱ͍͏ߦͰ֬ೝͰ͖Δʢࠨ͔Β1ɺ2ͱͳΔʣ $ git revert -m

Slide 159

Slide 159 text

revertίϛοτͷ਌Λ Ͳͬͪʹ͢Δͷʁ

Slide 160

Slide 160 text

masterͷίϛοτΛ਌ʹ͢Δ ͷͰʮ-m 1ʯͱ͢Δʂ

Slide 161

Slide 161 text

revertͷ·ͱΊ

Slide 162

Slide 162 text

͢Ͱʹpushͯ͠͠·ͬͨ commitΛଧͪফ࣌͢ʹ࢖͓͏ʂ

Slide 163

Slide 163 text

2. ࣮຿Ͱͨ·ʹ࢖͏ίϚϯυ • git rebase • git cherry-pick • git stash • git revert

Slide 164

Slide 164 text

3. ͓·͚

Slide 165

Slide 165 text

rm ͱ git rm ͷҧ͍ͬͯʁ

Slide 166

Slide 166 text

྆ํͱ΋ϑΝΠϧΛ࡟আ͢Δ ίϚϯυ

Slide 167

Slide 167 text

rm • Gitͷཤྺʹ͸࡟আͨ͜͠ͱ͕࢒Βͳ͍ • ϫʔΩϯάπϦʔʹදࣔ͞ΕΔ • Gitͷཤྺʹ࡟আͨ͜͠ͱ͕࢒Δ • indexʹදࣔ͞ΕΔ git rm

Slide 168

Slide 168 text

rmͰϑΝΠϧΛ࡟আͯ͠͠·ͬ ͯ΋େৎ෉ʂ

Slide 169

Slide 169 text

git add -uͰ indexʹadd͠Α͏ʂʂ

Slide 170

Slide 170 text

addͷΦϓγϣϯͷछྨ

Slide 171

Slide 171 text

addͬͯͳΜ͚ͩͬʁ

Slide 172

Slide 172 text

ϫʔΩϯάπϦʔ͔Β ΠϯσοΫεʹ൓өͤ͞Δ

Slide 173

Slide 173 text

git add ͷओͳΦϓγϣϯ Φϓγϣϯ ҙຯ -A (-all) มߋ/৽ن/࡟আͨ͠ϑΝΠϧΛadd͢Δ . (υοτ) มߋ/৽ن/࡟আͨ͠ϑΝΠϧΛadd͢Δ -u (--update) มߋ/࡟আͨ͠ϑΝΠϧΛadd͢Δ -i (--interactive) ର࿩తʹϑΝΠϧΛadd͢Δ

Slide 174

Slide 174 text

-A ͱ . ͷҧ͍ͬͯʁ

Slide 175

Slide 175 text

• ϦϙδτϦ಺ͷͲ͜Ͱ࣮ߦͯ͠΋Ϧϙ δτϦશମΛadd͢Δ • ΧϨϯτσΟϨΫτϦҎԼͷϑΝΠϧ ͷΈΛadd͢Δ git add . git add -A

Slide 176

Slide 176 text

ΤΠϦΞεͷઃఆ

Slide 177

Slide 177 text

configʹΤΠϦΞεΛઃఆ͢Δ • git status ͱଧͨͳͯ͘΋ git st Ͱ࣮ߦͰ͖Δ • ϦϙδτϦ୯ҐͰઃఆ͢ΔͳΒ --local ͱ͢Δ • git config --global -e ͱ͢ΔͱΤσΟλ͕։͘ͷ Ͱɺ௚઀هड़͢Δ͜ͱ΋Ͱ͖Δ $ git config --global alias.st status

Slide 178

Slide 178 text

ΤΠϦΞεͷઃఆྫ [alias] st = status sts = status --short --branch cm = commit co = checkout br = branch df = diff lg = log --oneline --graph -10 ss = stash

Slide 179

Slide 179 text

஫ҙ • ͢Ͱʹଘࡏ͢ΔίϚϯυΛ্ॻ͖͢Δ͜ͱ͸ Ͱ͖ͳ͍ [alias] status = status --short --branch

Slide 180

Slide 180 text

switch ͱ restore

Slide 181

Slide 181 text

ͳΜͰ௥Ճ͞Εͨͷʁ

Slide 182

Slide 182 text

checkoutͷػೳΛ෼͚ΔͨΊ

Slide 183

Slide 183 text

• ϒϥϯνͷ੾Γସ͑ • ϑΝΠϧͷมߋ restore switch

Slide 184

Slide 184 text

ϒϥϯνͷ੾Γସ͑ • git checkout ͱಉ͡ • Φϓγϣϯʹʮ-cʯΛ෇͚ΔͱϒϥϯνΛ৽ ن࡞੒ͯ͠੾Γସ͑Δɹɹɹɹɹɹɹɹɹɹ git checkout -b ͱಉ͡ $ git switch

Slide 185

Slide 185 text

ϑΝΠϧͷมߋ෼Λ࡟আ͢Δ • git checkout <file໊> ͱಉ͡ $ git restore

Slide 186

Slide 186 text

checkout΋ࠓ·Ͱ௨Γ࢖͑Δ

Slide 187

Slide 187 text

Ҏ্Ͱ͢ʂʂ

Slide 188

Slide 188 text

·ͱΊ

Slide 189

Slide 189 text

Git͸ͱͯ΋ਂ͍ʂʂʂʂ

Slide 190

Slide 190 text

͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ @yyykms123 / @akito_tameto