Git mergeã®ä»çµã¿ â å¥ã ã«çŽããã¡ã¢ãåãããŠã¿ãã
åãåºçºç¹ãããéã倿Žãåããã
ãŸãã¯ã2ã€ã®å€æŽãåããã
Gitã®çµ±åã¯ã以åã®å 容ãšããããã®å€æŽãèŠæ¯ã¹ããšããããçè§£ã§ããŸããGitã䜿ãããªããæ°ãã空ã®ç·Žç¿çšãã©ã«ããŒã§è©ŠããŸãããã以äžã¯Git BashïŒWindowsïŒãmacOS/Linuxã®shç³»ã·ã§ã«çšã§ãPowerShellãžãã®ãŸãŸè²Œãæé ã§ã¯ãããŸããã
git init -b main
git config user.name "Merge Demo"
git config user.email "demo@example.invalid"
printf 'drink=tea\n' > menu.txt
git add menu.txt
git commit -m "æåã®ã¡ã¢"
git switch -c feature
printf 'drink=juice\n' > menu.txt
git add menu.txt
git commit -m "飲ã¿ç©ã倿Ž"
git switch main
printf 'bring=ticket\n' > note.txt
git add note.txt
git commit -m "æã¡ç©ã远å "
git merge feature --no-edit
cat menu.txt note.txt
git log --oneline --graph --all
ã¡ã¢ã®çµæã¯æ¬¡ã®2è¡ã§ããå±¥æŽã®ã³ãããIDã¯ç°å¢ããšã«éããŸãã
drink=juice
bring=ticket
mainãfeatureãåå²åŸã«é²ãã ããããã®äŸã§ã¯äž¡åŽãèŠªã«æã€ããŒãžã³ããããã§ããŸããååãšã¡ãŒã«ã®èšå®ã¯ãã®ç·Žç¿çšãªããžããªå ã ãã®æå®ã§ããæ¢åã®ä»äºã®ãªããžããªã§ã¯è¡ããŸããã
å ±éç¥å ãš2ã€ã®å 端ãèŠã
å ±éç¥å ã§ã¯drink=teaã ãããããŸããfeatureã¯drink=juiceãžå€æŽããmainã¯note.txtã远å ããŸãããGitã¯äž¡æ¹ã®å€æŽãåãããŸããåã蟌ãåŽãšåã蟌ã¿å ã ãã§ãªãã以åã®å ±éã®å 容ã䜿ãããšã3ãŠã§ã€ã®åºæ¬ã§ãã
å±¥æŽãåçŽãªåå²ãªãå ±éç¥å ãåºçºç¹ãšèŠãããŸãããè€éãªçµ±åå±¥æŽã§ã¯è€æ°ã®åè£çããããŸããèªåçµ±åãããããšã ãã§ãçµã¿åãããããã°ã©ã ãæ£ããåãä¿èšŒã«ã¯ãªããŸããã
fast-forwardãšè¡çªãåãã
ä»ããå 端ãçžæã®å 端ã®ç¥å ãªããéåžžã®fast-forwardã§ã¯ãã©ã³ãã®åç §ãé²ããæ°ããªããŒãžã³ããããäœããŸãããâno-ffã§äœãéžæããããŸããâno-commitã ãã§ã¯fast-forwardãéäžã§æ¢ããããªãã®ã§ãæ€æ»çšã®æå®ã«ã泚æããŸãã
äž¡åŽãåãéšåãéãå€ãžå€ããå ŽåãGitã倿ã§ããè¡çªããããšããããŸããåé€ãšå€æŽçã§ãèµ·ãããŸããè¡çªããŒã«ãŒã¯ãã©ã¡ãããæ£ãããšããå€å®ã§ã¯ãããŸãããç®çã«åãå 容ãäœããå·®åãšåäœã確èªããŠããgit addãšgit merge âcontinueçãžé²ã¿ãŸãã
ããå°ã詳ããïŒäžæã»æŠç¥ã»rebase
éäžã®ããŒãžãäžæããgit merge âabortã¯ãéå§åã«æªã³ããã倿Žããããšå ãžå®å šã«æ»ããªãå ŽåããããŸããå ã«ã³ããããé©åãªéé¿ã§äœæ¥ãæŽçããgit statusã§ç¶æ ã確ãããŸãã
éåžžã®2å 端ã®çµ±åã¯ortãæ¢å®ã§ããGit 2.50以éã®recursiveãšããååã¯ortã®å矩ã§ããå€ãç¬ç«ããrecursiveã®æ§èœèª¬æãããã®ãŸãŸçŸè¡çãžåœãŠã¯ããŸããã-X oursãšããè¡çªæã®éžæãšãçžæã®æšãç¡èŠããoursæŠç¥ãå¥ã§ãã
rebaseã¯å€æŽãå¥ã®åºç¹ãžåé©çšããéåžžã³ãããIDãå€ãããŸããå ±æããå±¥æŽã«è¡ãå Žåã¯ããŒã ã®æé ã確èªããŸããrerereã¯ä»¥åã®è§£æ±ºãåå©çšããå©ãã§ãããåé©çšãããå 容ã確èªããŸãã
ð§ ãã³ã®ã³å çã®ãŸãšãïŒãGit mergeãã£ãŠåºãŠããããå ±éã®åã®çãèŠãªãããå¥ã ã®å€æŽãåãããããšããšæãã°ã ãããOKïŒ
åºæ¬æäœã¯Gitå ¥éãæ¥ã ã®æ€èšŒã¯GitHub Actionså ¥éã§ç¶ããŠèŠãŠã¿ãŸãããã
åèè³æ
- GitïŒgit merge â 3ãŠã§ã€ã»fast-forwardã»è¡çªã»abortã»çŸè¡ã®æŠç¥
- GitïŒgit rebase â åé©çšãšå ±æå±¥æŽã®æ¡ä»¶
- GitïŒgit rerere â 以åã®è¡çªè§£æ±ºã®åå©çšãšç¢ºèª