Slide 1

Slide 1 text

ೖ໳ॻʹ͸ࡌͬͯͳ͍ Git&GitHub Tips ·ͨ͸ɺ͍͔ʹͯ͠೔ʑPRΛ͞͹͍͍ͯΔ͔ ߴڮါٱʢgh:yuku-tʣ

Slide 2

Slide 2 text

ߴڮါٱ ͔ͨ͸͠ Ώ͏͘ yuku_t yuku-t GitHub
 ͱͷೃΕॳΊ 2013/02 GitHub૑ۀऀ&CIOͱژ౎؍ޫΛָ͠Ή 2013/07 GitHubͷϓϥΠϕʔτϧʔϜͰେϦʔά؍ઓ͢Δ 2014/06 GitHub KaigiͰ࿩͢ CTO @ Increments

Slide 3

Slide 3 text

ఏڙ

Slide 4

Slide 4 text

OAuth ΋͏͙͢ 20000 4

Slide 5

Slide 5 text

࿩͢͜ͱ&΍Δ͜ͱ ● Qiitaʹࡌͬͯͨ ● GitHub Cheat Sheetʹࡌͬͯͳ͍ ● ʮೖ໳ Gitʯʹग़ͯ͜ͳ͍ ● ͋ͱGitHubΛ࢖ͬͨσϞ 5 ʘ ࡌͬͯͳ͍Α ʗ

Slide 6

Slide 6 text

Conflict

Slide 7

Slide 7 text

ίϯϑϦΫτൃੜ࣌ͷ໰୊ % git merge master 7 HEAD master <<<<<<< HEAD topic branch ======= master >>>>>>> master !!! ίϯϑϦΫτ͢ΔͱHEADͱϚʔδର৅͕ॻ͖ग़͞ΕΔ ➡΋ͱͷঢ়ଶ͕෼͔Βͳͯ͘ࠔΔ͜ͱ͕͋Δ

Slide 8

Slide 8 text

ڞ௨ͷ૆ઌͷ৘ใΛॻ͖ग़͢ 8 http://qiita.com/hchbaw/items/1191c2627307a4673b1b <<<<<<< HEAD topic branch ||||||| merged common ancestors original ======= master >>>>>>> master HEAD master ● ڞ௨ͷ૆ઌͷঢ়ଶ΋ॻ͖ग़͞ΕΔΑ͏ʹͳΔ - ௨ৗͷΤσΟλͰίϯϑϦΫτղফͯ͠Δਓʹ͸ศར - mergetoolΛ࢖͍ͬͯΔਓʹ͸ಛʹϝϦοτ͸ͳ͍ % git config --global merge.conflictstyle diff3

Slide 9

Slide 9 text

git stash

Slide 10

Slide 10 text

git stash save / pop ● indexͷ৘ใ͕ܽམ ➡ file͕શମ͕unstagedʹ 10 ● track͞Ε͍ͯͳ͍ϑΝΠϧ͸
 ࢒͞ΕΔ ➡ readme͕࢒͍ͬͯΔ ● indexͨ͠΋ͷ΋stash͞ΕΔ ➡ fileʹaddͨ͠෦෼΋stash ‣ -q,--quiet ͸ඪ४ग़ྗΛ཈੍͢Δ

Slide 11

Slide 11 text

--all --include-untracked --keep-index -u, --include-untracked • track͞Ε͍ͯͳ͍
 ϑΝΠϧ΋stash͢Δ ➡ readme΋stash͞ΕΔ -a, --all • ignoredͳϑΝΠϧ΋શ෦ 11 -k, --keep-index • index treeΛͦͷ··࢒͢ ➡ fileͷadd͞ΕͨՕॴ͕ ࢒͍ͬͯΔ http://qiita.com/ton1517/items/9888a78f6b063e748558

Slide 12

Slide 12 text

git stash pop --index --index • working tree͚ͩͰͳ͘index tree΋෮ݩ͢Δ ➡ fileͷadd͞Εͨঢ়ଶ͕෮ݩ͞Ε͍ͯΔ 12 http://qiita.com/ton1517/items/9888a78f6b063e748558

Slide 13

Slide 13 text

