ãã®ãšãã»ã€ã§ã¯ãGitã®ä»çµã¿ã«ã€ããŠèª¬æããŸãã ãããžã§ã¯ãã®ããŒãžã§ã³ç®¡çã«Gitã䜿çšããã®ã«ååãªGitã«ç²ŸéããŠããããšãåæãšããŠããŸãã
ãšãã»ã€ã¯ãGitã®åºã«ãªã£ãŠããã°ã©ãæ§é ãšããã®ã°ã©ãã®ããããã£ãGitã®åäœãã©ã®ããã«æ±ºå®ãããã«çŠç¹ãåœãŠãŠããŸãã åºæ¬ãåŠã³ãAPIã䜿çšããå®éšããåŸããã仮説ã§ã¯ãªããä¿¡é Œã§ããæ
å ±ã«åºã¥ããŠã¢ã€ãã¢ãæ§ç¯ããŸãã é©åãªã¢ãã«ã䜿çšãããšãGitãäœãããã®ããGitãäœãããäœãããããšããŠããã®ããããããçè§£ã§ããŸãã
ããã¹ãã¯ãåäžã®ãããžã§ã¯ãã§äœæ¥ããäžé£ã®ããŒã ã«åå²ãããŸãã Gitã®åºç€ãšãªãã°ã©ãã®ããŒã¿æ§é ã«ã€ããŠã®èгå¯ããããŸãã 芳å¯çµæã¯ãã°ã©ãã®ããããã£ãšããã«åºã¥ãåäœã瀺ããŠããŸãã
ããæ·±ã没é ããããã«èªãã åŸãGitã®JavaScriptå®è£
ã®è±å¯ã«ã³ã¡ã³ãããããœãŒã¹ã³ãŒããåç
§ã§ããŸãã
ãããžã§ã¯ãäœæ
~ $ mkdir alpha ~ $ cd alpha
ãŠãŒã¶ãŒã¯ã¢ã«ãã¡ãã£ã¬ã¯ããªãäœæããŸã
~/alpha $ mkdir data ~/alpha $ printf 'a' > data/letter.txt
ãã®ãã£ã¬ã¯ããªã«ç§»åããããŒã¿ãã£ã¬ã¯ããªãäœæããŸãã å
éšã§ã圌ã¯ãaãã®å
容ãå«ãletter.txtãã¡ã€ã«ãäœæããŸãã alphaãã£ã¬ã¯ããªã¯æ¬¡ã®ããã«ãªããŸãã
alpha âââ data âââ letter.txt
ãªããžããªã®åæå
~/alpha $ git init Initialized empty Git repository
git initã¯ãçŸåšã®ãã£ã¬ã¯ããªãGitãªããžããªã«ç§»åããŸãã ãããè¡ãããã«ã圌ã¯.gitãã£ã¬ã¯ããªãäœæãããã®äžã«ããã€ãã®ãã¡ã€ã«ãäœæããŸãã Gitæ§æå
šäœãšãããžã§ã¯ãå±¥æŽãå®çŸ©ããŸãã ãããã¯æ®éã®ãã¡ã€ã«ã§ã-éæ³ã§ã¯ãããŸããã ãŠãŒã¶ãŒã¯ããããèªãã§ç·šéã§ããŸãã ã€ãŸãããŠãŒã¶ãŒã¯ãããžã§ã¯ãèªäœã®ãã¡ã€ã«ãšåããããç°¡åã«ãããžã§ã¯ãã®å±¥æŽãèªãã§ç·šéã§ããŸãã
alphaãã£ã¬ã¯ããªã¯æ¬¡ã®ããã«ãªããŸãã
alpha âââ data | âââ letter.txt âââ .git âââ objects etc...
.gitãã£ã¬ã¯ããªãšãã®å
容ã¯Gitãåç
§ããŠããŸãã ä»ã®ãã¹ãŠã®ãã¡ã€ã«ã¯äœæ¥ã³ããŒãšåŒã°ãããŠãŒã¶ãŒã«å±ããŸãã
ãã¡ã€ã«ã远å ãã
~/alpha $ git add data/letter.txt
ãŠãŒã¶ãŒã¯git add on data / letter.txtãå®è¡ããŸãã 2ã€ã®ããšãèµ·ãããŸãã
æåã«ãæ°ããblobãã¡ã€ã«ã.git / objects /ãã£ã¬ã¯ããªã«äœæãããŸãã data / letter.txtã®å§çž®ãããã³ã³ãã³ããå«ãŸããŠããŸãã ãã®ååã¯ãçæãããã³ã³ãã³ãããŒã¹ã®ããã·ã¥ã§ãã ããšãã°ãGitã¯aããããã·ã¥ãäœæãã2e65efe2a145dda7ee51d1741299f848e5bf752eãååŸããŸãã ããã·ã¥ã®æåã®2æåã¯ããªããžã§ã¯ãããŒã¿ããŒã¹ã®ãã£ã¬ã¯ããªåã«äœ¿çšãããŸãïŒ.git / objects / 2e /ã ããã·ã¥ã®æ®ãã¯ã远å ããããã¡ã€ã«ã®å
éšãå«ãblobãã¡ã€ã«ã®ååã§ãïŒ.git / objects / 2e / 65efe2a145dda7ee51d1741299f848e5bf752eã
ãã¡ã€ã«ãGitã«è¿œå ããã ãã§ããã®å
容ããªããžã§ã¯ããã£ã¬ã¯ããªã«ä¿åãããããšã«æ³šæããŠãã ããã ãŠãŒã¶ãŒãäœæ¥ã³ããŒããdata / letter.txtãåé€ãããšãããã«ä¿åãããŸãã
次ã«ãgit addã¯ãã¡ã€ã«ãã€ã³ããã¯ã¹ã«è¿œå ããŸãã ã€ã³ããã¯ã¹ã¯ãGitãåŸãããã«æç€ºããããã¹ãŠã®ãã¡ã€ã«ãå«ããªã¹ãã§ãã .git / indexã«ä¿åãããŸãã ç£èŠå¯Ÿè±¡ãã¡ã€ã«ã«å¿ããåè¡ã¯ããã®å
容ãšè¿œå æéãããã·ã¥ããŸãã ããã¯ãgit addã³ãã³ãã®å®è¡åŸã«ã€ã³ããã¯ã¹ã®å
容ãååŸããæ¹æ³ã§ãã
data/letter.txt 2e65efe2a145dda7ee51d1741299f848e5bf752e
ãŠãŒã¶ãŒã¯ã1234ãå«ãdata / number.txtãã¡ã€ã«ãäœæããŸãã
~/alpha $ printf '1234' > data/number.txt
äœæ¥ã³ããŒã¯æ¬¡ã®ããã«ãªããŸãã
alpha âââ data âââ letter.txt âââ number.txt
ãŠãŒã¶ãŒããã¡ã€ã«ãGitã«è¿œå ããŸãã
~/alpha $ git add data
git addã³ãã³ãã¯ãdata / number.txtã®å
容ãä¿åããblobãã¡ã€ã«ãäœæããŸãã data / number.txtã®ã€ã³ããã¯ã¹ã«ãšã³ããªã远å ããblobããã€ã³ãããŸãã git addãå床å®è¡ããåŸã®ã€ã³ããã¯ã¹ã®å
å®¹ã¯æ¬¡ã®ãšããã§ãã
data/letter.txt 2e65efe2a145dda7ee51d1741299f848e5bf752e data/number.txt 274c0052dd5408f8ae2bc8440029ff67d79bc5c3
ãŠãŒã¶ãŒãgit add dataã³ãã³ããæå®ããã«ãããããããããŒã¿ãã£ã¬ã¯ããªã®ãã¡ã€ã«ã®ã¿ãã€ã³ããã¯ã¹ã«ãªã¹ããããããšã«æ³šæããŠãã ããã ããŒã¿ãã£ã¬ã¯ããªèªäœã¯åå¥ã«æå®ãããŠããŸããã
~/alpha $ printf '1' > data/number.txt ~/alpha $ git add data
ãŠãŒã¶ãŒãdata / number.txtãäœæãããšãã圌ã¯1234ã§ã¯ãªã1ãæžã蟌ã¿ãããšæã£ãŠããŸããã圌ã¯å€æŽãå ãããã¡ã€ã«ãåã³ã€ã³ããã¯ã¹ã«è¿œå ããŸããã ãã®ã³ãã³ãã¯ãæ°ããã³ã³ãã³ããæã€æ°ããblobãäœæããŸãã data / number.txtã®ã€ã³ããã¯ã¹ã®ãšã³ããªãæ°ããblobã§æŽæ°ããŸãã
ã³ããããã
~/alpha $ git commit -m 'a1' [master (root-commit) 774b54a] a1
ãŠãŒã¶ãŒã¯a1ãã³ãããããŸãã Gitã¯ããã«é¢ããããŒã¿ã衚瀺ããŸãã ããã«èª¬æããŸãã
commitã³ãã³ãã«ã¯3ã€ã®ã¹ãããããããŸãã ã³ããããããããžã§ã¯ãã®ããŒãžã§ã³ã®å
容ã衚ãã°ã©ããäœæããŸãã ã³ããããªããžã§ã¯ããäœæããŸãã çŸåšã®ãã©ã³ããæ°ããã³ããããªããžã§ã¯ãã«ãªãã€ã¬ã¯ãããŸãã
ã°ã©ãäœæ
Gitã¯ãã€ã³ããã¯ã¹ããããªãŒã°ã©ããäœæããããšã«ããããããžã§ã¯ãã®çŸåšã®ç¶æ
ãèšæ¶ããŸãã ãã®ã°ã©ãã¯ããããžã§ã¯ãå
ã®åãã¡ã€ã«ã®å Žæãšå
容ãèšé²ããŸãã
ã°ã©ãã¯ãããããšããªãŒã®2çš®é¡ã®ãªããžã§ã¯ãã§æ§æãããŸãã BLOBã¯git addãä»ããŠä¿åãããŸãã ãã¡ã€ã«ã®å
容ã衚ããŸãã ã³ãããæã«ããªãŒãä¿åãããŸãã ããªãŒã¯ãäœæ¥ã³ããŒå
ã®ãã£ã¬ã¯ããªã衚ããŸãã 以äžã¯ãæ°ããã³ãããã§ããŒã¿ãã£ã¬ã¯ããªã®å
容ãèšé²ããããªãŒãªããžã§ã¯ãã§ãã
100664 blob 2e65efe2a145dda7ee51d1741299f848e5bf752e letter.txt 100664 blob 56a6051ca2b02b04ef92d5150c9ef600403cb1de number.txt
æåã®è¡ã¯ãdata / letter.txtã®è€è£œã«å¿
èŠãªãã¹ãŠãèšé²ããŸãã æåã®éšåã«ã¯ããã¡ã€ã«ã®ã¢ã¯ã»ã¹èš±å¯ãæ ŒçŽãããŸãã 2çªç®ã¯ããã¡ã€ã«ã®å
容ãããªãŒã§ã¯ãªãblobã«ä¿åãããããšã§ãã 3ã€ç®ã¯BLOBããã·ã¥ã§ãã 4çªç®ã¯ãã¡ã€ã«åã§ãã
åæ§ã«ã2è¡ç®ã¯data / number.txtã«é©çšãããŸãã
以äžã¯ããããžã§ã¯ãã®ã«ãŒããã£ã¬ã¯ããªã§ããalphaã®ããªãŒãªããžã§ã¯ãã§ãã
040000 tree 0eed1217a2947f4930583229987d90fe5e8e0b74 data
1æ¬ã®ç·ã¯ããŒã¿ããªãŒãæããŸãã
äžã®ã°ã©ãã§ã¯ãã«ãŒãããªãŒã¯ããŒã¿ããªãŒãæããŠããŸãã ããŒã¿ããªãŒã¯ãdata / letter.txtããã³data / number.txtã®BLOBãæããŸãã
ã³ããããªããžã§ã¯ãã®äœæ
git commitã¯ãã°ã©ãã®äœæåŸã«ã³ããããªããžã§ã¯ããäœæããŸãã ã³ããããªããžã§ã¯ãã¯ã.git / objects /ïŒå
ã®å¥ã®ããã¹ããã¡ã€ã«ã§ãã
tree ffe298c3ce8bb07326f888907996eaa48d266db4 author Mary Rose Cook <mary@maryrosecook.com> 1424798436 -0500 committer Mary Rose Cook <mary@maryrosecook.com> 1424798436 -0500 a1
æåã®è¡ã¯ã°ã©ãããªãŒãæããŸãã ããã·ã¥-äœæ¥ã³ããŒã®ã«ãŒãã衚ãããªãŒãªããžã§ã¯ãã ã€ãŸããã¢ã«ãã¡ãã£ã¬ã¯ããªã§ãã æåŸã®è¡ã¯ãã³ãããã®ã³ã¡ã³ãã§ãã
çŸåšã®ãã©ã³ããæ°ããã³ãããã«ãã€ã¬ã¯ããã
æåŸã«ãcommitã³ãã³ãã¯çŸåšã®ãã©ã³ããæ°ããã³ããããªããžã§ã¯ãã«åããŸãã
çŸåšã®ãã©ã³ãã¯äœã§ããïŒ Gitã¯.git / HEADã®HEADãã¡ã€ã«ã«ç§»åãã以äžã確èªããŸãã
ref: refs/heads/master
ããã¯ãHEADããã¹ã¿ãŒãæããŠããããšãæå³ããŸãã masterã¯çŸåšã®ãã©ã³ãã§ãã
HEADãšmasterã¯ãªã³ã¯ã§ãã ãªã³ã¯ã¯ãç¹å®ã®ã³ããããèå¥ããããã«GitãŸãã¯ãŠãŒã¶ãŒã䜿çšããã©ãã«ã§ãã
ããã¯ãªããžããªå
ã®æåã®ã³ãããã§ããããããã¹ã¿ãŒãªã³ã¯ã衚ããã¡ã€ã«ã¯ååšããŸããã Gitã¯.git / refs / heads / masterã«ãã¡ã€ã«ãäœæãããã®å
容ïŒã³ããããªããžã§ã¯ãã®ããã·ã¥ïŒãèšå®ããŸãã
74ac3ad9cde0b265d2b4f1c778b283a6e2ffbafd
ïŒèªã¿åãäžã«ã³ãã³ããGitã«å
¥åãããšãããã·ã¥a1ã¯ç§ã®ãã®ãšã¯ç°ãªããŸããã³ã³ãã³ããªããžã§ã¯ãïŒããããšããªãŒïŒã®ããã·ã¥ã¯åžžã«åãã«ãªããŸãããã ããäœæè
ã®æ¥ä»ãšååãèæ
®ãããããã³ãããã¯ãããŸããïŒã
ã°ã©ãã«Git HEADãšmasterã远å ããŸãã
ã³ãããåã®ããã«ãHEADã¯ãã¹ã¿ãŒãæããŸãã ããããä»ã§ã¯masterãååšããæ°ããã³ããããªããžã§ã¯ãããã€ã³ãããŠããŸãã
æåã®ã³ãããã¯è¡ããŸãã
以äžã¯ãã³ãããa1åŸã®ã°ã©ãã§ãã äœæ¥ã³ããŒãšã€ã³ããã¯ã¹ãå«ãŸããŠããŸãã
äœæ¥ã³ããŒãã€ã³ããã¯ã¹ãããã³ã³ãããã®å
容ã¯ãdata / letter.txtããã³data / number.txtãšåãã§ããããšã«æ³šæããŠãã ããã ã€ã³ããã¯ã¹ãšHEADã¯BLOBã瀺ãããã«ããã·ã¥ã䜿çšããŸãããäœæ¥ã³ããŒã®å
容ã¯ããã¹ããšããŠä»ã®å Žæã«ä¿åãããŸãã
~/alpha $ printf '2' > data/number.txt
ãŠãŒã¶ãŒã¯data / number.txtã®å
容ã2ã«å€æŽããŸããããã«ãããäœæ¥ã³ããŒãæŽæ°ãããŸãããã€ã³ããã¯ã¹ãšHEADã¯å€æŽãããŸããã
~/alpha $ git add data/number.txt
ãŠãŒã¶ãŒããã¡ã€ã«ãGitã«è¿œå ããŸãã ããã«ããã2ãå«ãblobããªããžã§ã¯ããã£ã¬ã¯ããªã«è¿œå ãããŸãã data / number.txtã®ã€ã³ããã¯ã¹ãšã³ããªãã€ã³ã¿ãŒã¯ãæ°ããBLOBãæããŸãã
~/alpha $ git commit -m 'a2' [master f0af7e6] a2
ãŠãŒã¶ãŒãã³ãããããŸãã åœŒã®æé ã¯ä»¥åãšåãã§ãã
æåã«ãã€ã³ããã¯ã¹ã®å
容ãè¡šãæ°ããããªãŒã°ã©ããäœæãããŸãã
data / number.txtã®ã€ã³ããã¯ã¹ãšã³ããªã倿ŽãããŸããã å€ãããŒã¿ããªãŒã¯ãããŒã¿ãã£ã¬ã¯ããªã®ã€ã³ããã¯ã¹ä»ãç¶æ
ãåæ ããªããªããŸããã æ°ããããŒã¿ããªãŒãªããžã§ã¯ããäœæããå¿
èŠããããŸãã
100664 blob 2e65efe2a145dda7ee51d1741299f848e5bf752e letter.txt 100664 blob d8263ee9860594d2806b0dfd1bfd17528b0ba2a4 number.txt
æ°ãããªããžã§ã¯ãã®ããã·ã¥ã¯ãå€ãããŒã¿ããªãŒãšã¯ç°ãªããŸãã ãã®ããã·ã¥ãæžã蟌ãã«ã¯ãæ°ããã«ãŒãããªãŒãäœæããå¿
èŠããããŸãã
040000 tree 40b0318811470aaacc577485777d7a6780e51f0b data
次ã«ãæ°ããã³ããããªããžã§ã¯ããäœæãããŸãã
tree ce72afb5ff229a39f6cce47b00d1b0ed60fe3556 parent 774b54a193d6cfdd081e581a007d2e11f784b9fe author Mary Rose Cook <mary@maryrosecook.com> 1424813101 -0500 committer Mary Rose Cook <mary@maryrosecook.com> 1424813101 -0500 a2
ã³ããããªããžã§ã¯ãã®æåã®è¡ã¯ãæ°ããã«ãŒããªããžã§ã¯ããæããŸãã 2è¡ç®ã¯a1ïŒèŠªã³ããããæããŸãã 芪ã³ããããæ€çŽ¢ããããã«ãGitã¯HEADã«é²ã¿ããã¹ã¿ãŒã«ç§»åããŠãã³ãããa1ã®ããã·ã¥ãèŠã€ããŸãã
第äžã«ããã¹ã¿ãŒãã©ã³ããã¡ã€ã«ã®å
å®¹ãæ°ããã³ãããã®ããã·ã¥ã«å€æŽãããŸãã
ã³ãããa2äœæ¥ã³ããŒãšã€ã³ããã¯ã¹ãªãã®Gitã°ã©ãã°ã©ãã®ããããã£ïŒ
â¢ã³ã³ãã³ãã¯ãªããžã§ã¯ãã®ããªãŒãšããŠä¿åãããŸãã ããã¯ã倿Žã®ã¿ãããŒã¿ããŒã¹ã«ä¿åãããããšãæå³ããŸãã äžèšã®ã°ã©ããã芧ãã ããã ã³ãããA2ã¯ãã³ãããA1ã®åã«äœæãããBLOBãåå©çšããŸãã åæ§ã«ãã³ãããããã³ããããŸã§ã®ãã£ã¬ã¯ããªå
šäœã倿Žãããªãå Žåããã®ããªãŒãšãã¹ãŠã®ãããããã³åºç€ãšãªãããªãŒãåå©çšã§ããŸãã éåžžãã³ãããéã®å€æŽã¯ãããã§ãã ããã¯ãGitã倧ããªã³ãããå±¥æŽãä¿åã§ããã¹ããŒã¹ãã»ãšãã©å æããªãããšãæå³ããŸãã
â¢åã³ãããã«ã¯ç¥å
ããããŸãã ããã¯ããããžã§ã¯ãå±¥æŽããªããžããªã«ä¿åã§ããããšãæå³ããŸãã
â¢ãªã³ã¯-ç¹å®ã®ã³ãããå±¥æŽã®ãšã³ããªãã€ã³ãã ããã¯ãã³ãããã«æå³ã®ããååãä»ããããšãã§ããããšãæå³ããŸãã ãŠãŒã¶ãŒã¯ãfix-for-bug-376ãªã©ã®ãªã³ã¯ã䜿çšããŠãèªåã®ãããžã§ã¯ãã«ãšã£ãŠæå³ã®ããè¡çµ±ã®åœ¢ã§äœæ¥ãæŽçããŸãã Gitã¯HEADãMERGE_HEADãFETCH_HEADãªã©ã®ã·ã³ããªãã¯ãªã³ã¯ã䜿çšããŠãã³ãããå±¥æŽç·šéã³ãã³ãããµããŒãããŸãã
â¢ãªããžã§ã¯ã/ãã£ã¬ã¯ããªå
ã®ããŒãã¯å€æŽãããŠããŸããã ããã¯ãã³ã³ãã³ããç·šéãããŠããããåé€ãããŠããªãããšãæå³ããŸãã ãããŸã§ã«è¿œå ããããã¹ãŠã®ã³ã³ãã³ããè¡ããããã¹ãŠã®ã³ãããã¯ããªããžã§ã¯ããã£ã¬ã¯ããªã®ã©ããã«ä¿åãããŸãã
â¢ãªã³ã¯ã¯å€æŽå¯èœã§ãã ãã®ããããªã³ã¯ã®æå³ãå€ããå ŽåããããŸãã masterãæãã³ãããã¯ãçŸæç¹ã§ã¯ãããžã§ã¯ãã®æè¯ã®ããŒãžã§ã³ãããããŸããããããã«æ°ããã³ãããã«çœ®ãæããããå¯èœæ§ããããŸãã
â¢äœæ¥ã³ããŒãšåç
§ãããã³ãããã¯ããã«å©çšã§ããŸãã ä»ã®ã³ãããã¯ããã§ã¯ãããŸããã ã€ãŸããæè¿ã®å±¥æŽã¯ããç°¡åã«åŒã³åºãããšãã§ããŸãããããé »ç¹ã«å€æŽãããŸãã Gitã®èšæ¶ã¯çµ¶ããæ¶æ»
ããŠãããšèšããŸãããGitã®èšæ¶ã¯ãŸããŸã硬çŽããçªãã§åºæ¿ãããå¿
èŠããããŸãã
äœæ¥ã³ããŒã¯ããªããžããªã®ã«ãŒãã«ãããããå±¥æŽããåŒã³åºãã®ãæãç°¡åã§ãã 圌女ã®åŒã³åºãã«ã¯Gitã³ãã³ãããå¿
èŠãããŸããã ããããããã¯æŽå²äžæãäžå®å®ãªãã€ã³ãã§ããããŸãã ãŠãŒã¶ãŒã¯ãã¡ã€ã«ã®ããŒã¹ããŒãžã§ã³ãäœæã§ããŸãããGitã¯ãããã远å ããããŸã§ãããã®ããããæžã蟌ã¿ãŸããã
HEADãæãã³ãããã¯éåžžã«ç°¡åã«åŒã³åºãããšãã§ããŸãã 確èªããããã©ã³ãã®æåŸã§ãã ãã®å
容ã衚瀺ããããã«ããŠãŒã¶ãŒã¯äœæ¥ã³ããŒãä¿åããŠèª¿ã¹ãããšãã§ããŸãã åæã«ãHEADã¯æãé »ç¹ã«å€æŽããããªã³ã¯ã§ãã
ç¹å®ã®ãªã³ã¯ã«ãã£ãŠåç
§ãããã³ãããã¯ç°¡åã«åŒã³åºãããšãã§ããŸãã ãŠãŒã¶ãŒã¯ãã®ã¹ã¬ããã確èªããã ãã§ãã ãã©ã³ãã®çµããã¯HEADãããé »ç¹ã«å€æŽãããŸãããããã©ã³ãåã®æå³ã倿Žããã®ã«ååã§ãã
åç
§ãããŠããªãã³ããããåŒã³åºãããšã¯å°é£ã§ãã ãŠãŒã¶ãŒããªã³ã¯ãé¢ããã»ã©ãã³ãããã®æå³ãåçŸããã®ãé£ãããªããŸãã ããããéå»ã«ãªãã°ãªãã»ã©ãæåŸã«èŠèŽãããŠãã誰ããç©èªãå€ããå¯èœæ§ã¯äœããªããŸãã
ã³ãããã®æ€èšŒïŒãã§ãã¯ã¢ãŠãïŒ
~/alpha $ git checkout 37888c2 You are in 'detached HEAD' state...
ãŠãŒã¶ãŒã¯ãããã·ã¥ã䜿çšããŠã³ãããa2ã確èªããŸãã ïŒãããã®ã³ãã³ããå®è¡ãããšããã®ã³ãã³ãã¯æ©èœããŸãããgitlogã䜿çšããŠãã³ãããa2ã®ããã·ã¥ãèŠã€ããŸãïŒã
確èªã¯4ã€ã®ã¹ãããã§æ§æãããŸãã
ãŸããGitã¯ã³ãããa2ãšãããæãã°ã©ããåãåããŸãã
第äºã«ã圌ã¯äœæ¥ã³ããŒã®ã°ã©ãã«ãã¡ã€ã«ã®èšé²ãäœæããŸãã ãã®çµæã倿Žã¯çºçããŸããã HEADã¯ãã§ã«ãã¹ã¿ãŒãéããŠa2ãã³ãããããããã«æç€ºããŠãããããäœæ¥ã³ããŒã«ã¯ãã§ã«ã°ã©ãã®å
容ãå«ãŸããŠããŸãã
第äžã«ãGitã¯ã€ã³ããã¯ã¹å
ã®ã°ã©ãã«ãã¡ã€ã«ãèšé²ããŸãã 倿ŽããããŸããã ã€ã³ããã¯ã¹ã«ã¯ãã§ã«ã³ãããa2ãå«ãŸããŠããŸãã
4çªç®ã«ãã³ãããA2ã®ããã·ã¥ãHEADã®ã³ã³ãã³ãã«å²ãåœãŠãããŸãã
f0af7e62679e144bb28c627ee3e8f7bdb235eee9
HEADã«ããã·ã¥ãæžã蟌ããšããªããžããªã¯HEADãåãé¢ãããç¶æ
ã«ãªããŸãã äžã®ã°ã©ãã§ãHEADã¯ãã¹ã¿ãŒã§ã¯ãªããa2ãçŽæ¥ã³ãããããŠããããšã«æ³šæããŠãã ããã
~/alpha $ printf '3' > data/number.txt ~/alpha $ git add data/number.txt ~/alpha $ git commit -m 'a3' [detached HEAD 3645a0e] a3
ãŠãŒã¶ãŒã¯ãå€3ãdata / number.txtã®å
å®¹ã«æžã蟌ã¿ã倿Žãã³ãããããŸãã Gitã¯HEADã«ç§»åããŠãã³ãããa3ã®èŠªãååŸããŸãã ãã©ã³ããžã®ãªã³ã¯ãèŠã€ããŠè¿œè·¡ãã代ããã«ãã³ãããa2ã®ããã·ã¥ãèŠã€ããŠè¿ããŸãã
Gitã¯æ°ããa3ã³ãããã®ããã·ã¥ãæãããã«HEADãæŽæ°ããŸãã ãªããžããªã¯ãHEADãåãé¢ãããç¶æ
ã®ãŸãŸã§ãã 1ã€ã®ã³ããããa3ãŸãã¯ãã®åå«ããã€ã³ãããªãããããã©ã³ãäžã«ã¯ãããŸããã 倱ãã®ã¯ç°¡åã§ãã
次ã«ãã°ã©ãå³ããããªãŒãšããããçç¥ããŸãã
ãã©ã³ããäœæãã
~/alpha $ git branch deputy
ãŠãŒã¶ãŒã¯ã代çãšåŒã°ããæ°ãããã©ã³ããäœæããŸãã ãã®çµæãHEADãæãããã·ã¥ãå«ãæ°ãããã¡ã€ã«ã.git / refs / heads / deputyã«è¡šç€ºãããŸãïŒã³ãããã³ãããããã·ã¥a3ã
ãã©ã³ãã¯åãªããªã³ã¯ã§ããããªã³ã¯ã¯åãªããã¡ã€ã«ã§ãã ããã¯ãGitãã©ã³ãã®ééãéåžžã«å°ãªãããšãæå³ããŸãã
代çãã©ã³ããäœæãããšãæ°ããã³ãããa3ããã©ã³ãã«é
眮ãããŸãã HEADã¯ãŸã ã³ããããçŽæ¥æããŠããããããŸã åãé¢ãããŠããŸãã
ãã©ã³ãã確èª
~/alpha $ git checkout master Switched to branch 'master'
ãŠãŒã¶ãŒã¯masterãã©ã³ãã確èªããŸãã
ãŸããGitã¯ãã¹ã¿ãŒãæãã³ãããa2ãååŸããã³ããããæãã°ã©ããååŸããŸãã
第äºã«ãGitã¯äœæ¥ã³ããŒãã¡ã€ã«ã®ã°ã©ãã«ãã¡ã€ã«ãšã³ããªãäœæããŸãã ããã«ãããdata / number.txtã®å
容ã2ã«å€æŽãããŸãã
第äžã«ãGitã¯ã€ã³ããã¯ã¹ã°ã©ãã«ãã¡ã€ã«ãšã³ããªãäœæããŸãã ããã«ãããdata / number.txtã®ãšã³ããªãblob hash 2ã«æŽæ°ãããŸãã
4çªç®ã«ãGitã¯HEADãmasterã«æç€ºãããã®å
容ãããã·ã¥ãã
ref: refs/heads/master
äœæ¥ã³ããŒãšäºææ§ã®ãªããã©ã³ãã確èªãã
~/alpha $ printf '789' > data/number.txt ~/alpha $ git checkout deputy Your changes to these files would be overwritten by checkout: data/number.txt Commit your changes or stash them before you switch branches.
ãŠãŒã¶ãŒã誀ã£ãŠdata / number.txtã®å
容ã789ã«èšå®ããŠããŸãã圌ã¯ä»£çã確èªããããšããŠããŸãã Gitã¯ç¢ºèªãæšå¥šããŸããã
HEADã¯ãa2ãæãmasterãæããdata / number.txtã«æžã蟌ãŸããŸãã2. deputyã¯ãa3ãæããdata / number.txtã«æžã蟌ãŸããŸãã3. data / number.txtã®äœæ¥ã³ããŒããŒãžã§ã³ã§ã¯ã789ãæžã蟌ãŸããŸããéããããããã®éããäœããã®åœ¢ã§æé€ããå¿
èŠããããŸãã
Gitã¯ãäœæ¥ã³ããŒã®ããŒãžã§ã³ãç¢ºèªæžã¿ã®ã³ãããã®ããŒãžã§ã³ã«çœ®ãæããããšãã§ããŸãã ãããã圌ã¯å¿
ãããŒã¿ã®æå€±ãé¿ããŸãã
Gitã¯ãäœæ¥ã³ããŒããŒãžã§ã³ãšæ€èšŒæžã¿ããŒãžã§ã³ãçµã¿åãããããšãã§ããŸãã ããããããã¯é£ããã§ãã
ãããã£ãŠãGitã¯ç¢ºèªãæåŠããŸãã
~/alpha $ printf '2' > data/number.txt ~/alpha $ git checkout deputy Switched to branch 'deputy'
ãŠãŒã¶ãŒã¯ã誀ã£ãŠdata / number.txtãç·šéããããã2ã«å²ãåœãŠãŠããããšã«æ°ä»ããŸãããã®åŸã代ç人ã確èªããŸãã
å
ç¥ãšã®é¢ä¿
~/alpha $ git merge master Already up-to-date.
ãŠãŒã¶ãŒã¯ãã¹ã¿ãŒã«ä»£ç人ãå«ããŸãã 2ã€ã®ãã©ã³ããããŒãžãããšã2ã€ã®ã³ããããããŒãžãããŸãã æåã®ã³ãããã¯ã代çãæããã®ãã€ãŸãã¢ã¯ã»ãã¿ãŒã§ãã 2çªç®ã®ã³ãããã¯ããã¹ã¿ãŒã«ãã£ãŠæå®ãããã³ãããïŒæäŸè
ã§ãã Gitã¯ããŒãžããããã«äœãããŸããã 圌ã¯ãã§ã«ããã§ã«ææ°ãã§ãããšå ±åããŠããŸãã
ã°ã©ãå
ã®äžé£ã®çµåã¯ããªããžããªã®ã³ã³ãã³ãã«å¯Ÿããäžé£ã®å€æŽãšããŠè§£éãããŸãã ããã¯ãããŒãžæã«ãã®ããŒã®ã³ããããã¬ã·ãŒããŒã®ã³ãããã®ç¥å
ã«ãã£ãŠååŸãããå ŽåãGitã¯äœãããªãããšãæå³ããŸãã ãããã®å€æŽã¯ãã§ã«è¡ãããŠããŸãã
åã©ãäŒ
~/alpha $ git checkout master Switched to branch 'master'
ãŠãŒã¶ãŒããã¹ã¿ãŒã確èªããŸãã
~/alpha $ git merge deputy Fast-forward
圌ã¯ãã¹ã¿ãŒã«ä»£ç人ãå«ããŠããŸãã Gitã¯ãã³ããããåãå
¥ããa2ãã³ããããäžããa3ã®ç¥å
ã§ããããšãçºèŠããŸãã åœŒã¯æ©éããã§ããŸãã
圌ã¯èŽãäž»ãšåœŒãæãç€ºãæ°ãåãã äœæ¥ã³ããŒãšã€ã³ããã¯ã¹ã®åã«ãã¡ã€ã«ãšã³ããªãäœæããŸãã æ¬¡ã«ã圌ã¯ãã¹ã¿ãŒããå·»ãæ»ãããa3ãæãããã«ããŸãã
ã°ã©ãã«å¯Ÿããäžé£ã®ã³ãããã¯ããªããžããªã®ã³ã³ãã³ãã«å¯Ÿããäžé£ã®å€æŽãšããŠè§£éãããŸãã ããã¯ãèŽäžè
ãå絊è
ã®åå«ã§ããå Žåãçµã¿åããããšãã«ã¹ããŒãªãŒãå€ãããªãããšãæå³ããŸãã ç®çã®å€æŽãèšè¿°ããã³ãããã®ã·ãŒã±ã³ã¹ãæ¢ã«ãããŸããåä¿¡è
ãšæäŸè
ã®éã®ã³ãããã®ã·ãŒã±ã³ã¹ã§ãã ããããGitã®æŽå²ã¯å€ãããŸããããGitã®ã°ã©ãã¯å€ãããŸãã HEADãæãç¹å®ã®ãªã³ã¯ãæŽæ°ãããèŽäžè
ã®ã³ãããã瀺ããŸãã
ç°ãªãè¡çµ±ã®2ã€ã®ã³ããããçµåãã
~/alpha $ printf '4' > data/number.txt ~/alpha $ git add data/number.txt ~/alpha $ git commit -m 'a4' [master 7b7bd9a] a4
ãŠãŒã¶ãŒã¯ãnumber.txtã®å
容ã«4ãæžã蟌ã¿ã倿Žããã¹ã¿ãŒã«ã³ãããããŸãã
~/alpha $ git checkout deputy Switched to branch 'deputy' ~/alpha $ printf 'b' > data/letter.txt ~/alpha $ git add data/letter.txt ~/alpha $ git commit -m 'b3' [deputy 982dffb] b3
ãŠãŒã¶ãŒã代çã確èªããŸãã data / letter.txtã®å
容ã«ãbããæžã蟌ã¿ã倿Žã代çã«ã³ãããããŸãã
ã³ãããã¯å
±éã®èŠªãæã€ããšãã§ããŸãã ããã¯ãã³ãããã®å±¥æŽã«æ°ããå®¶ç³»å³ãäœæã§ããããšãæå³ããŸãã
ã³ãããã¯è€æ°ã®èŠªãæã€ããšãã§ããŸãã ããã¯ã2ã€ã®èŠªãšã®ã³ãããïŒçµåã³ãããïŒã«ãã£ãŠç°ãªãè¡çµ±ãçµåã§ããããšãæå³ããŸãã
~/alpha $ git merge master -m 'b4' Merge made by the 'recursive' strategy.
ãŠãŒã¶ãŒã¯ãã¹ã¿ãŒãšä»£ââçãçµã¿åãããŸãã
Gitã¯ãã¢ã¯ã»ãã¿ãŒb3ãšã®ããŒa4ã®è¡çµ±ãç°ãªãããšãçºèŠããŸãã ããŒãžã³ããããå®è¡ããŸãã ãã®ããã»ã¹ã«ã¯8ã€ã®ã¹ãããããããŸãã
1. Gitã¯ãäžããã³ãããã®ããã·ã¥ãalpha / .git / MERGE_HEADãã¡ã€ã«ã«æžã蟌ã¿ãŸãã ãã®ãã¡ã€ã«ã®ååšã¯ãGitã«ããŒãžã®ããã»ã¹äžã§ããããšãäŒããŸãã
2.次ã«ãGitã¯åºæ¬çãªã³ããããã€ãŸãã³ãããã®æäŸãšåä¿¡ã«å
±éããææ°ã®ç¥å
ãèŠã€ããŸãã
ã³ãããã«ã¯èŠªãããŸãã ããã¯ã2ã€ã®ç³»å³ãåé¢ãããã€ã³ããèŠã€ããããšãã§ããããšãæå³ããŸãã Gitã¯ããã¹ãŠã®ç¥å
ãèŠã€ããããã«b3ãããã§ãŒã³ã远跡ããåãç®çã§a4ãããã§ãŒã³ã远跡ããŸãã 圌ã¯åœŒãã®å
±éã®ç¥å
ã®ææ°ã®a3ãèŠã€ããŸãã ããã¯åºæ¬çãªã³ãããã§ãã
3. Gitã¯ããŒã¹ã®ã€ã³ããã¯ã¹ãäœæããããªãŒã°ã©ãããã³ããããæåããŸãã
4. Gitã¯ãã³ããããšã³ããããããŒã¹ã«å¯ŸããŠè¡ã£ã倿Žãçµã¿åãããŠãå·®åãäœæããŸãã ãã®diffã¯ã倿ŽïŒè¿œå ãåé€ã倿ŽããŸãã¯ç«¶åïŒã瀺ããã¡ã€ã«ãã¹ã®ãªã¹ãã§ãã
Gitã¯ãããŒã¹ã³ããããåä¿¡ãããã³ã®ãã®ã€ã³ããã¯ã¹ã«ãããã¹ãŠã®ãã¡ã€ã«ã®ãªã¹ããååŸããŸãã ããããã«ã€ããŠãã€ã³ããã¯ã¹ã®ãšã³ããªãæ¯èŒãããã¡ã€ã«ã®å€æŽæ¹æ³ã決å®ããŸãã 圌ã¯å¯Ÿå¿ãããšã³ããªãdiffã«æžã蟌ã¿ãŸãã ãã®å Žåã2ã€ã®ãšã³ããªãdiffã«åé¡ãããŸãã
æåã®ãšã³ããªã¯ãdata / letter.txtçšã§ãã ãã®ãã¡ã€ã«ã®å
容ã¯ãããŒã¹ã®ãaããã¬ã·ãŒããŒã®ãbããã®ããŒã®ãaãã§ãã ããŒã¹ãšåä¿¡è
ã®ã³ã³ãã³ãã¯ç°ãªããŸãã ããããåºæ¬ãšæäŸè
ã¯åãã§ãã Gitã¯ãã³ã³ãã³ããåä¿¡è
ã§ã¯ãªãåä¿¡è
ã«ãã£ãŠå€æŽãããŠããããšã確èªããŸãã data / letter.txtã®å·®åãšã³ããªã¯å€æŽã§ãããç«¶åã§ã¯ãããŸããã
diffã®2çªç®ã®ãšã³ããªã¯ãdata / number.txtçšã§ãã ãã®å Žåãã³ã³ãã³ãã¯ããŒã¹ãšåä¿¡è
ã§åãã§ãããæäŸè
ã§ã¯å
容ãç°ãªããŸãã data / number.txtã®diffãšã³ããªã倿Žã§ãã
ã¢ãœã·ãšãŒã·ã§ã³ã®ããŒã¹ã³ããããèŠã€ããããšãã§ããŸãã ããã¯ããã¡ã€ã«ãåä¿¡ãŸãã¯æäŸã«ãããŠã®ã¿ããŒã¹ãšç°ãªãå ŽåãGitã¯ãã¡ã€ã«ãèªåçã«ããŒãžã§ããããšãæå³ããŸãã ããã«ããããŠãŒã¶ãŒãè¡ãå¿
èŠã®ããäœæ¥ãåæžãããŸãã
5. diffã®ãšã³ããªã«ãã£ãŠèšè¿°ããã倿Žãäœæ¥ã³ããŒã«é©çšãããŸãã data / letter.txtã®ã³ã³ãã³ãã¯bã«èšå®ãããdata / number.txtã®ã³ã³ãã³ãã¯4ã«èšå®ãããŸãã
6. diffã®ãšã³ããªã«ãã£ãŠèšè¿°ããã倿Žãã€ã³ããã¯ã¹ã«é©çšãããŸãã data / letter.txtã«é¢é£ããã¬ã³ãŒãã¯blob bãæããdata / number.txtã®ã¬ã³ãŒãã¯blob 4ãæããŸãã
7.æŽæ°ãããã€ã³ããã¯ã¹ã確èªãããŸãã
tree 20294508aea3fb6f05fcc49adaecc2e6d60f7e7d parent 982dffb20f8d6a25a8554cc8d765fb9f3ff1333b parent 7b7bd9a5253f47360d5787095afc5ba56591bfe7 author Mary Rose Cook <mary@maryrosecook.com> 1425596551 -0500 committer Mary Rose Cook <mary@maryrosecook.com> 1425596551 -0500 b4
ã³ãããã«ã¯2ã€ã®èŠªãããããšã«æ³šæããŠãã ããã
8. Gitã¯ãçŸåšã®ãã©ã³ãã®ä»£çãæ°ããã³ãããã«åããŸãã
åããã¡ã€ã«ã倿Žããç°ãªãè¡çµ±ããã®2ã€ã®ã³ããããçµåãã
~/alpha $ git checkout master Switched to branch 'master' ~/alpha $ git merge deputy Fast-forward
ãŠãŒã¶ãŒããã¹ã¿ãŒã確èªããŸããããã¯ã代çãšãã¹ã¿ãŒãçµã¿åããããã®ã§ããããã«ããããã¹ã¿ãŒãå·»ãæ»ãããŠb4ãã³ããããããŸãããã¹ã¿ãŒãšä»£ââçãåãã³ããããæãããã«ãªããŸããã ~/alpha $ git checkout deputy Switched to branch 'deputy' ~/alpha $ printf '5' > data/number.txt ~/alpha $ git add data/number.txt ~/alpha $ git commit -m 'b5' [deputy bd797c2] b5
ãŠãŒã¶ãŒã代çã確èªããŸããdata / number.txtã®å
容ã5ã«èšå®ãã代çãžã®å€æŽã確èªããŸãã ~/alpha $ git checkout master Switched to branch 'master' ~/alpha $ printf '6' > data/number.txt ~/alpha $ git add data/number.txt ~/alpha $ git commit -m 'b6' [master 4c3ce18] b6
ãŠãŒã¶ãŒããã¹ã¿ãŒã確èªããŸããdata / number.txtã®å
容ã6ã«èšå®ãããã¹ã¿ãŒãžã®å€æŽã確èªããŸãã ~/alpha $ git merge deputy CONFLICT in data/number.txt Automatic merge failed; fix conflicts and commit the result.
ãŠãŒã¶ãŒã¯ä»£çãšãã¹ã¿ãŒãçµã¿åãããŸããç«¶åãæããã«ãªããé¢é£ä»ããäžæãããŸããç«¶åã䌎ãçµåã®ããã»ã¹ã¯ãç«¶åã䌎ããªãçµåã®ããã»ã¹ãšåã6ã€ã®æåã®ã¹ããããåããŸãïŒ.git / MERGE_HEADã®å®çŸ©ãããŒã¹ã³ãããã®æ€çŽ¢ãããŒã¹ã®ã€ã³ããã¯ã¹ã®äœæãã³ãããã®åä¿¡ãšä»äžãå·®åã®äœæãäœæ¥ã³ããŒã®æŽæ°ãã€ã³ããã¯ã¹ã®æŽæ°ç«¶åã®ãããã³ãããã®ãã7çªç®ã®ã¹ããããšæŽæ°ãªã³ã¯ã®ãã8çªç®ã®ã¹ãããã¯å®è¡ãããŸãããããäžåºŠèª¿ã¹ãŠãäœãèµ·ãããèŠãŠã¿ãŸãããã1. Gitã¯ãäžããã³ãããã®ããã·ã¥ã.git / MERGE_HEADãã¡ã€ã«ã«æžã蟌ã¿ãŸãã2. Gitã¯ããŒã¹ã³ãããb4ãèŠã€ããŸãã3. Gitã¯ãããŒã¹ã®ã€ã³ããã¯ã¹ãçæããã³ããããåãå
¥ããã³ãããããŸãã4. Gitã¯ãã³ãããã®åä¿¡ãšæäŸã«ãã£ãŠè¡ãããããŒã¹ã³ãããã®å€æŽãçµåããdiffãçæããŸãããã®å·®åã¯ã倿Žã远å ãåé€ã倿ŽããŸãã¯ç«¶åã瀺ããã¡ã€ã«ãã¹ã®ãªã¹ãã§ãããã®å Žåãdiffã«ã¯data / number.txtã®1ã€ã®ãšã³ããªã®ã¿ãå«ãŸããŸãã data / number.txtã®å
容ã¯ãä»äžãåä¿¡ãããã³åºæ¬ã³ãããã§ç°ãªããããç«¶åãšããŠããŒã¯ãããŸãã5.å·®åãšã³ããªã«ãã£ãŠå®çŸ©ããã倿Žã¯ãäœæ¥ã³ããŒã«é©çšãããŸããç«¶åé åã§ã¯ãGitã¯äž¡æ¹ã®ããŒãžã§ã³ãäœæ¥ã³ããŒãã¡ã€ã«ã«åºåããŸãã ata / number.txtãã¡ã€ã«ã®å
å®¹ã¯æ¬¡ã®ãšããã§ãã <<<<<<< HEAD 6 ======= 5 >>>>>>> deputy
6.å·®åãšã³ããªã«ãã£ãŠå®çŸ©ããã倿Žãã€ã³ããã¯ã¹ã«é©çšãããŸããã€ã³ããã¯ã¹ã®ãšã³ããªã«ã¯ããã¡ã€ã«ãã¹ãšã¹ããŒãžã®çµã¿åãããšããŠäžæã®èå¥åããããŸããç«¶åã®ãªããã¡ã€ã«ã¬ã³ãŒãã§ã¯ãã¹ããŒãžã¯0ã§ããçµåããåãã€ã³ããã¯ã¹ã¯ãŒããã¹ããŒãžçªå·ã§ããããã«èŠããŸããã 0 data/letter.txt 63d8dbd40c23542e740659a7168a0ce3138ea748 0 data/number.txt 62f9457511f879886bb7728c986fe10b0ece6bcb
diffãã€ã³ããã¯ã¹ã«æžã蟌ããšã次ã®ããã«ãªããŸãã 0 data/letter.txt 63d8dbd40c23542e740659a7168a0ce3138ea748 1 data/number.txt bf0d87ab1b2b0ec1a11a3973d2845b42413d9767 2 data/number.txt 62f9457511f879886bb7728c986fe10b0ece6bcb 3 data/number.txt 7813681f5b41c028345ca62a2be376bae70b7f61
ã¹ããã0ã®data / letter.txtãšã³ããªã¯ãããŒãžåãšåãã§ããã¹ããã0ã®data / number.txtã®ãšã³ããªãæ¶ããŸããã代ããã«ã3ã€ã®æ°ãããã®ãç»å ŽããŸãããã¹ããã1ã®ã¬ã³ãŒãã«ã¯ãdata / number.txtã®åºç€ãšãªãã³ã³ãã³ãããã®ããã·ã¥ããããŸããã¹ããã3ã®ã¬ã³ãŒãã«ã¯ãdata / number.txtã®ã³ã³ãã³ãããã®ããã·ã¥ããããŸãã3ã€ã®ãšã³ããªãååšããããšã«ãããGitã«data / number.txtã®ç«¶åããã£ãããšãããããŸããé¢é£ä»ããäžæåæ¢ããŸãã ~/alpha $ printf '11' > data/number.txt ~/alpha $ git add data/number.txt
ãŠãŒã¶ãŒã¯ãç«¶åãã2ã€ã®ããŒãžã§ã³ã®ã³ã³ãã³ããçµ±åããdata / number.txtã®ã³ã³ãã³ãã11ã«èšå®ããŸãããŠãŒã¶ãŒã¯ãã¡ã€ã«ãã€ã³ããã¯ã¹ã«è¿œå ããŸããGitã¯11ãå«ãblobã远å ããŸããç«¶åãã¡ã€ã«ã远å ãããšãGitã«ç«¶åã解決ãããããšãéç¥ãããŸããGitã¯ãã¹ããã1ã2ãããã³3ã®ããŒã¿/ number.txtã®åºçŸãã€ã³ããã¯ã¹ããåé€ããŸãã圌ã¯ãæ°ããblobããã®ããã·ã¥ã䜿çšããŠãã¹ããã0ã§data / number.txtã®ãšã³ããªã远å ããŸããçŸåšãã€ã³ããã¯ã¹ã«ã¯ãšã³ããªãå«ãŸããŠããŸãã 0 data/letter.txt 63d8dbd40c23542e740659a7168a0ce3138ea748 0 data/number.txt 9d607966b721abde8931ddd052181fae905db503 ~/alpha $ git commit -m 'b11' [master 251a513] b11
7.ãŠãŒã¶ãŒãã³ãããããŸããGitã¯ãªããžããªå
ã®.git / MERGE_HEADã確èªããããŒãžãé²è¡äžã§ããããšã圌ã«äŒããŸããã€ã³ããã¯ã¹ããã§ãã¯ããç«¶åãæ€åºããŸãããæ°ããã³ãããb11ãäœæããŠãèš±å¯ãããçµåã®å
容ãèšé²ããŸãã.git / MERGE_HEADãã¡ã€ã«ãåé€ããŸããããã§å䜵ãå®äºããŸãã8. Gitã¯ãçŸåšã®ãã©ã³ãmasterãæ°ããã³ãããã«åããŸãããã¡ã€ã«åé€
Gitã°ã©ãã®ãã£ãŒãã«ã¯ãã³ãããã®å±¥æŽãæåŸã®ã³ãããã®ããªãŒãšããããäœæ¥ã³ããŒãã€ã³ããã¯ã¹ãå«ãŸããŸãã ~/alpha $ git rm data/letter.txt rm 'data/letter.txt'
ãŠãŒã¶ãŒã¯Gitã«data / letter.txtãåé€ããããæç€ºããŸãããã¡ã€ã«ã¯äœæ¥ã³ããŒããåé€ãããŸããã¬ã³ãŒããã€ã³ããã¯ã¹ããåé€ãããŸãã ~/alpha $ git commit -m '11' [master d14c7d2] 11
ãŠãŒã¶ãŒãã³ãããããŸããéåžžãã³ããããããšããGitã¯ã€ã³ããã¯ã¹ã®å
容ã衚ãã°ã©ããäœæããŸããdata / letter.txtã¯ãã€ã³ããã¯ã¹ã«å«ãŸããŠããªããããã°ã©ãã«å«ãŸããŠããŸããããªããžããªãã³ããŒ
~/alpha $ cd .. ~ $ cp -R alpha bravo
ãŠãŒã¶ãŒã¯alpha / repositoryã®å
容ãbravo /ãã£ã¬ã¯ããªã«ã³ããŒããŸããããã«ãããæ¬¡ã®æ§é ãåŸãããŸãã ~ âââ alpha | âââ data | âââ number.txt âââ bravo âââ data âââ number.txt
çŸåšãbravoãã£ã¬ã¯ããªã«æ°ããGitã°ã©ãããããŸãããªããžããªãå¥ã®ãªããžããªã«ãªã³ã¯ãã
~ $ cd alpha ~/alpha $ git remote add bravo ../bravo
ãŠãŒã¶ãŒã¯ã¢ã«ãã¡ãªããžããªã«æ»ããŸããbravoãalphaã®ãªã¢ãŒããªããžããªãšããŠæå®ããŸããããã«ãããalpha / .git / configãã¡ã€ã«ã«æ°è¡ã远å ãããŸãã [remote "bravo"] url = ../bravo/
è¡ã¯ã.. / bravoãã£ã¬ã¯ããªã«ãªã¢ãŒãbravoãªããžããªãããããšã瀺ããŠããŸãããªã¢ãŒããªããžããªãããã©ã³ããååŸ
~/alpha $ cd ../bravo ~/bravo $ printf '12' > data/number.txt ~/bravo $ git add data/number.txt ~/bravo $ git commit -m '12' [master 94cd04d] 12
ãŠãŒã¶ãŒã¯bravoãªããžããªã«ç§»åããŸããdata / number.txtã®å
容ã12ã«èšå®ããbravoã®ãã¹ã¿ãŒã«å€æŽãã³ãããããŸãã ~/bravo $ cd ../alpha ~/alpha $ git fetch bravo master Unpacking objects: 100% From ../bravo * branch master -> FETCH_HEAD
ãŠãŒã¶ãŒã¯ã¢ã«ãã¡ãªããžããªã«ç§»åããŸãããã¹ã¿ãŒããã©ããŒããã¢ã«ãã¡ã«ã³ããŒããŸãããã®ããã»ã¹ã«ã¯4ã€ã®ã¹ãããããããŸãã1. Gitã¯ããã¹ã¿ãŒãbravoã§æãã³ãããã®ããã·ã¥ãåãåããŸããããã¯ãã³ããã12ã®ããã·ã¥ã§ãã2. Gitã¯ãã³ããã12ãäŸåãããã¹ãŠã®ãªããžã§ã¯ãã®ãªã¹ããäœæããŸããã³ããããªããžã§ã¯ãèªäœããã®ã°ã©ãå
ã®ãªããžã§ã¯ããã³ããã12ã®ç¥å
ã®ã³ããããããã³ã°ã©ãã®ãªããžã§ã¯ããã¢ã«ãã¡ããŒã¿ããŒã¹ã«æ¢ã«ååšãããã¹ãŠã®ãªããžã§ã¯ãããã®ãªã¹ãããåé€ããŸããåœŒã¯æ®ããalpha / .git / objects /ã«ã³ããŒããŸãã3. alpha / .git / refs / remotes / bravo / masterå
ã®ç¹å®ã®ãªã³ã¯ãã¡ã€ã«ã®ã³ã³ãã³ãã«ã¯ãã³ããã12ã®ããã·ã¥ãå²ãåœãŠãããŸãã4. alpha / .git / FETCH_HEAD ã®ã³ã³ãã³ãã¯æ¬¡ã®ããã«ãªããŸãã 94cd04d93ae88a1f53a4646532b1e8cdfbc0977f branch 'master' of ../bravo
ããã¯ãææ°ã®ãã§ããã³ãã³ããbravoã䜿çšããŠãã¹ã¿ãŒããã³ããã12ãååŸããããšãæå³ããŸãããªããžã§ã¯ããã³ããŒã§ããŸããããã¯ãç°ãªããªããžããªã«å
±éã®å±¥æŽãããããšãæå³ããŸãããªããžããªã«ã¯ãalpha / .git / refs / remotes / bravo / masterãªã©ã®ãªã¢ãŒããã©ã³ããžã®ãªã³ã¯ãä¿åã§ããŸããããã¯ããªããžããªããªã¢ãŒããªããžããªã®ãã©ã³ãç¶æ
ãããŒã«ã«ã«èšé²ã§ããããšãæå³ããŸããã³ããŒããããšæ£ããã§ããããªã¢ãŒããã©ã³ãã倿Žããããšå»æ¢ãããŸããUnion FETCH_HEAD
~/alpha $ git merge FETCH_HEAD Updating d14c7d2..94cd04d Fast-forward
ãŠãŒã¶ãŒã¯FETCH_HEADã«åå ããŸããFETCH_HEADã¯å¥ã®ãªã³ã¯ã§ãã圌女ã¯12ã®å¯ä»ãã³ãããããããšãæããŸããHEADã¯11ã®åãå
¥ããã³ãããããããšãæããŸããGitã¯å·»ãæ»ããè¡ãããã¹ã¿ãŒã«ã³ããã12ãæç€ºããŸãããªã¢ãŒããªããžããªã®ãã©ã³ããååŸ
~/alpha $ git pull bravo master Already up-to-date.
ãŠãŒã¶ãŒã¯ããã©ããŒããã¢ã«ãã¡ã«ãã¹ã¿ãŒã転éããŸãããã«ã¯ãã³ããŒããã³ããŒãžFETCH_HEADãã®ç¥ã§ããGitã¯äž¡æ¹ã®ã³ãã³ããå®è¡ãããã¹ã¿ãŒããæ¢ã«ææ°ãã§ããããšãå ±åããŸãããªããžããªã®ã¯ããŒã³
~/alpha $ cd .. ~ $ git clone alpha charlie Cloning into 'charlie'
ãŠãŒã¶ãŒã¯æäžäœãã£ã¬ã¯ããªã«ç§»åããŸãã圌ã¯ã¢ã«ãã¡ããã£ãŒãªãŒã«ã¯ããŒã³ããŸããã¯ããŒãã³ã°ã¯ããŠãŒã¶ãŒãbravoãªããžããªãäœæããããã«å®è¡ããcpã³ãã³ããšåæ§ã®çµæãçæããŸããGitã¯æ°ããcharlieãã£ã¬ã¯ããªãäœæããŸããããã¯ãcharlieããªããžããªãšããŠåæåããalphaãremoteãšããååã§remoteãšããååã§è¿œå ããoriginãååŸããŠFETCH_HEADãé£çµããŸãããªã¢ãŒããªããžããªã®æ€èšŒæžã¿ãã©ã³ãã«ãã©ã³ããé
眮ïŒããã·ã¥ïŒãã
~ $ cd alpha ~/alpha $ printf '13' > data/number.txt ~/alpha $ git add data/number.txt ~/alpha $ git commit -m '13' [master 3238468] 13
ãŠãŒã¶ãŒã¯ã¢ã«ãã¡ãªããžããªã«æ»ããŸããdata / number.txtã®å
容ã13ã«èšå®ãããã¹ã¿ãŒãžã®å€æŽãalphaã«ã³ãããããŸãã ~/alpha $ git remote add charlie ../charlie
ãã£ãŒãªãŒããªã¢ãŒãã¢ã«ãã¡ãªããžããªãšããŠæå®ããŸãã ~/alpha $ git push charlie master Writing objects: 100% remote error: refusing to update checked out branch: refs/heads/master because it will make the index and work tree inconsistent
ããã¯ãã¹ã¿ãŒããã£ãŒãªãŒã«çœ®ããŸããã³ããã13ã«å¿
èŠãªãã¹ãŠã®ãªããžã§ã¯ãããã£ãŒãªãŒã«ã³ããŒãããŸãããã®æç¹ã§ãé
眮ããã»ã¹ã¯åæ¢ããŸãã Gitã¯ããã€ãã®ããã«ãäœãããŸããããªãã£ããããŠãŒã¶ãŒã«äŒããŸãã圌ã¯ãã©ã³ããžã®æçš¿ãæåŠããŸãããããã¯ãªã¢ãŒãã§ç¢ºèªãããŸããããã¯çã«ããªã£ãŠããŸããé
眮ã«ããããªã¢ãŒãã€ã³ããã¯ã¹ãšHEADãæŽæ°ãããŸããä»ã®èª°ãããªã¢ãŒããªããžããªã®äœæ¥ã³ããŒãç·šéããŠããå Žåãããã¯æ··ä¹±ãæããŸãããã®æç¹ã§ããŠãŒã¶ãŒã¯æ°ãããã©ã³ããäœæããã³ããã13ãããŒãžããŠããã®ãã©ã³ãããã£ãŒãªãŒã«é
眮ã§ããŸãããããããŠãŒã¶ãŒã¯äœããæçš¿ãããªããžããªãå¿
èŠã§ãããã¹ããããã¹ããããã³ããããåä¿¡ïŒãã«ïŒã§ããäžå€®ãªããžããªãå¿
èŠã§ããã誰ãçŽæ¥ã³ãããããŸããããªã¢ãŒãGitHubã®ãããªãã®ãå¿
èŠã§ããããããªïŒè£žã®ïŒãªããžããªãå¿
èŠã§ããããããªïŒããåºãã®ïŒãªããžããªãŒãè€è£œãã
~/alpha $ cd .. ~ $ git clone alpha delta --bare Cloning into bare repository 'delta'
ãŠãŒã¶ãŒã¯æäžäœãã£ã¬ã¯ããªã«ç§»åããŸããã¯ãªãŒã³ãªãªããžããªãšããŠãã«ã¿ã¯ããŒã³ãäœæããŸããããã¯ã2ã€ã®æ©èœãæã€éåžžã®ã¯ããŒã³ã§ããæ§æãã¡ã€ã«ã«ã¯ããªããžããªãã¯ãªãŒã³ã§ããããšãèšèŒãããŠããŸããéåžžã.gitãã£ã¬ã¯ããªã«ä¿åãããŠãããã¡ã€ã«ã¯ããªããžããªã®ã«ãŒãã«ä¿åãããŸãã delta âââ HEAD âââ config âââ objects âââ refs
ããããªãªããžããªã«ãã©ã³ããé
眮ãã
~ $ cd alpha ~/alpha $ git remote add delta ../delta
ãŠãŒã¶ãŒã¯ã¢ã«ãã¡ãªããžããªã«æ»ããŸãããã«ã¿ãã¢ã«ãã¡ã®ãªã¢ãŒããªããžããªãšããŠæå®ããŸãã ~/alpha $ printf '14' > data/number.txt ~/alpha $ git add data/number.txt ~/alpha $ git commit -m '14' [master cb51da8] 14
ã³ã³ãã³ãã14ã«èšå®ããmasterã®å€æŽãalphaã«ã³ãããããŸãã ~/alpha $ git push delta master Writing objects: 100% To ../delta 3238468..cb51da8 master -> master
圌ã¯ãã¹ã¿ãŒããã«ã¿ã«çœ®ããŸãã宿æ³ã¯3段éã§è¡ãããŸãã1. masterãã©ã³ãã§ã³ããã14ã«å¿
èŠãªãã¹ãŠã®ãªããžã§ã¯ããalpha / .git / objects /ããdelta / objects /ã«ã³ããŒãããŸãã2.ãã«ã¿/åèæç®/ããã/ãã¹ã¿ãŒã¯14ã³ãããããããã«æŽæ°ããã3ã¢ã«ãã¡/ .git /åèæç®/ãªã¢ã³ã³/ãã«ã¿/ãã¹ã¿ãå®éã®èšé²ç¶æ
ã§ã¯ã¢ã«ãã¡14ãã³ãããéä¿¡ãã«ã¿ã§ãããŸãšã
Gitã¯ã°ã©ãã«åºã¥ããŠããŸããã»ãšãã©ãã¹ãŠã®Gitã³ãã³ãããã®ã°ã©ããæäœããŸããGitãçè§£ããã«ã¯ãããã·ãŒãžã£ãã³ãã³ãã§ã¯ãªããã°ã©ãã®ããããã£ã«æ³šç®ããŠãã ãããGitã®è©³çްã«ã€ããŠã¯ã.gitãã£ã¬ã¯ããªãã芧ãã ãããããã¯æããªãã
äžãèŠãŠãã ããããã¡ã€ã«ã®å
容ã倿Žããäœãèµ·ãããã確èªããŸããã³ããããæåã§äœæããŸãããªããžããªãã©ãã ãç Žå£ã§ãããã確èªããŠãã ããããããä¿®æ£ããŸãã