Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
git merge Óë rebase
 
  5532  次浏览      27
 2018-5-10 
 
±à¼­ÍƼö:
±¾ÎÄÀ´×Ôcnblogs£¬¶ÔmergeºÍrebaseµÄÓ÷¨×ÜÓÐÒɻ󣬺ÃÏñÁ½¸ö¶¼ÄÜÍê³É¡°»ñÈ¡±ðµÄbranchµÄcommitsµ½ÎÒµÄbranchÉÏ¡±£¬ÄǶþÕßµÄÇø±ðÓÖÊÇʲô¡£

1.git merge

À´¿´Á½ÖÖ³¡¾°ÖÐmergeµÄ²»Í¬·½Ê½¡£

³¡¾°Ò»£ºÇгöÌØÐÔ·ÖÖ§ºó£¬develop·ÖÖ§ÉÏûÓÐеÄÌá½»¡£

fast-forward£¬ÈôÎÞ·ÖÆç£¬»áÖ±½ÓÒÆ¶¯ÎļþÖ¸Õë¡£¿´²»³öÌØÐÔ·ÖÖ§µÄÆðʼµã¡£

no-fast-forward£¨--no-ff£©£¬±£ÁôÌá½»Á´µÄÍêÕûÐÔ¡£

squash£¬Ñ¹Ëõ²»±ØÒªµÄcommit£»ÎÞ·¨¿´³öfeature·ÖÖ§ºÏµ½develop£»feature£¬develop±£³ÖÏà¶Ô¶ÀÁ¢¡£

³¡¾°¶þ£ºÇгöÌØÐÔ·ÖÖ§ºó£¬develop·ÖÖ§ÉÏÌá½»ÁËC6£¬C7¡£

develop·ÖÖ§ÉÏÌá½»ÁËC6£¬C7£¬ÎÞ·¨fast forward¡£

three way merge£¬

ÕÒµ½develop·ÖÖ§µÄ×îнڵãC7£»

ÕÒµ½feature·ÖÖ§µÄ×îнڵãC5£»

ÕÒµ½develop·ÖÖ§ºÍfeature·ÖÖ§µÄ¹²Í¬×æÏȽڵãC3£»

¶ÔC3£¬C5£¬C7½øÐÐÈý·½ºÏ²¢£¬Éú³É×îеÄC8¡£

2.git rebase

±ä»ù/Ñܺϣ¬´Ó¾ÉµÄbase±ä»ùµ½ÐµÄbase£¬ÔÚÐÂbaseµÄ»ù´¡ÉÏÖØÏÖÁíÒ»¸ö·ÖÖ§µÄÐ޸Ĺý³Ì£¬°æ±¾Ê÷ÏñÁ½¸öÁ´Ìõ´®ÔÚÒ»Æð±ä³ÉÒ»¸öÁ´Ìõ£¬ÒÔ´ïµ½ÏßÐÔµÄЧ¹û¡£

rebase£¬¶ÔÖ¸¶¨µÄbase±¾Éí²¢Ã»ÓÐʲôӰÏ죻ֻÊÇÖØÐ´baseÖ®ºóµÄcommitÀúÊ·¡£

À´¿´¼¸¸ö³¡¾°£º

ÔÚ¼ÌÐø¿ª·¢µÄ¹ý³ÌÖкÍÖ÷·ÖÖ§developͬ²½

´ÓdevelopÉÏÀ­³ö·ÖÖ§×öһЩ¿ª·¢¹¤×÷£¬ÔÚÕâ¸ö¹ý³ÌÖÐdevelop·ÖÖ§¿ÉÄܼÌÐøÍùǰ×ßÁË£¬ÄÇÎÒÃÇÐèÒª¾­³£ºÍdevelop±£³ÖÏÂͬ²½£¨¿ÉÄÜÊDZðÈËÌá½»Á˹«ÓõÄÄ£¿é£¬»òÕßÐÞ¸´Á˶Դó¼Ò¶¼ÓÐÓ°ÏìµÄbug£©¡£Ö®Ç°ÎÒ»áͨ¹ýpull²Ù×÷À´´ïµ½ÕâһĿµÄ£¬µ«pullÍùÍùÄÚÖÃÁËmerge£¨pullµÄЧ¹û¿´ÆðÀ´¾ÍÏñfetch+merge£¬ÏëÏëÌáµ½¹ýµÄ¡°mergeÓ¦¸Ã·´Ó³ÒµÎñ²ãÃæµÄºÏ²¢£¬¶ø·Ç¼¼ÊõÐÐΪ¡±£¬²¢ÇÒ´Ëʱmerge»á²úÉúһЩÔÓÂÒµÄÀúÊ·¼Ç¼£©¡£

