ã¯ããã«
ããã©ãŒæ©èœãSLE Gitã¯è»œéãã©ã³ãã§ãããšèããããŠããŸãã SVNã§Gitã«åãæ¿ããã®ã§ããã®å©ç¹ãæå€§éã«æããŸããããã©ã³ãã¯éåžžã«é«äŸ¡ãªããã»ã¹ã§ããããã©ã³ããäœæããã«ã¯ãäœæ¥ãã£ã¬ã¯ããªå
šäœãã³ããŒããå¿
èŠããããŸããã Gitã§ã¯ãã¹ãŠãã·ã³ãã«ã§ãããã©ã³ããäœæãããšããããšã¯ã 
.git/refs/headsãã©ã«ããŒå
ã®ç¹å®ã®ã³ããããžã®æ°ãããã€ã³ã¿ãŒã®ã¿ãäœæããããšãæå³ããŸãã
Gitã§åå²ããããã®äž»ãªãŠãŒã¶ãŒã¬ãã«ã®ã³ãã³ãã¯ãgit-branchãgit-checkoutãgit-rebaseãgit-logããããŠãã¡ããgit-mergeã§ãã ç§ã«ãšã£ãŠã¯ãgit-mergeãæã倧ããªè²¬ä»»ã®ãããŸãŒã³ã§ããã巚倧ãªéæ³ã®ãšãã«ã®ãŒãšå€§ããªãã£ã³ã¹ã®ãã€ã³ãã ãšèããŠããŸãã ããããããã¯ããªãè€éãªããŒã ã§ãããGitã®ããªãé·ãçµéšã§ããããã®åŸ®åŠãªç¹ãç°åžžãªç¶æ³ã§æã广çã«é©çšããèœåãç¿åŸããã«ã¯äžååãªå ŽåããããŸãã
git-mergeã®è€éããçè§£ãããã®çŽ æŽãããéæ³ã飌ãæ
£ãããŠã¿ãŸãããã
ããã§ã¯ã 
å䜵ã
æåããå Žåã®ã¿ãèã
ãŸããã€ãŸã
ã ç«¶åã®ãªãå䜵ãæå³ã
ãŸãã ç«¶åã®åŠçãšè§£æ±ºã¯ãå¥ã®èšäºã«ãµããããè峿·±ããããã¯ã§ãã 
Git internalsïŒdata storage and mergeã®èšäºãèªãããšã匷ããå§ãããŸãããã®èšäºã«ã¯ãç§ãäŸåããŠããå€ãã®éèŠãªæ
å ±ãå«ãŸããŠããŸãã
ããŒã ã®è§£ååŠ
ããã¥ã¢ã«ã«ãããšãã³ãã³ãã®æ§æã¯æ¬¡ã®ãšããã§ãã
 
  git merge [-n] [--stat] [--no-commit] [--squash] [-[no-] edit] 
  [-s <æŠç¥>] [-X <æŠç¥ãªãã·ã§ã³>] 
  [-[no-] rerere-autoupdate] [-m <msg>] [<commit> ...] 
  git merge <msg> HEAD <commit> ... 
  git merge --abort 
 
æŠããŠãGitã«ã¯2ã€ã®ã¿ã€ãã®ããŒãžããããŸããæ©éãããŒãžãšçã®ããŒãžã§ãã äž¡æ¹ã®ã±ãŒã¹ã®ããã€ãã®äŸãèããŠã¿ãŸãããã
çã®ããŒãž
ããã€ãã®æ¹å
ãã°ãå°å
¥ããããã«ãmasterãã©ã³ãããéžè±ããŠããŸãã ã³ãããã®å±¥æŽã¯æ¬¡ã®ãšããã§ãã
 
  ãã¹ã¿ãŒïŒA-B-C-D 
                   \ 
  æ©èœïŒX-Y 
 
ãã¹ã¿ãŒ
git merge featureãã©ã³ãã§å®è¡ããŸãã
 
  ãã¹ã¿ãŒïŒA-B-C-D-ïŒMïŒ 
                   \ / 
  æ©èœïŒX-Y 
 