શ͘৽͍͠working directory͕ཉ͍͠ ● git stash -uͰશͯstashͰ͖Δ͚Ͳɺ1͔Β
 ৽͍͠working directory͕ཉ͘͠ͳΔͱ͖΋͋Δ ! ● .gitσΟϨΫτϦͷத਎͕γϯϘϦοΫϦϯΫͰ
 ͭͳ͕͍ͬͯΔͷͰશͯͷΦϒδΣΫτ͕ಉظ͢Δ ➡ stash΋ಉظ͢ΔͷͰnew-workdirͰॻ͍ͨίʔυΛ stash popͰ؆୯ʹऔΓࠐΊΔ ʦ༨ஊʧgit-core/contribʹ͸ศརͳεΫϦϓτ͕৭ʑ ๏ ಛʹdiff-highlight࢖ͬͯͳ͍ਓ͸ਓੜଛͯ͠Δ 13 http://qiita.com/yuya_presto/items/dcebbebc6b3d9cf6f542 % ln -s /path/to/git-core/contrib/workdir/git-new-workdir ~/bin % git-new-workdir . ../new-workdir % cd ../new-workdir # ৽͍͠working directory

Slide 14

Slide 14 text

git diff & apply

Slide 15

Slide 15 text

ۭനͷҧ͍͚ͩͷߦΛআ͍ͯadd ✓ ۭനҧ͍͚ͩͷίϛοτ͕ผͩͱͪΐͬͱخ͍͠ -w, --ignore-all-space • ࠩ෼ܭࢉ࣌ʹۭനจࣈΛແࢹ͢Δɻ ! --cached • working treeΛ৮ΒͣʹindexͷΈߋ৽͢Δ 15 % git diff -w % git apply --cached < patch % git diff -w | git apply --cached http://qiita.com/yuya_presto/items/dcebbebc6b3d9cf6f542 ※ ۭനͷมߋͱଞͷมߋ͕ۙ͘ʹ͋ΔͱίϯϑϦΫτ͕ൃੜͯ͠࢖͑·ͤΜ

Slide 16

Slide 16 text

git fsck

Slide 17

Slide 17 text

ͦ΋ͦ΋git fsckͱ͸ʁ ● gitͷ࣮ମ͸άϥϑ - ݸʑͷϊʔυ͸sha1஋Λ͕࣋ͭ… ● ࢖͏ίϛοτʹ͸໊લ(ref)Λ͚ͭΔ - HEAD, branch, tagͳͲͳͲ ● refs͔ΒḷΕͳ͍΋ͷ͸ΰϛ ● git fsck͸ΰϛΛ൑ఆˍྻڍ͢Δ 17 ref % git fsck dangling commit ͷsha1 ※ ࣮ࡍʹΰϛΛফ͢ͷ͸git prune

Slide 18

Slide 18 text

addͯ͠commitͤͣʹreset --hardͨ͠ ● ΰϛ൑ఆ͞ΕͨΦϒδΣΫτΛॻ͖ग़͢ - .git/lost-found/commit/ - .git/lost-found/other/ # ͬͪ͜ ● ॻ͖ͩ͞ΕͨϑΝΠϧΛgrepͯ͠໨౰ͯͷϑΝΠϧ Λ୳ͯ͠෮ݩ͢Δ 18 http://qiita.com/yoshiori/items/6da867aa6871be694996 % git fsck --lost-found

Slide 19

Slide 19 text

ޡͬͯgit stash clearͨ͠ ● git fsck͕ग़ྗ͢ΔϚʔδίϛοτͰsubjectʹ WIPΛؚΉ΋ͷΛྻڍ͢Δ ! ● ໨౰ͯͷsha1͕෼͔ͬͨΒgit stash applyͰ
 ద༻Ͱ͖Δ 19 % git fsck | grep commit | cut -d' ' -f3 | xargs git log --merges --no-walk --grep=WIP % git stash apply

Slide 20

Slide 20 text

GitHub & Review

Slide 21

Slide 21 text

hub ● CLI͔ΒGitHubΛૢ࡞͢ΔͨΊͷπʔϧ ! - ݱࡏͷϦϙδτϦΛϒϥ΢βͰ։͘ ! - current branchΛϓϧϦΫΤετʹ͢Δ 21 http://qiita.com/yaotti/items/a4a7f3f9a38d7d3415e3 % hub pull-request % hub browse

Slide 22

Slide 22 text

ۭͷPullRequestΛ࡞ͬͯ࡞ۀΛՄࢹԽ ● GitHub͸ϑΝΠϧมߋແ͠ͷPullRequestΛ࡞ΕΔ - ࡞ۀΛ࢝ΊͨΒͱΓ͋͑ͣ࡞ͬͯcommit͢Δ౓ʹ push͍ͯ͘͠ - આ໌ʹλεΫΛྻڍ - पΓ͕ঢ়گΛ೺Ѳ͠΍͍͢ 22 http://qiita.com/a-suenami/items/129e09f8550f31e4c2da % git checkout -b projectx % git commit --allow-empty -m ProjectX % git push % hub pull-request # or WebUIͰPR࡞੒