Õâ¾ÍÏ൱ÓÚÎÒÃDZ¾µØµÄ¿ª·¢¹¤×÷£¨Ò»ÏµÁеÄcommits£©ÊÇÔھɵÄbaseÉÏÕ¹¿ªµÄ£¬Ó¦¸ÃʹÓÃrebase²Ù×÷£¬½«±¾µØµÄ¿ª·¢¹¤×÷±ä»ùµ½developµÄ×îнڵãÉÏ¡£

git pull --rebase

ÖØÐÂʰÆð¸éÖõŤ×÷

ºÜ¾Ã֮ǰ¿ÉÄÜÆô¶¯Ò»¸ö²¢Ðй¤×÷£¨¿ª·¢²»×ż±ÉÏÏßµÄÐÂÌØÐÔ»òÕßÓÅ»¯Ò»Ð©¹¦ÄÜ£©£¬µ«Ò»Ö±Ã»ÓÐʱ¼ä´¦ÀíËùÒԾ͸éÖÃÁË£¬ÏÖÔÚÓÖÓÐʱ¼äÖØÐÂʰÆð£¬È»ºó¾Í·¢ÏÖµ±Ê±»ùÓÚµÄbaseʵÔÚÊÇ̫̫̫ÀÏÁË¡£ÏÖÔڿ϶¨ÊÇÏ£Íû»ùÓÚ×îеÄbaseÕ¹¿ª¹¤×÷£¬ÕâÑù¾Í¿ÉÒÔ´ÓÒѽâ¾öµÄbugfix»òÒÑÍê³ÉµÄÐÂÌØÐÔÖÐÖÐÊÜÒæ¡£

ÔÚpush֮ǰÕûÀíÎҵı¾µØÀúÊ·

git rebase -i <myBaseCommit>

ÕâÊÇÒ»¸öʹÓøüƵ·±µÄ³¡¾°£º²¢²»ÊÇΪÁ˱ä»ù£¬¶øÊÇÇåÀí±¾µØµÄcommit¡£ºÜ¶àÇé¿öÎÒÃǶ¼ÐèÒªcommit£º

¿ÉÄÜÐèÒª¶à¸öÁ¬ÐøµÄcommit²ÅÄÜÍê³ÉÒ»´Îbugfix£»

Çл»·ÖÖ§ÐèÒª±£´æ±¾µØÐ޸썵±È»°´Àí˵Õâ¸öʱºòÓ¦¸ÃʹÓÃstash»òÕßideaÌṩµÄshelveÁË£©£»

ijЩÀúÊ·commitд´íÁËmsg£¨×î½üÒ»´ÎcommitµÄmsg¿ÉÒÔͨ¹ý commit --amend Ð޸ģ©£»

ͨ¹ý-i£¨--interactive£¬½»»¥Ê½µÄ£©£¬ÎÒÃÇ¿ÉÒÔ¸ÉÔ¤rebase½«ÒªÖ´ÐеĽű¾»¯¹ý³Ì£¬´Ó¶ø´ïµ½ÇåÀí±¾µØcommitÀúÊ·µÄÄ¿µÄ¡£

ÊìÁ·Ê¹ÓÃrebase£¬¿ÉÒÔÇáËɵĽøÐÐcommit£¬Ö»ÐèÒªÔÚ×îÖÕpush֮ǰ×öÒ»´ÎÇåÀí£¬²»±Øµ£ÐÄÓ°Ïìµ½¹«¹²²Ö¿â¡£

git fetch origin develop
git rebase origin/develop
... do sth ...
git push

rebaseµÄ³¡¾°ºÍÓ÷¨»¹Óдý̽Ë÷£¬ÂýÂý¸üÐÂÁË¡£