ããã¯æãäžè¬çãªããŒãžãã¿ãŒã³ã§ãã ãã®å Žåãmasterãã©ã³ãã«æ°ããã³ãããïŒMïŒãäœæãããŸããããã¯2ã€ã®èŠªãåç
§ããŸãïŒã³ãããDãšã³ãããYã ãã¹ã¿ãŒãã€ã³ã¿ãŒã¯ã³ãããïŒMïŒã«èšå®ãããŸãã ãã®ããã«ããŠãGitã¯ã©ã®å€æŽãã³ãããïŒMïŒã«å¯Ÿå¿ããã©ã®ã³ããããmasterãã©ã³ãã®æåŸã§ããããçè§£ããŸãã éåžžãããŒãžã³ãããã¯ãMerge branch 'feature'ããªã©ã®ã¡ãã»ãŒãžã§è¡ãããŸããã 
-mã¹ã€ããã䜿çšããŠç¬èªã®ã³ãããã¡ãã»ãŒãžãå®çŸ©ããããšãã§ããŸãã
ãã®ã±ãŒã¹å°çšã«äœæãããã¹ããªããžããªã§ã³ãããã®å±¥æŽãèŠãŠã¿ãŸãããã
 
  $ git log --oneline 
  92384bdïŒMïŒ 
  bceb5a4 D 
  5dce5b1 Y 
  76f13e7 X 
  d1920dc C 
  3a5c217 B 
  844af94 A 
 
次ã«ãã³ãããæ
å ±ïŒMïŒãèŠãŠã¿ãŸãããã
 
  $ git cat-file -p 92384bd 
  ããªãŒ2b5c78f9086384bd86a2ab9d00c7e41a56f01d04 
  芪bceb5a4ad88e80467404473b94cââ3e0758dd8e0be 
  芪5dce5b1edef64bd0d4e1039061a77be4d7182678 
  èè
Andre <andrey.prokopyuk@gmail.com> 1380475972 +0400 
  ã³ããã¿ãŒã¢ã³ãã¬<andrey.prokopyuk@gmail.com> 1380475972 +0400 
  ïŒMïŒ 
 
2ã€ã®èŠªããªããžããªãã¡ã€ã«ã®æå®ãããç¶æ
ã«å¯Ÿå¿ããããªãŒãªããžã§ã¯ããããã³ã³ããããã人ã«é¢ããæ
å ±ã衚瀺ãããŸãã
ãã¹ã¿ãŒãã€ã³ã¿ãŒãåç
§ããå ŽæãèŠãŠã¿ãŸãããã
 
  $ cat .git / refs / heads / master 
  92384bd77304c09b81dcc4485da165923b96ed5f 
 
å®éãã³ãããã«ããã·ã¥ãããŸãïŒMïŒã
ã¹ã«ãã·ã¥ãšããŒã³ããã
ããããæ©èœãã©ã³ãã®å
容ãããªããæã¡è² ããããšãã§ãããšãããã©ãã§ãããïŒ ããšãã°ãæ¹åã¯å°ããã1ã€ã®è«ççãªã³ãããã«ããŸãé©åããããšãã§ããŸããããä»äºã®æäžã«åè»ã«éããŠå®¶ã§ç¶ããªããã°ãªããªãã£ãããšã倿ããŸãããïŒ ãã®å Žåã2ã€ã®æ¹æ³ããããŸãïŒãªããžããªããšã¯ã¹ããŒãããŠããå¥ã®ãã·ã³ã«ã€ã³ããŒãããããïŒç¹ã«é»è»ã«è¡ãã®ã«10åããããé§
ãŸã§çŽ1ãããããå ŽåïŒ- 
push origin featureäœæã
push origin feature ã
äžå®å
šãªã³ããããã¡ã€ã³ãã©ã³ãã«æ³šãããšã¯æªãããšã§ãããããªãã¯ããã«ã€ããŠäœããããå¿
èŠããããŸãã 1ã€ã®æ¹æ³ããããŠããããæãç°¡åãªæ¹æ³ã¯ã 
--squashãªãã·ã§ã³ã§ãã
git merge feature --squashã¯ãæ©èœãã©ã³ãã®ãã¹ãŠã®ã³ãããã®å€æŽã
git merge feature --squashãããããã¹ã¿ãŒãã©ã³ãã«è»¢éããŠãã€ã³ããã¯ã¹ã«è¿œå ããŸãã ãã®å Žåã 
ããŒãžã³ãããã¯äœæãããŸãã ãæåã§è¡ãå¿
èŠããããŸãã
ããŒãžæã«
--no-commitãã©ã¡ãŒã¿ãŒãæž¡ãããšã«ãããsquashãã©ã¡ãŒã¿ãŒãªãã§åãåäœãå®çŸã§ããŸãã
ãã®ããŒãžãé©çšãããå Žåãæ©èœãã©ã³ãã®ã³ãããã¯å±¥æŽã«å«ãŸããŸããããSqã³ãããã«ã¯ãã¹ãŠã®å€æŽãå«ãŸããŸãã
 
  ãã¹ã¿ãŒïŒA-B-C-D-å¹³æ¹ 
                   \  
  æ©èœïŒX-Y 
 