Slide 23

Slide 23 text

ۭͷPullRequestΛ࡞ͬͯΩϦ൪ήοτ 23 https://twitter.com/naoya_ito/status/467245029434478592

Slide 24

Slide 24 text

git rebase -i --autosquash ● ؾܰͳpush -fΛې͍ͯ͡Δͱɺඍௐ੔ͷͨΊͷ
 ࠣࡉͳίϛοτ͕ͨ͘͞Μ࡞ΒΕͯϩά͕෼͔Γʹ ͘͘ͳΔ - “squash! squashର৅ίϛοτͷίϝϯτ”
 ͱίϛοτ͢Δͱinteractive rebase࣌ʹࣗಈతʹ ͍͍ײ͡ʹͯ͘͠ΕΔ ● શͯͷ࡞ۀ͕׬ྃͨ͠ஈ֊Ͱautosquashͯ͠
 ʢपΓͱҙࢥૄ௨ΛऔΓͭͭʣpush -f 24 http://qiita.com/kyanro@github/items/818012c1b1827ed48277

Slide 25

Slide 25 text

autosquashΛָʹ͢Δ ● ৗʹautosquash͢Δ ‣ git rebase࣌ʹࣗಈͰ--autosquashΦϓγϣϯ Λ௥Ճ͢ΔΑ͏ʹͳΔ ‣ --autosquash͸--interactive࣌ͷΈӨڹ͢ ΔͷͰͱΓ͋͑ͣtrueͰ΋ಛʹ໰୊ͳ͍ʢ͸ͣʣ ● ίϛοτϝοηʔδͷࣗಈੜ੒ ‣ autosquash༻ͷϝοηʔδΛࣗಈੜ੒ͯ͘͠ΕΔ ‣ --fixup ΦϓγϣϯͰfixup΋Ͱ͖Δ 25 http://qiita.com/kyanro@github/items/818012c1b1827ed48277 % git config --global rebase.autosquash true % git commit --squash

Slide 26

Slide 26 text

ϒϥϯν໊Λௐ΂Δͷ͕໘౗͍͘͞໰୊ ● ϨϏϡʔΛґཔ͞ΕͨϒϥϯνΛϩʔΧϧʹ checkout͢Δͷʹ໊લΛௐ΂Δͷ͕໘౗ ! ● GitHub APIͰϓϧϦΫΤετΛऔಘͯ͠ߜΓࠐΉ 26 % prfetch|percol|cut -f3|xargs git checkout http://qiita.com/yuku_t/items/f53a9d3ea92614b0927d ͜͜Λؤுͬͯίϐϖͯͨ͠….

Slide 27

Slide 27 text

alias.branch-root ● τϐοΫϒϥϯνͷࠜຊͷsha1͕෼͔ΔͱҰ࿈ͷί ϛοτʹߜΓࠐΜΉ͜ͱ͕Ͱ͖Δ ! ‣ τϐοΫϒϥϯνͷൣғ಺Ͱgit log ! ‣ τϐοΫϒϥϯν಺Ͱinteractive rebase 27 [alias] branch-root = merge-base master HEAD % git log $(git branch-root)..HEAD % git rebase -i $(git branch-root) http://qiita.com/yuku_t/items/5cf770157380952e9476

Slide 28

Slide 28 text

ϨϏϡʔ͸ϩʔΧϧͰ ● ϨϏϡʔ࣌͸৭ʑͳ৘ใΛࢀর͢ΔͨΊɺGitHubͷ Web UIͩͱ஗͗͢ΔʢGH:E͸Ͳ͏͔ͩ஌Γ·ͤΜʣ ✓ ݸਓతʹ͸tigਪ͠ 28 [alias] review = !tig --reverse -w $(git branch-root)..HEAD [tig “bind”] main = B @hub browse -- commit/%(commit) diff = B @hub browse -- commit/%(commit) tree = B @hub browse -- tree/%(commit)/%(directory) blob = B @hub browse -- tree/%(commit)/%(file) - ϨϏϡʔର৅ΛtigͰಡΈࠐΉalias ‣ --reverse Λ͚ͭΔͱGitHubͷUIͱฒͼํ͕ಉ͡ʹͳͬͯخ͍͠ - ίϝϯτ͸WebUIͰߦ͏͔͠ͳ͍ͷͰ֘౰ϖʔδ΁Ҡಈ͢ΔΩʔόΠϯυ͸ඞਢ

Slide 29

Slide 29 text

ఏڙ

Slide 30

Slide 30 text

ఏڙ WE ARE HIRING!! http://increments.co.jp/jobs