Git mergeã®ä»çµã¿
git mergeãå®è¡ãããšãè£åŽã§ã¯äœãèµ·ããŠãã®ïŒ
ãŸãGitã¯2ã€ã®ãã©ã³ãã®ãå ±éç¥å ïŒCommon AncestorïŒããæ¢ããã ãäŸãã°mainããfeatureãã©ã³ããåã£ãå°ç¹ã®ã³ãããã ãããããããmainã§äœãå€ãã£ããããšãfeatureã§äœãå€ãã£ããããæ¯èŒããŠãäž¡æ¹ã®å€æŽãçµ±åããããããã3ãŠã§ã€ããŒãžïŒ3-way mergeïŒã£ãŠåŒã¶ãã ã
3ãŠã§ã€ããŒãžã®ã3ãã£ãŠäœã®ããšïŒ
æ¯èŒã«äœ¿ã3ã€ã®ããŒãžã§ã³ã®ããšã ããå ±éç¥å ïŒBaseïŒãããŒãžå ïŒOurs/mainïŒãããŒãžå ïŒTheirs/featureïŒã®3ã€ããªãå ±éç¥å ãå¿ èŠããšãããšã2ã€ã®ãã¡ã€ã«ã ãæ¯èŒããŠããã©ã£ã¡ã倿ŽããåŽãããããããªããããªãã ãå ±éç¥å ãšèŠæ¯ã¹ãããšã§ããmainãå€ããéšåããfeatureãå€ããéšåããäž¡æ¹å€ããéšåããæ£ç¢ºã«å€å®ã§ãããã
ãã¡ã¹ããã©ã¯ãŒãããŒãžã£ãŠããã®ãããããïŒæ®éã®ããŒãžãšäœãéãã®ïŒ
ãã¡ã¹ããã©ã¯ãŒãïŒfast-forwardïŒã¯ç¹æ®ãªã±ãŒã¹ã ããfeatureãã©ã³ããåã£ãåŸã«mainã«äœã倿Žããªãã£ãå Žåãmainã®ãã€ã³ã¿ãfeatureã®å é ã«ã¹ã©ã€ããããã ãã§æžããã ãããŒãžã³ãããã¯äœãããªããäžæ¹ãmainã«ã倿Žããã£ãå Žåã¯æ¬åœã®ããŒãžïŒtrue mergeïŒãè¡ãããŠã2ã€ã®èŠªãæã€ããŒãžã³ããããäœããããã
ã³ã³ããªã¯ãã£ãŠã©ããã£ãŠæ€åºããŠãã®ïŒ
3ãŠã§ã€ããŒãžã§ãåããã¡ã€ã«ã®åãè¡ãäž¡æ¹ã®ãã©ã³ãã倿Žãããå Žåã«ã³ã³ããªã¯ããèµ·ããããäŸãã°å ±éç¥å ã§ã¯3è¡ç®ããhelloãã ã£ãã®ã«ãmainã§ã¯ãHello Worldãã«ãfeatureã§ã¯ãããã«ã¡ã¯ãã«å€ããŠããããGitã¯ã©ã£ã¡ãæ¡çšããã°ãããããããªããããã§ã³ã³ããªã¯ãããŒã«ãŒïŒ<<<<<<<ã=======ã>>>>>>>ïŒãæ¿å ¥ããŠäººéã«å€æãå§ãããã ã
代衚çãªã®ã¯recursiveæŠç¥ïŒGit 2.33以åã®ããã©ã«ãïŒãšortæŠç¥ïŒGit 2.34以éã®ããã©ã«ãïŒã ããrecursiveã¯å ±éç¥å ãè€æ°ããå Žåã«ãç¥å å士ãååž°çã«ããŒãžããŠä»®æ³çãªå ±éç¥å ãäœããortïŒOstensibly Recursive's TwinïŒã¯recursiveã®æ¹è¯çã§ãåãçµæãããé«éã«åºããããããšoctopusæŠç¥ã¯3ã€ä»¥äžã®ãã©ã³ããäžåºŠã«ããŒãžã§ããç¹æ®ãªãã®ã ãã©ãã³ã³ããªã¯ããããå Žåã¯äœ¿ããªããã ã
ããŒãžãšãªããŒã¹ã£ãŠã©ãéãã®ïŒ
ããŒãžã¯ã2ã€ã®æµããåæµããããæäœã§ãå±¥æŽããã®ãŸãŸæ®ãããªããŒã¹ã¯ãfeatureã®ã³ããããmainã®å é ã«ä»ãæ¿ãããæäœã§ãçŽç·çãªå±¥æŽã«ãªãããå éšçã«ã¯ãªããŒã¹ã¯åã³ãããã1ã€ãã€cherry-pickïŒãããé©çšïŒããŠãããã ãããŒãžã³ããããæ®ãæ¹ãããŒã ã®äœæ¥å±¥æŽã远ãããããã©ããªããŒã¹ã®æ¹ãgit logããããã«ãªããããŒã ã®ã«ãŒã«æ¬¡ç¬¬ã ãã
æ¯ååãã³ã³ããªã¯ãã解決ããã®ãé¢åãªãã ãã©ãäœãããæ¹æ³ã¯ãªãã®ïŒ
rerereïŒReuse Recorded ResolutionïŒãšããæ©èœãããããgit config rerere.enabled trueã§æå¹ã«ãããšãã³ã³ããªã¯ãã®è§£æ±ºæ¹æ³ãGitãèšé²ããŠããããæ¬¡ã«åãã³ã³ããªã¯ããçºçãããšããååã®è§£æ±ºæ¹æ³ãèªåé©çšããŠããããã ãé·æé䞊è¡éçºããŠãããã©ã³ãã宿çã«ããŒãžãããããªã±ãŒã¹ã§ã¯ãããªãã®æéãçãããã
ããŒãžã³ãããã£ãŠæ¶ãã¡ããããªãã®ïŒ
ããŒãžã³ãããã¯ããã€ãã©ã®ãã©ã³ãããã©ã®ãã©ã³ãã«çµ±åãããããšããéèŠãªæ å ±ãæã£ãŠããããgit logã§--graphãªãã·ã§ã³ãã€ãããšããã©ã³ãã®åå²ãšåæµãèŠèŠçã«ããããã ããªããŒã¹ã§çŽç·ã«ããŠããŸããšãã®æ å ±ãæ¶ãããç¹ã«ãªãªãŒã¹ãã©ã³ããžã®ããŒãžã倧ããªfeatureã®çµ±åã§ã¯ãããŒãžã³ããããæ®ããŠãããæ¹ããã©ãã«æã«åå ã远ãããããgit bisectã§ãã°æ··å ¥ã³ããããæ¢ããšãããããŒãžã®å¢çãããããšå¹ççã ãã