åŸã§ããã¯ã©ã·ãã¯ã 
git merge featureãå®è¡ããå Žå
git merge featureãããä¿®æ£ã§ããŸãã ãã®åŸãã¹ããŒãªãŒã¯æ¬¡ã®åœ¢åŒã«ãªããŸãã
 
  ãã¹ã¿ãŒïŒA-B-C-D-Sq-ïŒMïŒ 
                   \ / 
  æ©èœïŒX-Y 
 
ã³ãããããã«ããŒãžããèŽåœçãªãšã©ãŒãç¯ããããšã«æ°ä»ããå ŽåãåçŽãªã³ãã³ã
git merge --abortãã¹ãŠãåãæ¶ãããšãã§ããŸãã å䜵äžã«ç«¶åãçºçããå Žåã§ãåãã³ãã³ããé©çšã§ããŸãããçŸæç¹ã§ã¯ç«¶åã解決ããããªãã§ãããã
å·»ãæ»ãïŒæ©éãããŒãžïŒ
ã³ãããå±¥æŽã®å¥ã®ã±ãŒã¹ãèããŠã¿ãŸãããã
 
  ãã¹ã¿ãŒïŒA-B-C 
                   \ 
  æ©èœïŒX-Y 
 
ãã¹ãŠã¯ååãšåãã§ããããã¹ã¿ãŒãã©ã³ãã«ã¯ãã©ã³ãåŸã®ã³ãããã¯ãããŸããã ãã®å Žåãæ©éãããŒãžïŒå·»ãæ»ãïŒã ãã®å ŽåãããŒãžã³ãããã¯ãªãããã€ã³ã¿ãŒïŒãã©ã³ãïŒãã¹ã¿ãŒã¯åã«Yãã³ãããããããã«èšå®ãããæ©èœãã©ã³ãããããæããŸãã
 
  ãã¹ã¿ãŒãæ©èœïŒA-B-C-X-Y 
 
å·»ãæ»ããé²ãã«ã¯ã 
--no-ffãªãã·ã§ã³ã䜿çšã§ããŸãã
git merge feature --no-ff -m '(M)'ãå®è¡ããå Žåãæ¬¡ã®å³ã衚瀺ãããŸãã
 
  ãã¹ã¿ãŒïŒA-B-C-ïŒMïŒ 
                   \ / 
  æ©èœïŒX-Y 
 
