ð ãã®èšäºã¯ Zenn ã«æçš¿ããå 容ã®ã¢ãŒã«ã€ãã§ãã
ã¯ããã«
Git ã䜿ã£ãŠããŠããããªæèŠã«ãªã£ãããšã¯ãããŸãããïŒ
ã³ãã³ãã¯æãŠããã©ãäœãèµ·ããŠãããåãããªã
merge ãš rebase ã®éããã説æãããšèšããããšè©°ãŸã
conflict ãåºããšããªãè¡çªããã®ãçè§£ã§ããªã
å€ãã® Git 解説èšäºã¯ã
ãäœãæã€ãã ã¯äžå¯§ã«æããŠãããŸããã
ããªããããªããã ãŸã§ã¯èžã¿èŸŒãã§ãããŸããã
ãã®çµæã
ãªããšãªã䜿ããŠããããä»çµã¿ã¯ããåãããªã
ãšããç¶æ ã«é¥ããã¡ã§ãã
ãã®èšäºã§ã¯ãã³ãã³ãã®èª¬æã¯ã»ãŒè¡ããŸããã
代ããã«ãGit ã®å
éšæ§é ãããŒã¿æ§é ãšããŠæãçŽã ããšã§ã
ãããããããããšã ã£ãã®ãã
ãšè ã«èœã¡ãçè§£ãç®æããŸãã
å°ãã ã ã°ã©ãçè« ãš ãã€ã³ã¿ã®æŠå¿µïŒC èšèªïŒ ã®çŽ é€ããããšã
ããªãã¹ã ãŒãºã«çè§£ã§ãããšæããŸãã
Git ã®æ£äœïŒæšæ§é ã§ã¯ãªã DAGïŒæåéå·¡åã°ã©ãïŒ
å€ãã®äººã¯ãGit ã®å±¥æŽããæšæ§é ããšããŠã€ã¡ãŒãžããŠããŸãã
ããããããã¯æ£ç¢ºã§ã¯ãããŸããã
Git ã®æ¬è³ªã¯ æåéå·¡åã°ã©ãã§ãã
Commit ã¯ãããŒãã
ãã¹ãŠã® commit ã¯ãã°ã©ãäžã® ããŒã ã§ãã
å commit ã¯ã
ãã¡ã€ã«ã®ã¹ãããã·ã§ãã
芪 commit ãžã®åç §ïŒ1 åãŸã㯠2 åïŒ
ãæã£ãŠããŸãã
芪ã 2 åã«ãªãç¬é = merge
éåžžã® commit ã¯èŠªã 1 ã€ã§ããã
merge commit 㯠芪ã 2 〠æã¡ãŸãã
ãã®æ§é ã«ãã£ãŠãGit ã®å±¥æŽã¯ æšã§ã¯ãªã DAG ã«ãªããŸãã
branch ãš HEAD ã®æ£äœã¯ããã ã®ãã€ã³ã¿ã
Git ãé£ããæããããŠããæå€§ã®åå ã¯ã
branch ãšããèšèã®ã€ã¡ãŒãžã§ãã
å€ãã®äººã¯ branch ããåå²ããå¥ã«ãŒããã ãšèããŸããã
å®éã«ã¯ããã§ãïŒ
branch ã¯åãªã commit ãžã®ãã€ã³ã¿
branch = ååä»ããã€ã³ã¿
main -> C5
ããã¯ã
ãmain ãšããååã commit C5 ãæããŠããã
ãšããæå³ã§ãããããŸããã
branch èªäœã«ã¯ãå±¥æŽãæ§é ãååšããŸããã
HEAD ã¯ããã€ã³ã¿ãžã®ãã€ã³ã¿ã
ããã«æ··ä¹±ãæãååšã HEAD ã§ãã
HEAD 㯠commit ãçŽæ¥æããŠããã®ã§ã¯ãããŸããã
HEAD -> branch -> commit
ã€ãŸãã
HEAD 㯠branch ãæããã€ã³ã¿
ã§ãã
ããšãã°ïŒ
HEAD -> main -> C5
ãã®ç¶æ ã§ commit ãããšã
æ°ãã commit C6 ãçæããã
main ã C6 ãæã
HEAD ã¯åŒãç¶ã main ãæã
ãšãã æ¥µããŠåçŽãªãã€ã³ã¿æäœ ãè¡ãããŠããŸãã
Git ã®æäœãããã€ã³ã¿æäœããšããŠæãã
ãããŸã§çè§£ã§ãããšãGit ã®åã³ãã³ãã¯
ãã¹ãŠ ãã€ã³ã¿ã®ä»ãæ¿ã ãšããŠèª¬æã§ããŸãã
git init
空㮠DAG ãçæããã ã
ãŸã commit 㯠1 ã€ãååšããªã
git clone
ä»äººã® DAG ãäžžããšã³ããŒããŠãã
ããŒã«ã«ãšãªã¢ãŒãã®æ§é 㯠å®å
šã«åäž ã§ãã
å¯äžã®éãã¯ïŒ
ãªã¢ãŒã branch ã«ã¯
origin/ãšããæ¥é èŸãä»ã
ã ãã§ãã
git add
ãã¡ã€ã«å·®åã HEAD ã«èšé²ãã
commit ã§ã¯ãããŸããã
ãããŸã§ ãæ¬¡ã® commit ã«å«ããå·®åã HEAD ã«ç©ãã æäœã§ãã
â» æ£ç¢ºã«ã¯ index ã¯æ¬¡ã³ãããã®ã¹ãããã·ã§ããã§ããã
git add ã¯å·®åãç©ããšããããããã®ã¹ãããã·ã§ãããæŽæ°ããŠããã
git commit
HEAD ãä¿æããŠããå·®åã䜿ã£ãŠãæ°ããããŒããçæãã
ãã㊠branch ããã®ããŒããžç§»åããã
git reset
branch ã®æã commit ããå¥ã®ããŒããžä»ãæ¿ãã
å±¥æŽãæžãæããããã«èŠããã®ã¯ã
ãã€ã³ã¿ãéå»ãžåãããŠããã ã ã§ãã
git checkout
HEAD ãæã branch ãåãæ¿ãã
ã€ãŸãã
HEAD -> main
HEAD -> dev
ã®ä»ãæ¿ãæäœã«éããŸããã
git push / pull ãåããã«ããçç±
push / pull ãåããã¥ããåå ãã
ãæ§é ãèŠãŠããªããããšã«ãããŸãã
æ¬è³ªã¯ããã ã
ããŒã«ã«ãšãªã¢ãŒãã® branch ãã
ã©ã® commit ãæããŠãããã®åé¡
fast-forward ãšã¯ïŒ
ããŒã«ã«ãšãªã¢ãŒãã® commit ã åäžã®å±¥æŽç·äž ã«ããå ŽåïŒ
A - B - C - D
â
remote
A - B - C - D - E - F
â
local
ãã®ãšã push ãããšïŒ
E, F ããªã¢ãŒããžã³ããŒ
ãªã¢ãŒã branch ã F ãžç§»å
ããã fast-forward ã§ãã
merge ãçºçããæ¡ä»¶
äž¡è ã®å±¥æŽã åå²ããŠããå Žå ïŒ
D - E (local)
/
A - B - C
\
F - G (remote)
ãã®å Žåã
ã©ã¡ãã®å ã«é²ãã¹ããèªåã§æ±ºããããªã
ãããmerge commit ãçæ ããŸãã
rebase ã®æ£äœïŒæããä»ãæ¿ãããã ã
rebase ã¯é£ããæããããã¡ã§ããã
æ§é ãšããŠã¯ãšãŠãåçŽã§ãã
D - E (local)
/
A - B - C
\
F - G (remote)
ããã rebase ãããšïŒ
A - B - C - F - G - D - E
ãã£ãŠããããšã¯ïŒ
å ±éç¥å 以éã®ããŒã«ã«åŽã®æãåãèœãšãã
ãã®ãŸãŸçžæã®å 端ã«ã€ãªãçŽã
ã ãã§ãã
â» å éšçã«ã¯ commit ãä»ãæ¿ããã®ã§ã¯ãªããå·®åãåé©çšããæ°ãã commit ãçæããŠããã
conflict ã®æ£äœ
conflict ãçºçããæ¡ä»¶ãéåžžã«æå¿«ã§ãã
åäž commit ç¥å ããåå²ãã
åããã¡ã€ã«ã®åãè¡ããå¥ã ã«å€æŽãã
ãã®å ŽåãGit ã¯ïŒ
ãã©ã¡ããæ£ããã倿ã§ããªãã
ããã人éã«æ±ºæãå§ãã ã ãã§ãã
æ§é çã«ã¯ã
ãæ°ãã commit ãäœãåã«ã人åã§å·®å解決ãèŠæ±ãããŠããã
ãšããç¶æ
ã§ãã
ãã¹ãŠã¯ DAG ãšãã€ã³ã¿æäœ
ãããŸã§èŠãŠããéããGit ã®ãã¹ãŠã®æåã¯ïŒ
DAG æ§é
ãã€ã³ã¿ã®ä»ãæ¿ã
ãã® 2 ã€ã§ å®å šã«èª¬æå¯èœ ã§ãã
ã³ãã³ããäžžæèšãããããã
ãä»ãã©ã®ãã€ã³ã¿ãã©ããæããŠããã®ãã
ãæèããæ¹ãã
å§åçã«ãã©ãã«å¯Ÿå¿åãäžãããŸãã
ãŸãšãïŒGit ã¯é£ãããªããèŠãã¥ããã ã
Git ã¯æ±ºããŠè€éãªããŒã«ã§ã¯ãããŸããã
é£ããæããçç±ã¯ãã äžã€ïŒ
å éšæ§é ãå¯èŠåãããŠããªããã
ã§ãã
DAG ãšãã€ã³ã¿æ§é ã§çè§£ã§ããç¬éã
branch
HEAD
merge
rebase
reset
checkout
ãããã¯ãã¹ãŠ
èªç¶ã«èª¬æã§ããåçŽæäœ ã«å€ãããŸãã
ããä»ãŸã§ Git ãããªããšãªãã䜿ã£ãŠãããªãã
ãã²äžåºŠãæ§é ããèããèŠç¹ ãæã£ãŠã¿ãŠãã ããã
ããããã
Git ã«å¯Ÿããã¹ãã¬ã¹ãäžæ®µéã確å®ã«äžããã¯ãã§ãã