2016 Äê Git ·¢ÉúÁË ¾ªÌ춯µØ µØ±ä»¯£¬·¢²¼ÁËÎå´óÐÂÌØÐÔ¹ £¨´Ó v2.7 µ½ v2.11 £©ºÍÊ®Áù¸ö²¹¶¡²¡£189 λ×÷Õß³¹±Ï×ÁË 3676 ¸öÌá½»⁴µ½ master ·ÖÖ§£¬±È 2015 Äê¶àÁË 15%⁵£¡×ܼÆÓÐ 1545 ¸öÎļþ±»Ð޸ģ¬ÆäÖÐÔö¼ÓÁË 276799 Ðв¢ÒƳýÁË 100973 ÐÐ⁶¡£ µ«ÊÇ£¬Í¨¹ýͳ¼ÆÌá½»µÄÊýÁ¿ºÍ´úÂëÐÐÊýÀ´ºâÁ¿Éú²úÁ¦ÊÇÒ»ÖÖÊ®·ÖÓÞ´ÀµÄ·½·¨¡£³ýÁËÉî¶ÈÑо¿¹ýµÄ¿ª·¢Õß¿ÉÒÔ×öµ½Æ¾Ö±¾õÀ´ÅжϴúÂëÖÊÁ¿µÄµØ²½£¬ÎÒÃÇÆÕͨÈËÀ´×÷ÖÙ²ÃÄÑÃâ»áÒòÎÒÃdz£È˵ÄÅжÏÓÐʧƫÆÄ¡£ ½÷¼ÇÕâÒ»ÌõÓÚÐÄ£¬ÎÒ¾ö¶¨ÕûÀíÕâÒ»ÄêÀïÁù¸öÎÒ×îϲ°®µÄ Git ÌØÐÔº¸ÇµÄ¸Ä½ø£¬À´×öÒ»´Î·ÖÀà»Ø¹Ë¡£ÕâƪÎÄÕÂ×÷ΪһƪÖÐƪÍÆÎÄÓеãÌ«¹ý³¤ÁË£¬ËùÒÔÎÒ²»½éÒâÄãÃÇÖ±½ÓÌøµ½ÄãÃÇÌرð¸ÐÐËȤµÄÌØÐÔÈ¥¡£
ÔÚÎÒÃÇ¿ªÊ¼Ö®Ç°£¬Çë×¢ÒâÔÚ´ó¶àÊý²Ù×÷ϵͳÉ϶¼×Ô´øÓÐ Git µÄ¾É°æ±¾£¬ËùÒÔÄãÐèÒª¼ì²éÄãÊÇ·ñÔÚʹÓÃ×îв¢ÇÒ×î°ôµÄ°æ±¾¡£Èç¹ûÔÚÖÕ¶ËÔËÐÐ git --version ·µ»ØµÄ½á¹ûСÓÚ Git v2.11.0£¬ÇëÁ¢¿ÌÌøתµ½ Atlassian µÄ¿ìËÙÖ¸ÄÏ ¸üлò°²×° Git ²¢¸ù¾ÝÄãµÄƽ̨×ö³öÑ¡Ôñ¡£ [ËùÐèµÄ“ÒýÓÔ]ÔÚÎÒÃǽøÈë¸ßÖÊÁ¿ÄÚÈÝ֮ǰ»¹ÐèÒª×öÒ»¸ö¶ÌÔݵÄÍ£¶Ù£ºÎÒ¾õµÃÎÒÐèҪΪÄãչʾÎÒÊÇÈçºÎ´Ó¹«¿ªÎĵµÉú³Éͳ¼ÆÐÅÏ¢£¨ÒÔ¼°¿ªÆªµÄ·âÃæͼƬ£©µÄ¡£ÄãÒ²¿ÉÒÔʹÓÃÏÂÃæµÄÃüÁîÀ´¶ÔÄã×Ô¼ºµÄ²Ö¿â×öÒ»¸ö¿ìËÙµÄ Äê¶È»Ø¹Ë£¡
ÒÔÉϵÄÃüÁîÊÇÔÚ Git µÄ master ·ÖÖ§ÔËÐеģ¬ËùÒÔ²»»áÏÔʾÆäËû³öÉ«µÄ·ÖÖ§ÉÏûÓкϲ¢µÄ¹¤×÷¡£Èç¹ûÄãʹÓÃÕâЩÃüÁÇë¼ÇסÌá½»µÄÊýÁ¿ºÍ´úÂëÐÐÊý²»ÊÇÓ¦¸ÃÖµµÃÐÅÀµµÄ¶ÈÁ¿·½Ê½¡£Ç벻ҪʹÓÃËüÃÇÀ´ºâÁ¿ÄãµÄÍŶӳÉÔ±µÄ¹±Ïס£ ÏÖÔÚ£¬ÈÃÎÒÃÇ¿ªÊ¼ËµºÃµÄ»Ø¹Ë…… Íê³É Git ¹¤×÷Ê÷git worktree ÃüÁîÊ״γöÏÖÓÚ Git v2.5 £¬µ«ÊÇÔÚ 2016 ÄêÓÐÁËһЩÏÔÖøµÄÔöÇ¿¡£Á½¸öÓмÛÖµµÄÐÂÌØÐÔÔÚ v2.7 ±»ÒýÈ룺list ×ÓÃüÁºÍΪ¶þ·ÖËÑË÷Ôö¼ÓÁËÃüÁî¿Õ¼äµÄ refs¡£¶ø lock/unlock ×ÓÃüÁîÔòÊÇÔÚ v2.10 ±»ÒýÈë¡£ ʲôÊǹ¤×÷Ê÷ÄØ£¿git worktree ÃüÁîÔÊÐíÄãͬ²½µØ¼ì³öºÍ²Ù×÷´¦ÓÚ²»Í¬Â·¾¶ÏµÄͬһ²Ö¿âµÄ¶à¸ö·ÖÖ§¡£ÀýÈ磬¼ÙÈçÄãÐèÒª×öÒ»´Î¿ìËÙµÄÐÞ¸´¹¤×÷µ«ÓÖ²»ÏëÈÅÂÒÄ㵱ǰµÄ¹¤×÷Çø£¬Äã¿ÉÒÔʹÓÃÒÔÏÂÃüÁîÔÚÒ»¸öз¾¶Ï¼ì³öÒ»¸öзÖÖ§£º
¹¤×÷Ê÷²»½ö½öÊÇΪ·ÖÖ§¹¤×÷¡£Äã¿ÉÒÔ¼ì³ö¶à¸öÀï³Ì±®×÷Ϊ²»Í¬µÄ¹¤×÷Ê÷À´²¢Ðй¹½¨»ò²âÊÔËüÃÇ¡£ÀýÈ磬ÎÒ´Ó Git v2.6 ºÍ v2.7 µÄÀï³Ì±®Öд´½¨¹¤×÷Ê÷À´¼ìÑ鲻ͬ°æ±¾ Git µÄÐÐΪÌØÕ÷¡£
ÄãҲʹÓÃͬÑùµÄ¼¼ÊõÀ´²¢Ðй¹ÔìºÍÔËÐÐÄã×Ô¼ºÓ¦ÓóÌÐòµÄ²»Í¬°æ±¾¡£ Áгö¹¤×÷Ê÷git worktree list ×ÓÃüÁÓÚ Git v2.7 ÒýÈ룩ÏÔʾËùÓÐÓ뵱ǰ²Ö¿âÓйصŤ×÷Ê÷¡£
¶þ·Ö²éÕÒ¹¤×÷Ê÷git bisect ÊÇÒ»¸ö¼ò½àµÄ Git ÃüÁ¿ÉÒÔÈÃÎÒÃǶÔÌá½»¼Ç¼ִÐÐÒ»´Î¶þ·ÖËÑË÷¡£Í¨³£ÓÃÀ´ÕÒµ½ÄÄÒ»´ÎÌá½»ÒýÈëÁËÒ»¸öÖ¸¶¨µÄÍË»¯¡£ÀýÈ磬Èç¹ûÔÚÎÒµÄ master ·ÖÖ§×îºóµÄÌá½»ÉÏÓÐÒ»¸ö²âÊÔûÓÐͨ¹ý£¬ÎÒ¿ÉÒÔʹÓà git bisect À´¹á´©²Ö¿âµÄÀúÊ·À´ÕÒÑ°µÚÒ»´ÎÔì³ÉÕâ¸ö´íÎóµÄÌá½»¡£
ÔÚºǫ́£¬bisect ʹÓà refs À´¸ú×Ù “good” Óë “bad” µÄÌá½»À´×÷Ϊ¶þ·ÖËÑË÷·¶Î§µÄÉÏϽçÏÞ¡£²»ÐÒµÄÊÇ£¬¶Ô¹¤×÷Ê÷µÄ·ÛË¿À´Ëµ£¬ÕâЩ refs ¶¼´æ´¢ÔÚÑ°³£µÄ .git/refs/bisect ÃüÃû¿Õ¼ä£¬Òâζ×Å git bisect ²Ù×÷Èç¹ûÔËÐÐÔÚ²»Í¬µÄ¹¤×÷Ê÷Ï¿ÉÄܻụÏà¸ÉÈÅ¡£ µ½ÁË v2.7 °æ±¾£¬bisect µÄ refs ÒƵ½ÁË .git/worktrees/$worktree_name/refs/bisect£¬ ËùÒÔÄã¿ÉÒÔ²¢ÐÐÔËÐÐ bisect ²Ù×÷ÓÚ¶à¸ö¹¤×÷Ê÷ÖС£ Ëø¶¨¹¤×÷Ê÷µ±ÄãÍê³ÉÁËÒ»¿Å¹¤×÷Ê÷µÄ¹¤×÷£¬Äã¿ÉÒÔÖ±½Óɾ³ýËü£¬È»ºóͨ¹ýÔËÐÐ git worktree prune µÈËü±»µ±×öÀ¬»ø×Ô¶¯»ØÊÕ¡£µ«ÊÇ£¬Èç¹ûÄãÔÚÍøÂç¹²Ïí»òÕß¿ÉÒƳýý½éÉÏ´æ´¢ÁËÒ»¿Å¹¤×÷Ê÷£¬Èç¹û¹¤×÷Ê÷Ŀ¼ÔÚɾ³ýÆڼ䲻¿É·ÃÎÊ£¬¹¤×÷Ê÷»á±»ÍêÈ«Çå³ý——²»¹ÜÄãϲ²»Ï²»¶£¡Git v2.10 ÒýÈëÁË git worktree lock ºÍ unlock ×ÓÃüÁîÀ´·ÀÖ¹ÕâÖÖÇé¿ö·¢Éú¡£
--reason ±êÇ©ÔÊÐíΪδÀ´µÄÄãÁôÒ»¸ö¼ÇºÅ£¬ÃèÊöΪʲôµ±³õ¹¤×÷Ê÷±»Ëø¶¨¡£git worktree unlock ºÍ lock¶¼ÒªÇóÄãÖ¸¶¨¹¤×÷Ê÷µÄ·¾¶¡£»òÕߣ¬Äã¿ÉÒÔ cd µ½¹¤×÷Ê÷Ŀ¼ȻºóÔËÐÐ git worktree lock . À´´ïµ½Í¬ÑùµÄЧ¹û¡£ ¸ü¶à Git ±ä»ùÑ¡Ïî2016 ÄêÈýÔ£¬Git v2.8 Ôö¼ÓÁËÔÚÀÈ¡¹ý³ÌÖн»»¥½øÐбä»ùµÄÃüÁî git pull --rebase=interactive ¡£¶ÔÓ¦µØ£¬ÁùÔÂ·Ý Git v2.9 ·¢²¼ÁËͨ¹ý git rebase -x ÃüÁî¶ÔÖ´Ðбä»ù²Ù×÷¶ø²»ÐèÒª½øÈë½»»¥Ä£Ê½µÄÖ§³Ö¡£ Re-ɶ£¿ÔÚÎÒÃǼÌÐøÉîÈëÇ°£¬ÎÒ¼ÙÉè¶ÁÕßÖÐÓÐЩ²¢²»ÊǺÜÊìϤ»òÕßûÓÐÍêÈ«Ï°¹ß±ä»ùÃüÁî»òÕß½»»¥Ê½±ä»ù¡£´Ó¸ÅÄîÉÏ˵£¬ËüºÜ¼òµ¥£¬µ«ÊÇÓëºÜ¶à Git µÄÇ¿´óÌØÐÔÒ»Ñù£¬±ä»ùÉ¢·¢×ÅÌýÆðÀ´ºÜ¸´ÔÓµÄרҵÊõÓïµÄÆøÏ¢¡£ËùÒÔ£¬ÔÚÎÒÃÇÉîÈëÇ°£¬ÏÈÀ´¿ìËٵĸ´Ï°Ò»ÏÂʲôÊDZä»ù¡£ ±ä»ù²Ù×÷Òâζ׎«Ò»¸ö»ò¶à¸öÌá½»ÔÚÒ»¸öÖ¸¶¨·ÖÖ§ÉÏÖØд¡£git rebase ÃüÁîÊDZ»Éî¶ÈÖØÔØÁË£¬µ«ÊÇ rebase Õâ¸öÃû×ÖµÄÀ´Ô´ÊÂʵÉÏ»¹ÊÇËü¾³£±»ÓÃÀ´¸Ä±äÒ»¸ö·ÖÖ§µÄ»ù×¼Ìá½»£¨Äã»ùÓÚ´ËÌá½»´´½¨ÁËÕâ¸ö·ÖÖ§£©¡£ ´Ó¸ÅÄîÉÏ˵£¬rebase ͨ¹ý½«ÄãµÄ·ÖÖ§ÉϵÄÌá½»ÁÙʱ´æ´¢ÎªÒ»ÏµÁв¹¶¡°ü£¬½Ó׎«ÕâЩ²¹¶¡°ü°´Ë³ÐòÒÀ´Î´òÔÚÄ¿±êÌá½»Ö®ÉÏ¡£
¶Ô master ·ÖÖ§µÄÒ»¸ö¹¦ÄÜ·ÖÖ§Ö´Ðбä»ù²Ù×÷ £¨git reabse master£©ÊÇÒ»ÖÖͨ¹ý½« master ·ÖÖ§ÉÏ×îеĸıäºÏ²¢µ½¹¦ÄÜ·ÖÖ§µÄ“±£ÏÊ·¨”¡£¶ÔÓÚ³¤ÆÚ´æÔڵŦÄÜ·ÖÖ§£¬¹æÂɵıä»ù²Ù×÷Äܹ»×î´ó³Ì¶ÈµÄ¼õÉÙ¿ª·¢¹ý³ÌÖгöÏÖ³åÍ»µÄ¿ÉÄÜÐÔºÍÑÏÖØÐÔ¡£ ÓÐЩÍŶӻáÑ¡ÔñÔںϲ¢ËûÃǵĸĶ¯µ½ master Ç°Á¢¼´Ö´Ðбä»ù²Ù×÷ÒÔʵÏÖÒ»´Î¿ìËٺϲ¢ £¨git merge --ff <feature>£©¡£¶Ô master ·ÖÖ§¿ìËٺϲ¢ÄãµÄÌá½»ÊÇͨ¹ý¼òµ¥µÄ½« master ref Ö¸ÏòÄãµÄÖØд·ÖÖ§µÄ¶¥µã¶ø²»ÐèÒª´´½¨Ò»¸öºÏ²¢Ìá½»¡£
±ä»ùÊÇÈç´Ë·½±ãºÍ¹¦ÄÜÇ¿´óÒÔÖÂÓÚËüÒѾ±»Ç¶ÈëÆäËû³£¼ûµÄ Git ÃüÁîÖУ¬ÀýÈçÀÈ¡²Ù×÷ git pull ¡£Èç¹ûÄãÔÚ±¾µØ master ·ÖÖ§ÓÐδÍÆË͵ÄÌá½»£¬ÔËÐÐ git pull ÃüÁî´Ó origin ÀÈ¡Äã¶ÓÓѵĸĶ¯»áÔì³É²»±ØÒªµÄºÏ²¢Ìá½»¡£
ÕâÓеã»ìÂÒ£¬¶øÇÒÔÚ·±Ã¦µÄÍŶӣ¬Äã»á»ñµÃ³É¶ÑµÄ²»±ØÒªµÄºÏ²¢Ìá½»¡£git pull --rebase ½«Äã±¾µØµÄÌá½»ÔÚÄã¶ÓÓѵÄÌá½»ÉÏÖ´Ðбä»ù¶ø²»²úÉúÒ»¸öºÏ²¢Ìá½»¡£
ÕâºÜÕû½à°É£¡ÉõÖÁ¸ü¿á£¬Git v2.8 ÒýÈëÁËÒ»¸öÐÂÌØÐÔ£¬ÔÊÐíÄãÔÚÀȡʱ ½»»¥µØ ±ä»ù¡£ ½»»¥Ê½±ä»ù½»»¥Ê½±ä»ùÊDZä»ù²Ù×÷µÄÒ»ÖÖ¸üÇ¿´óµÄÐÎ̬¡£ºÍ±ê×¼±ä»ù²Ù×÷ÏàËÆ£¬Ëü¿ÉÒÔÖØдÌá½»£¬µ«ËüÒ²¿ÉÒÔÏòÄãÌṩһ¸ö»ú»áÈÃÄãÄܹ»½»»¥Ê½µØÐÞ¸ÄÕâЩ½«±»ÖØÐÂÔËÓÃÔÚлù×¼ÉϵÄÌá½»¡£ µ±ÄãÔËÐÐ git rebase --interactive (»ò git pull --rebase=interactive)ʱ£¬Äã»áÔÚÄãµÄÎı¾±à¼Æ÷Öеõ½Ò»¸ö¿É¹©Ñ¡ÔñµÄÌá½»ÁбíÊÓͼ¡£
×¢Ò⵽ÿһÌõÌá½»ÅÔ¶¼ÓÐÒ»¸ö pick¡£ÕâÊÇ¶Ô rebase ¶øÑÔ£¬“ÕÕÔÑùÁôÏÂÕâ¸öÌá½»”¡£Èç¹ûÄãÏÖÔÚ¾ÍÍ˳öÎı¾±à¼Æ÷£¬Ëü»áÖ´ÐÐÒ»´ÎÈçÉÏÎÄËùÊöµÄÆÕͨ±ä»ù²Ù×÷¡£µ«ÊÇ£¬Èç¹ûÄ㽫 pick ¸ÄΪ edit »òÕßÆäËû rebase ÃüÁîÖеÄÒ»¸ö£¬±ä»ù²Ù×÷»áÔÊÐíÄãÔÚËü±»ÖØÐÂÔËÓÃÇ°¸Ä±äËü¡£ÓÐЧµÄ±ä»ùÃüÁîÓÐÈçϼ¸ÖÖ£º
ÄãÒ²¿ÉÒÔÔÚÎļþÄÚÖØÐÂÕûÀíÌá½»£¬ÕâÑù»á¸Ä±äËüÃDZ»ÖØÐÂÓ¦ÓõÄ˳Ðò¡£µ±Äã¶Ô²»Í¬µÄÖ÷Ìâ´´½¨Á˽»´íµÄÌύʱÕâ»áºÜ˳ÊÖ£¬Äã¿ÉÒÔʹÓà squash »òÕß fixup À´½«ÆäºÏ²¢³É·ûºÏÂß¼µÄÔ×ÓÌá½»¡£ µ±ÄãÉèÖÃÍêÃüÁî²¢ÇÒ±£´æÕâ¸öÎļþºó£¬Git ½«µÝ¹éÿһÌõÌá½»£¬ÔÚÿ¸ö reword ºÍ edit ÃüÁΪÄãÔÝÍ£À´Ö´ÐÐÄãÉè¼ÆºÃµÄ¸Ä±ä£¬²¢ÇÒ×Ô¶¯ÔËÐÐ squash£¬ fixup£¬exec ºÍ drop ÃüÁî¡£ ·Ç½»»¥ÐÔʽִÐе±ÄãÖ´Ðбä»ù²Ù×÷ʱ£¬±¾ÖÊÉÏÄãÊÇÔÚͨ¹ý½«ÄãÿһÌõÐÂÌá½»Ó¦ÓÃÓÚÖ¸¶¨»ùÖ·µÄÍ·²¿À´ÖØдÀúÊ·¡£git pull --rebase ¿ÉÄÜ»áÓÐÒ»µãΣÏÕ£¬ÒòΪ¸ù¾ÝÉÏÓηÖÖ§¸Ä¶¯µÄÊÂʵ£¬ÄãµÄн¨ÀúÊ·¿ÉÄÜ»áÓÉÓÚÌض¨µÄÌá½»ÔâÓö²âÊÔʧ°ÜÉõÖÁ±àÒëÎÊÌâ¡£Èç¹ûÕâЩ¸Ä¶¯ÒýÆðÁ˺ϲ¢³åÍ»£¬±ä»ù¹ý³Ì½«»áÔÝÍ£²¢ÇÒÔÊÐíÄãÀ´½â¾öËüÃÇ¡£µ«ÊÇ£¬Õû½àµÄºÏ²¢¸Ä¶¯ÈÔÈ»ÓпÉÄÜ´ò¶Ï±àÒë»ò²âÊÔ¹ý³Ì£¬ÁôÏÂÆưܵÄÌύŪÂÒÄãµÄÌá½»ÀúÊ·¡£ µ«ÊÇ£¬Äã¿ÉÒÔÖ¸µ¼ Git Ϊÿһ¸öÖØдµÄÌá½»À´ÔËÐÐÄãµÄÏîÄ¿²âÊÔÌ×¼þ¡£ÔÚ Git v2.9 ֮ǰ£¬Äã¿ÉÒÔͨ¹ý°ó¶¨ git rebase --interactive ºÍ exec ÃüÁîÀ´ÊµÏÖ¡£ÀýÈçÕâÑù£º
……Õâ»áÉú³ÉÒ»¸ö½»»¥Ê½±ä»ù¼Æ»®£¬ÔÚÖØдÿÌõÌá½»ºóÖ´ÐÐ npm test £¬±£Ö¤ÄãµÄ²âÊÔÈÔÈ»»áͨ¹ý£º
Èç¹û³öÏÖÁ˲âÊÔʧ°ÜµÄÇé¿ö£¬±ä»ù»áÔÝÍ£²¢ÈÃÄãÐÞ¸´ÕâЩ²âÊÔ(²¢ÇÒ½«ÄãµÄÐÞ¸ÄÓ¦ÓÃÓÚÏàÓ¦Ìá½»)£º
ÕâºÜ·½±ã£¬µ«ÊÇʹÓý»»¥Ê½±ä»ùÓÐÒ»µãÓ·Öס£µ½ÁË Git v2.9£¬Äã¿ÉÒÔÕâÑùÀ´ÊµÏַǽ»»¥Ê½±ä»ù£º
¿ÉÒÔ¼òµ¥Ìæ»» npm test Ϊ make£¬rake£¬mvn clean install£¬»òÕßÈκÎÄãÓÃÀ´¹¹½¨»ò²âÊÔÄãµÄÏîÄ¿µÄÃüÁî¡£ СС¾¯¸æ¾ÍÏñµçÓ°ÀïÒ»Ñù£¬ÖØдÀúÊ·¿ÉÊÇÒ»¸öΣÏÕµÄÐе±¡£ÈκÎÌá½»±»ÖØдΪ±ä»ù²Ù×÷µÄÒ»²¿·Ö¶¼½«¸Ä±äËüµÄ SHA-1 ID£¬ÕâÒâζ×Å Git »á°ÑËüµ±×÷Ò»¸öȫеÄÌá½»¶Ô´ý¡£Èç¹ûÖØдµÄÀúÊ·ºÍÔÀ´µÄÀúÊ·»ìÔÓ£¬Ä㽫»ñµÃÖظ´µÄÌá½»£¬¶øÕâ¿ÉÄÜÔÚÄãµÄÍŶÓÖÐÒýÆð²»ÉÙµÄÒÉ»ó¡£ ÎªÁ˱ÜÃâÕâ¸öÎÊÌ⣬Äã½ö½öÐèÒª×ñÕÕÒ»Ìõ¼òµ¥µÄ¹æÔò£º
¼á³ÖÕâÒ»µãÄã»áûʵġ£ |