æ©éããå¯äžèš±å®¹ãããåäœã§ããå Žåã 
--ff-onlyãªãã·ã§ã³ãæå®ã§ããŸãã ãã®å Žåãå·»ãæ»ããããŒãžã«é©çšã§ããªãå ŽåãããŒãžãäžå¯èœã§ããããšã瀺ãã¡ãã»ãŒãžã衚瀺ãããŸãã æåã®äŸã§
--ff-onlyãªãã·ã§ã³ã远å ããå Žåã«
--ff-onlyãŸãããã®äŸã§ã¯ãæ©èœãåå²ããåŸããã¹ã¿ãŒãã©ã³ãã§ã³ãããCãäœæãããŸããã
git pull origin branch_nameãå®è¡ãããšã 
--ff-onlyãããªãã®
--ff-onlyããšã远å ã§ããŸãã ã€ãŸããorigin / branch_nameãã©ã³ããšããŒãžãããšãã«å·»ãæ»ããåãå
¥ããããªãå Žåãæäœã¯ãã£ã³ã»ã«ãããå®è¡ã§ããªãããšã«é¢ããã¡ãã»ãŒãžã衚瀺ãããŸãã
å䜵æŠç¥
git-mergeããŒã ã«ã¯ã-- 
--strategy ãã¹ãã©ããžãŒãšããè峿·±ããªãã·ã§ã³ããããŸãã Gitã¯æ¬¡ã®ããŒãžæŠç¥ããµããŒãããŠããŸãã
- 解決ãã
 - ååž°ç
 - ç§ãã¡ã®ãã®
 - ãã
 - ãµãããªãŒ
 
æŠç¥ã解決ãã
解決æŠç¥ã¯ãåŸæ¥ã®3è
éããŒãžã§ãã æšæºã®3è
éããŒãžã¢ã«ãŽãªãºã ã¯ãå
±éã®ç¥å
ãæã€2ã€ã®ãã¡ã€ã«ã«äœ¿çšãããŸãã åŸæ¥ããã®ã¢ã«ãŽãªãºã ã¯æ¬¡ã®æé ã®åœ¢åŒã§è¡šãããšãã§ããŸãã
- å
±éã®ç¥å
ãæ€çŽ¢ãã
 - å
±éã®ç¥å
ã«é¢ããŠäž¡æ¹ã®ããŒãžã§ã³ã§å€æŽããããããã¯ãæ€çŽ¢ãã
 - 倿ŽãããªããŸãŸã®ãããã¯ãèšé²ãããŸãã
 - åå«ã®1ã€ã§ã®ã¿å€æŽããããããã¯ã¯å€æŽæžã¿ãšããŠèšé²ããã
 - äž¡æ¹ã®ããŒãžã§ã³ã§å€æŽããããããã¯ã¯ã倿Žãåäžã§ããå Žåã«ã®ã¿èšé²ãããŸãããã以å€ã®å Žåãç«¶åã宣èšããããã®è§£æ±ºããŠãŒã¶ãŒã«æäŸãããŸãã
 
ãã®æŠç¥ã«ã¯1ã€ã®æ¬ ç¹ããããŸããæåã®å
±éã³ããããåžžã«2ã€ã®ãã©ã³ãã®å
±éã®ç¥å
ãšããŠéžæãããŸãã æåã®äŸã®å Žåãããã¯æããããŸãã
git merge feature -s resolveå®å
šã«äœ¿çšã§ããçµæãæåŸ
ãããŸãã
 
  ãã¹ã¿ãŒïŒA-B-C-D-ïŒMïŒ 
                   \ / 
  æ©èœïŒX-Y 
 