¼ÇסÕâ¸ö£º

Ö»ÄÜrebase˽ÓзÖÖ§£¬Ò»µ©·¢²¼µ½¹«¹²²Ö¿â£¬²»ÒªÔÙrebaseÁË¡£

3.merge V.S. rebase

ʲôʱºòÓÃmerge£»»ùÓÚÉÏÊö²»Í¬µÄmergeÐÐΪ£¨fast-forward£¬--no-ff£¬squash£©£¬Ê²Ã´³¡¾°ÏÂÓÃÄÄÖÖmerge£º

mergeÖ´ÐÐÒ»¸öºÏ²¢£¬Õâ¸öºÏ²¢Ó¦¸Ã·´Ó¦ÒµÎñ²ãÃæµÄºÏ²¢£¬¶ø·Ç¼¼ÊõÐÐΪ¡£ÎÒÃÇÏ£ÍûÔÚµ±Ç°·ÖÖ§ÉÏÍùǰ×ߣ¬ÕâÑùËü¾Í°üº¬ÁËÆäËû·ÖÖ§µÄ¹¤×÷¡£

ËùÒÔÎÊÌâµÄ¹Ø¼üÊÇ£ºÕâ¸ö¡°ÆäËû·ÖÖ§¡±ÊÇʲôÑùµÄ·ÖÖ§£¿Õâ¸ö¡°ÆäËû·ÖÖ§¡±ÐèÒªÔÚÀúʷͼÆ×ÖÐչʾô£¿

±¾µØµÄ¡¢ÁÙʱµÄ·ÖÖ§£¬Ê¹ÓÃËü½ö½öÊÇΪÁËʹmaster±£³Öclean¡£

1.ÈôÀ­³ö±¾µØ·ÖÖ§ºó£¬masterÍùǰ×ßÁË£¬´ËʱÔÚ±¾µØ·ÖÖ§£º

git rebase -i master

½«±¾µØ·ÖÖ§±ä»ùµ½×îеÄmaster½Úµã£¨ÖØÐÂÊáÀí±¾µØÀúÊ·Ìá½»ÐÅÏ¢±ÈÈçºÏ²¢³ÉÒ»¸öcommit£©£¬ºÃËÆ±¾µØ·ÖÖ§¾ÍÊÇÔÚ×îеÄmaster½ÚµãÉÏ×öµÄ¿ª·¢¹¤×÷£¬ÒÔ±£Ö¤ºÏ²¢µ½masterºó³ÊÏÖÏßÐÔÔö³¤¡£

2.ÔÚmasterÉÏ£º

git merge (fast-forward)

×îÖÕÒÔÒ»¸ö»ò¼¸¸öcommitÕ¹ÏÖÔÚmasterÉÏ¡£

ÖªÃû·ÖÖ§£¬ÍŶÓÃ÷È·¶¨ÒåµÄ£¬¿ÉÄÜÊÇÓÃÀ´×·×Ùbug/feature¡£

ÓÀÔ¶²»ÒªÓÃrebase£¬¶øÊÇÓÃ

git merge --no-ff

ÒÔ±£ÁôÇåÎúÍêÕûµÄÀúʷͼÆ×¡£

   
5532 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

ÿÈÕ¹¹½¨½â¾ö·½°¸
ÈçºÎÖÆ¶¨ÓÐЧµÄÅäÖùÜÀíÁ÷³Ì
ÅäÖùÜÀíÖ÷Òª»î¶¯¼°ÊµÏÖ·½·¨
¹¹½¨¹ÜÀíÈëÃÅ
Ïà¹ØÎĵµ

ÅäÖùÜÀíÁ÷³Ì
ÅäÖùÜÀí°×ƤÊé
CM09_CÅäÖùÜÀí±ê×¼
ʹÓÃSVN½øÐа汾¿ØÖÆ
Ïà¹Ø¿Î³Ì

ÅäÖùÜÀíʵ¼ù
ÅäÖùÜÀí·½·¨¡¢¹¤¾ßÓëÓ¦ÓÃ
¶à²ã´Î¼¯³ÉÅäÖùÜÀí
²úÆ··¢²¼¹ÜÀí