æçµæŽæ°:
ãä»çµã¿è§£èª¬ãGitã¯ã©ããã£ãŠãã¡ã€ã«ã®å±¥æŽã管çããŠããã®ã â å éšæ§é ãå³è§£
Gitã£ãŠãã³ãããããšãããã©ã³ãããšããã䜿ããã©ãäžèº«ã¯ã©ããªã£ãŠãã®ïŒ
ãã質åã ããGitã®æ£äœã¯ããããžã§ã¯ããã©ã«ãã®äžã«ããã.gitãã£ãŠããé ããã©ã«ããªãã ããã®äžã«ãã¡ã€ã«ã®å
šå±¥æŽãããŒã¿ããŒã¹ã®ããã«ä¿åãããŠããã ãã
.gitãã©ã«ãã®äžã«ã¯äœãå
¥ã£ãŠãã®ïŒ
äžçªå€§äºãªã®ã¯ãobjectsããã©ã«ãã ããGitã¯äž»ã«3çš®é¡ã®ãªããžã§ã¯ãã§ãã¡ã€ã«å±¥æŽã管çããŠããã ããŸããblobãã¯ãã¡ã€ã«ã®äžèº«ãã®ãã®ããtreeãã¯ãã©ã«ãæ§é ã衚ããŠããŠãã©ã®blobãã©ã®ãã¡ã€ã«åããèšé²ããŠãããããŠãcommitãã¯treeã®ã¹ãããã·ã§ããã«ãäœæè
ãæ¥æãã³ãããã¡ãã»ãŒãžã1ã€åã®ã³ãããïŒèŠªïŒãžã®åç
§ãä»ãããã®ã ãããã®èŠªããã©ã£ãŠãããšå±¥æŽãèŠãããã ã
blobãtreeãcommitã®3ã€ã§å
šéšç®¡çããŠãã£ãŠããšïŒãããã·ã³ãã«ã ãïŒ
ãããªãã ãå®ã¯æ³šéä»ãã¿ã°çšã®ãtagããªããžã§ã¯ãããããã ãã©ãå±¥æŽã®éªšæ Œã¯ãã®3ã€ã ããããããªããžã§ã¯ãã¯ãå
容ããèšç®ããããã·ã¥å€ïŒéåžžã®ãªããžããªã§ã¯SHA-1ã®40æåã®è±æ°åïŒã§èå¥ãããŠããã ãåãäžèº«ã®blobã¯å¿
ãåãããã·ã¥ã«ãªããããéè€ãèªåçã«æé€ã§ããããããŒã¿ãå£ããŠãªãããæ€èšŒã§ãããgit logã§èŠãããa1b2c3d...ãã¿ãããªã®ããŸãã«ãã®ããã·ã¥ã ãã
ããããã©ã³ãã£ãŠäœãªã®ïŒãã¡ã€ã«ã®ã³ããŒãäœã£ãŠããããããªãããïŒ
éããïŒãã©ã³ãã®æ£äœã¯ãã ã®ããã€ã³ã¿ããªãã ãç¹å®ã®commitãªããžã§ã¯ãã®ããã·ã¥ãæã瀺ãã ãã®ããã¹ããã¡ã€ã«ã ãã.git/refs/heads/mainãèŠããšã40æåã®ããã·ã¥ã1è¡æžããŠããã ãïŒåç
§ã®æ°ãå¢ãããšããŸãšããŠ.git/packed-refsã«å
¥ãããšããããïŒãã ãããã©ã³ãã®äœæã¯äžç¬ã§ããã£ã¹ã¯å®¹éãã»ãŒäœ¿ããªããã ã
ãã£ããã£ã1è¡ã®ãã¡ã€ã«ãªã®ïŒïŒãããHEADã£ãŠããã®ã¯ïŒ
HEADã¯ãä»ã©ãã«ããããã瀺ããã€ã³ã¿ã ãããµã€ãã¯.git/HEADãã¡ã€ã«ã«ãref: refs/heads/mainãã®ããã«ãçŸåšãã§ãã¯ã¢ãŠãããŠãããã©ã³ããžã®åç
§ãæžãããŠãããã©ã³ããåãæ¿ãããšããã®åç
§å
ãå€ãã£ãŠãäœæ¥ãã©ã«ãã®ãã¡ã€ã«ãåãæ¿ãå
ã®å
å®¹ã«æŽæ°ããããã ãã¿ã°ãç¹å®ã®ã³ãããããã§ãã¯ã¢ãŠããããšãHEADã«ã³ãããã®ããã·ã¥ãçŽæ¥å
¥ããdetached HEADããšããç¶æ
ã«ãªããã
ããŒãžãããšãã¯äœãèµ·ããŠãã®ïŒ
ããŒãžã«ã¯äž»ã«2çš®é¡ãããããfast-forwardãã¯ãåã蟌ã¿å
ãäžçŽç·äžã«ãããšãããã©ã³ãã®ãã€ã³ã¿ããã®ãŸãŸå
ã«é²ããã ããæ°ããã³ãããã¯äœãããªããäžæ¹ã3-way mergeãã¯ã2ã€ã®ãã©ã³ããåå²ããŠããšããå
±éã®ç¥å
ã³ããããšäž¡æ¹ã®ææ°ã³ãããã®3ã€ãæ¯èŒããŠãæ°ãããããŒãžã³ãããããäœããã ã
rebaseã£ãŠããã®ãããããïŒããŒãžãšã©ãéãã®ïŒ
rebaseã¯ããã©ã³ãã®æ ¹å
ãä»ãæ¿ãããæäœã ããåå²å
ã®ã³ããããææ°ã«å€æŽããŠãèªåã®ã³ããããäžã€ãã€äœãçŽããã ãçµæãšããŠå±¥æŽãäžçŽç·ã«ãªã£ãŠãããã«ãªããã©ãã³ãããã®ããã·ã¥ãå
šéšå€ãããããå
±ææžã¿ã®ãã©ã³ãã§ãããšä»ã®äººãšè¡çªãããå人ã®äœæ¥ãã©ã³ãã§äœ¿ãã®ãå®å
šã ãã
ããééããŠresetãã¡ãã£ããã©ããããâŠïŒ
ãããªãšãã¯reflogãå©ããŠããããããgit reflogããå®è¡ãããšãèªåã®ãªããžããªã§HEADãéå»ã«æããŠããã³ãããã®å±¥æŽãèŠããããã ãresetãrebaseã§æ¶ããããã«èŠããã³ãããããreflogã«ã¯ãã°ããæ®ã£ãŠãïŒæ¢å®ã§ã¯ãã©ã®ãã©ã³ãããããã©ããªããªã£ããã®ã¯30æ¥ããã©ãããã®ã¯90æ¥ã§æéåãïŒããgit reset --hard HEAD@{2}ãã®ããã«ã2ååã®HEADããæå®ããã°æ»ãããããã ãreflogã¯æå
ã®ãªããžããªã ãã®èšé²ã§ããŸã ã³ãããããŠããªã倿Žã¯resetã§æ¶ãããšæ»ããªãããæ°ãã€ããŠãã
reflogãããã°å®å¿ã ãïŒGitã£ãŠèŠããªããšããã§ãããè³¢ãä»çµã¿ã«ãªã£ãŠããã ãªãã
ããã ããGitã®å
éšã¯ãäž»ãª3çš®é¡ã®ãªããžã§ã¯ããšããã·ã¥ããããŠãã€ã³ã¿ãšããã·ã³ãã«ãªä»çµã¿ã®çµã¿åãããªãã ããã®åºæ¬ãçè§£ããŠãããšããã©ã³ãæäœãããŒãžã§äœãèµ·ããŠããèŠããŠããŠããã©ãã«ã®å¯ŸåŠããã£ãšæ¥œã«ãªããã
è£è¶³
ããã·ã¥ã¯SHA-1ãæ¢å®ã§ãããSHA-256ã䜿ããªããžããªåœ¢åŒãžã®ç§»è¡èšç»ããããŸããGitã¯2017幎ã®SHAtteredæ»æåŸãGit 2.13.0以éã§æ»æãæ€åºãã匷åçSHA-1ãæ¢å®ã«ããŠããŸãããã©ã³ãã®äœæã¯ãã€ã³ã¿ã1ã€äœãã ãã§ãããåãæ¿ãã§ã¯äœæ¥ããªãŒã®ãã¡ã€ã«ãæžãæãããŸãããã®èšäºã¯å ¬åŒããã¥ã¡ã³ãã®èª¬æãããšã«ããæŠå¿µå³ã§ãå®éã®ãã¡ã€ã«é 眮ïŒããã¯ãã¡ã€ã«ãžã®å§çž®ãªã©ïŒã¯çç¥ããŠããŸãã
åèè³æ
ç¢ºèªæ¥ïŒ2026幎9æ21æ¥ã
- Pro GitïŒGit Objects â blobã»treeã»commitã®æ§é ã芪ã³ããããSHA-1ã«ãããªããžã§ã¯ãåã.git/objectsãžã®ä¿åã
- Pro GitïŒGit References â refs/headså ã®ãã©ã³ãã.git/HEADã®ãref: refs/heads/âŠã圢åŒãdetached HEADã
- git-reflog â ããŒã«ã«ã®åç §æŽæ°å±¥æŽãHEAD@{n}ãgc.reflogExpireïŒ90æ¥ïŒãšgc.reflogExpireUnreachableïŒ30æ¥ïŒã
- Git hash function transition â SHA-1ã®åŒ±ç¹ãšåŒ·åçSHA-1ãSHA-256ãžã®ç§»è¡èšç»ã