ããã§ãCã¯2ã€ã®ãã©ã³ãã®å
±éã³ãããã§ããããã®ã³ãããã«å¯Ÿå¿ãããã¡ã€ã«ããªãŒãå
±éã®ç¥å
ãšèŠãªãããŸãã ãã®ã³ããã以éã«ãã¹ã¿ãŒããã³æ©èœãã©ã³ãã§è¡ããã倿Žãåæããããã®åŸãæ¡ä»¶ä»ãã¢ã«ãŽãªãºã ã®ãã©ã°ã©ã4ããã³5ã«åŸã£ãŠãã³ãããïŒMïŒã®æ°ããããŒãžã§ã³ã®ãã¡ã€ã«ããªãŒãäœæãããŸãã
ã©ã®ãããªå Žåã解決æŠç¥ã®æ¬ åŠãçŸããŸããïŒ ã³ãããïŒMïŒã§ç«¶åã解決ããå¿
èŠãããããã®åŸéçºãç¶ç¶ããããäžåºŠ
git merge feature -s resolveãå®è¡ãããå Žåã«çŸã
git merge feature -s resolve ã ãã®å Žåãã³ãããCã¯åã³å
±éã®ç¥å
ãšããŠäœ¿çšãããç«¶åãåã³çºçããä»å
¥ãå¿
èŠã«ãªããŸãã
ååž°çæŠç¥
ãã®æŠç¥ã¯ã解決æŠç¥ã®åé¡ã解決ããŸãã ãŸãã3è
éããŒãžãå®è£
ããŸãããå®éã®ããŒãžã§ã¯ãªããæ¬¡ã®æ¡ä»¶ä»ãã¢ã«ãŽãªãºã ã«åŸã£ãŠæ§ç¯ããããä»®æ³ãç¥å
ãç¥å
ãšããŠäœ¿çšãããŸãã
- å
±éã®ç¥å
ã®ãã¹ãŠã®åè£ãæ€çŽ¢ããã
 - ãã§ãŒã³ã¯åè£ãããŒãžããæ°ãããä»®æ³ãç¥å
ãäœæããŸããæè¿ã®ã³ãããã®åªå
床ãé«ããªããç«¶åã®åçŸãåé¿ãããŸãã
 
ãã®è¡åã®çµæã¯å
±éã®ç¥å
ãšã¿ãªãããäžåœéå䜵ãè¡ãããŸãã
ãã®æŠç¥ã説æããããã«ãplasticscmããã°ã®èšäº
Merge recursive strategyããäŸãåããŸãããã

ãããã£ãŠãmainãštask001ã®2ã€ã®ãã©ã³ãããããŸãã ãããŠãéçºè
ã¯åé¯ã®è¯ã倿è
ã§ããããšã倿ããŸããïŒåœŒãã¯mainãã©ã³ãã®commit 15ãštask001ãã©ã³ãã®commit 12ãããã³commit 16ãšcommit 16ãããŒãžããŸããã ããããããä»®æ³ãç¥å
ã®æ§ç¯ã䌎ãååž°çæŠç¥ã¯ç§ãã¡ãå©ããŸãã ãã®çµæã次ã®å³ãåŸãããŸãã

ååž°æŠç¥ã«ã¯ã 
-Xã¹ã€ããã䜿çšããŠ
git-mergeã³ãã³ãã«æž¡ãããå€ãã®ãªãã·ã§ã³ããããŸãã
- ç§ãã¡ãšåœŒãã®ãã®
ç«¶åãèªåçã«è§£æ±ºããããã«äœ¿çšãããŸãã ç§ãã¡ã®ãã®-ãç§ãã¡ã®ãããŒãžã§ã³ããdstãã®ããŒãžã§ã³ã圌ãã®ãã®ã奜ã-ã圌ãã®ãããŒãžã§ã³ã奜ãã
 - 忣èŠåïŒéæ£èŠåïŒ
ãªãã·ã§ã³ãããŸããŸãªã¿ã€ãã®ã©ã€ã³ãã£ãŒããšããŒãžããéã®èª€ã£ãç«¶åãé²ããŸãã
 - diff-algorithm = [patience | minimal | histogram | myers] ãããã³å¿èãªãã·ã§ã³
