±à¼ÍƼö: |
±¾ÎÄÀ´×Ô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µÄ×îнڵãÉÏ¡£

ÖØÐÂʰÆð¸éÖõŤ×÷
ºÜ¾Ã֮ǰ¿ÉÄÜÆô¶¯Ò»¸ö²¢Ðй¤×÷£¨¿ª·¢²»×ż±ÉÏÏßµÄÐÂÌØÐÔ»òÕßÓÅ»¯Ò»Ð©¹¦ÄÜ£©£¬µ«Ò»Ö±Ã»ÓÐʱ¼ä´¦ÀíËùÒԾ͸éÖÃÁË£¬ÏÖÔÚÓÖÓÐʱ¼äÖØÐÂʰÆð£¬È»ºó¾Í·¢ÏÖµ±Ê±»ùÓÚµÄ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Íùǰ×ßÁË£¬´ËʱÔÚ±¾µØ·ÖÖ§£º
½«±¾µØ·ÖÖ§±ä»ùµ½×îеÄmaster½Úµã£¨ÖØÐÂÊáÀí±¾µØÀúÊ·Ìá½»ÐÅÏ¢±ÈÈçºÏ²¢³ÉÒ»¸öcommit£©£¬ºÃËÆ±¾µØ·ÖÖ§¾ÍÊÇÔÚ×îеÄmaster½ÚµãÉÏ×öµÄ¿ª·¢¹¤×÷£¬ÒÔ±£Ö¤ºÏ²¢µ½masterºó³ÊÏÖÏßÐÔÔö³¤¡£
2.ÔÚmasterÉÏ£º
×îÖÕÒÔÒ»¸ö»ò¼¸¸öcommitÕ¹ÏÖÔÚmasterÉÏ¡£
ÖªÃû·ÖÖ§£¬ÍŶÓÃ÷È·¶¨ÒåµÄ£¬¿ÉÄÜÊÇÓÃÀ´×·×Ùbug/feature¡£
ÓÀÔ¶²»ÒªÓÃrebase£¬¶øÊÇÓÃ
ÒÔ±£ÁôÇåÎúÍêÕûµÄÀúʷͼÆ×¡£ |