ãã¡ã€ã«å·®å¥åã¢ã«ãŽãªãºã ã®éžæã
ãããã®ãªãã·ã§ã³ã®è©³çްã«ã€ããŠã¯ã git-diffã®ããã¥ã¡ã³ããã芧ãã ããã ã€ãŸãããããã®ã¢ã«ãŽãªãºã ã®ããããã£ã¯æ¬¡ã®ãšããã§ãã
ããã©ã«ãã§ã¯ãmyersã¯æšæºã®è²ªæ¬²ãªã¢ã«ãŽãªãºã ã§ãã ããã©ã«ãã§äœ¿çšãããŸãã
æå° -æå°éã®å€æŽãæ€çŽ¢ããŸãããæéãããããŸãã
å¿è -ãpatience diffãã¢ã«ãŽãªãºã ã䜿çšããŸãã ããã«ã€ããŠã¯ãã¢ã«ãŽãªãºã ã®äœè
ãã ããŸãã¯SOã®ç°¡ç¥çã§èªãããšãã§ããŸãã
ãã¹ãã°ã©ã  -ãäœé »åºŠã®å
±éèŠçŽ ããµããŒãããããšèšè¿°ãããŠããç®æšã§å¿èã¢ã«ãŽãªãºã ãæ¡åŒµããŸãã æ£çŽã«èšããšãã©ã®ãããªå
·äœçãªã±ãŒã¹ãæç€ºãããŠããããšãã質åã«å¯Ÿããæç¢ºãªçããèŠã€ããããšãã§ããŸããã§ããã
 - ã¹ããŒã¹ã®å€æŽãç¡èŠããã¹ãŠã®ã¹ããŒã¹ãç¡èŠãeolã®ã¹ããŒã¹ãç¡èŠ
ãããã®ãªãã·ã§ã³ã®ã«ãŒãã¯ããã¯ãgit-diffã«ãããããŒãžäžã®ãã¡ã€ã«ã®åºå¥ã«é¢é£ããŠããŸãã
ignore-space- change-è¡ã®ã¹ããŒã¹ã®æ°ã®éããããã³è¡æ«ã®ã¹ããŒã¹ã®éããç¡èŠããŸãã
ignore-all- space-æ¯èŒæã«ã¹ããŒã¹ã¯å®å
šã«ç¡èŠãããŸããã
ignore-space-at-eol-è¡æ«ã®ã¹ããŒã¹ã®éãã¯ç¡èŠãããŸãã
 - rename-threshold = <n>
ãã®ãªãã·ã§ã³ã¯ããã¡ã€ã«ãæ°ãããã¡ã€ã«ã§ã¯ãªããgit-diffãã«ãŠã³ããããªãã£ãååã倿Žããããã¡ã€ã«ãšèŠãªãããšãã§ãããããå€ãèšå®ããŸãã ããšãã°ã -Xrename-threshold=90%ã¯ãåé€ããããã¡ã€ã«ã®å
容ã®90ïŒ
ãå«ããã¡ã€ã«ãåå倿ŽããããšèŠãªãããããšãæå³ããŸãã
 - ãµãããªãŒ[= <ãã¹>]
ãã®ãªãã·ã§ã³ã䜿çšããŠååž°ããŒãžãå®è¡ãããšããµãããªãŒæŠç¥ã®ããé«åºŠãªããŒãžã§ã³ã«ãªããŸããã¢ã«ãŽãªãºã ã¯ãããŒãžäžã«ããªãŒãã©ã®ããã«é©åããããšããä»®å®ã«åºã¥ããŠããŸãã 代ããã«ããã®å Žåãç¹å®ã®ãªãã·ã§ã³ã瀺ãããŸãã
 
ã¿ã³æŠç¥
ãã®æŠç¥ã¯ã3ã€ä»¥äžã®ãã©ã³ããããŒãžããããã«äœ¿çšãããŸãã çµæãšããŠãã³ãããã«ã¯3ã€ä»¥äžã®èŠªãå«ãŸããŸãã
ãã®æŠç¥ã«ã¯ãæœåšçãªç«¶åã«é¢ããŠçްå¿ã®æ³šæãå¿
èŠã§ãã ãã®ç¹ã§ãã¿ã³æŠç¥ã䜿çšããå ŽåãããŒãžãæåŠããããšããããŸãã
ç§ãã¡ã®æŠç¥
ç§ãã¡ãšååž°æŠç¥ãæ··åããªãã§ãã ããã
git merge -s ours obsoleteãå®è¡ãããšãããªãã¯ã¡ãã£ãšèšã£ãïŒç§ã¯ãã©ã³ãã®å±¥æŽãããŒãžããããã廿¢ããããã©ã³ãã§çºçãããã¹ãŠã®å€æŽãç¡èŠãããã 代ããã«ãç§ãã¡ã®ä»£ããã«æ¬¡ã®ãªãã·ã§ã³ã䜿çšããããšããå§ãããŸãã
 
  廿¢ããã$ git checkout 
  $ git merge -s recursive -Xtheirs master 
 
ç§ãã¡ã®æŠç¥ã¯ãããæ ¹æ¬çãªææ®µã§ãã
ãµãããªãŒæŠç¥
ãã®æŠç¥ã説æãããã
ã«ã ãPro Gitã 
ãšããæ¬ã®
ãµãããªãŒã®ããŒãžã®ç« ã®äŸãèŠãŠã¿ãŸãããã
ãããžã§ã¯ãã«æ°ãããªã¢ãŒããªããžããªã§ããrackã远å ããŸãã
 
  $ git remote add rack_remote git@github.comïŒschacon / rack.git 
  $ git fetch rack_remote 
  èŠåïŒäžè¬çãªã³ãããã¯ãããŸãã 
  ãªã¢ãŒãïŒãªããžã§ã¯ãã®ã«ãŠã³ãïŒ3184ãå®äºã 
  remoteïŒãªããžã§ã¯ãã®å§çž®ïŒ100ïŒ
ïŒ1465/1465ïŒãå®äºã 
  ãªã¢ãŒãïŒåèš3184ïŒãã«ã¿1952ïŒãåå©çš2770ïŒãã«ã¿1675ïŒ 
  ãªããžã§ã¯ãã®åãåãïŒ100ïŒ
ïŒ3184/3184ïŒã677.42 KiB |  4 KiB / sãå®äºã 
  ãã«ã¿ã®è§£æ±ºïŒ100ïŒ
ïŒ1952/1952ïŒãå®äºã 
  git@github.comããïŒschacon / rack 
   * [æ°ãããã©ã³ã]ãã«ã-> rack_remote /ãã«ã 
   * [æ°ãããã©ã³ã]ãã¹ã¿ãŒ-> rack_remote /ãã¹ã¿ãŒ 
   * [æ°ãããã©ã³ã] rack-0.4-> rack_remote / rack-0.4 
   * [æ°ãããã©ã³ã] rack-0.9-> rack_remote / rack-0.9 
  $ git checkout -b rack_branch rack_remote / master 
  ãã©ã³ãrack_branchã¯ããªã¢ãŒããã©ã³ãref / remotes / rack_remote / masterã远跡ããããã«èšå®ãããŠããŸãã 
  æ°ãããã©ã³ããrack_branchãã«åãæ¿ããŸãã 
 
masterãã©ã³ããšrack_branchãã©ã³ãã®äœæ¥ãã£ã¬ã¯ããªããŸã£ããç°ãªãããšã¯æããã§ãã ã¹ã«ãã·ã¥ã䜿çšããŠrack_branchããmasterã«ãã¡ã€ã«ã远å ããå¿
èŠã®ãªãäºå®ã§å±¥æŽãè©°ãŸãã®ãé²ããŸãã
 
  $ git checkout master 
  $ git merge --squash -s subtree --no-commit rack_branch 
  ã¹ã«ãã·ã¥ã³ããã-HEADãæŽæ°ããªã 
  èªåããŒãžã¯ããŸããããŸããã  èŠæ±ã©ããã«ã³ãããããåã«åæ¢ããŸãã 
 
ã©ãã¯ãããžã§ã¯ãã®ãã¡ã€ã«ã¯äœæ¥ãã£ã¬ã¯ããªã«ãããŸãã
æåŸã®èšè
ãã®ãããGitãšã®äœæ¥äžã«åŸãããgit-mergeã®ç¹æ ã«é¢ãããã¹ãŠã®ç¥èãéããŸããã ããã誰ããå©ããŠãããã°å¬ãããããã誰ããææãè£ã£ãããäžæ£ç¢ºãééããèšæ£ããŠããããããããç§ãçªç¶å©ããŠããããå¬ããã