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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Git·ÖÖ§¹ÜÀíʵ¼ù
 
×÷ÕߣºÊØÍû
  3634  次浏览      31
 2020-2-7
 
±à¼­ÍƼö:
±¾ÎÄÖ÷ÒªÒÔÂÛÎİ汾¿ØÖÆÏµÍ³Àý×ӵķÖÎöΪÒý£¬½éÉÜÁËGit µÄÉè¼ÆÀíÄîÒÔ¼°·ÖÖ§¹ÜÀíµÄÏêϸʵ¼ù¹ý³Ì£¬Ï£Íû¶ÔÄúÄÜÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚgitee£¬ÓÉ»ðÁú¹ûÈí¼þLuca±à¼­¡¢ÍƼö¡£

Linux & Git ±»³ÆÎª Linus Travis µÄÁ½´óÉñ×÷, ʵÖÁÃû¹é!

ÔÚ̸ Git ֮ǰ, ÏÈ̸һÏ Linux¡£

Linux ºÍ Windows ×÷ΪÁ½¸ö¹ã·ºÊ¹ÓõIJÙ×÷ϵͳ, ÓÐ׿«´óµÄ²îÒì, ÔÚ¸÷Öֹ㷺µÄÆÀ¼ÛºÍÕùÖ´ÖÐ, ÎÒ¶ÔÏÂÃæµÄÆÀ¼ÛÊ®·ÖÔÞͬ :

Linux Óë Windows ×î±¾ÖʵÄÇø±ðÔÚÄÄÀï¡£ÓÐÈË»á˵ǰÕßÃâ·Ñ£¬ºóÕßÐèÒªÂò (»ò͵)¡£ÕâÖ»ÊÇ¶Ô ¡°free software¡± µÄÇú½â¡£ÔÚÎÒ¿´À´£¬¶þÕß×îÖØÒªµÄÇø±ðÄËÊÇËüÃǶÔ×Ô¼ºµÄÓû§Ëù×öµÄ¼ÙÉè¡£

¶ÔÓÚ Linux£¬Õâ¸ö¼ÙÉèÊÇ£ºÓû§ÖªµÀ×Ô¼ºÏëҪʲô£¬Ò²Ã÷°××Ô¼ºÔÚ×öʲô£¬²¢ÇÒ»áΪ×Ô¼ºµÄÐÐΪ¸ºÔð¡£

¶ø Windows ÔòÇ¡ºÃÏà·´£ºÓû§²»ÖªµÀ×Ô¼ºÏëҪʲô£¬Ò²²»Ã÷°××Ô¼ºÔÚ×öʲô£¬¸ü²»´òËãΪ×Ô¼ºµÄÐÐΪ¸ºÔð¡£

ÎÒ²»ÏþµÃÉÏÊö¹Ûµã×î³õÔ´×ÔÄÄÀï, »òÐíÊÇÕâÀï: Zaikun's Blog¡£

ÎÒ²»ÊÇÒ»¸ö¼«¶ËÖ÷ÒåÕß, ÕâÁ½ÖÖÀíÄîûÓÐË­ÊÇË­·Ç, ÊëÓÅÊëÁÓ. º£Äɰٴ¨, ÓÐÈÝÄË´ó, Îһ᳢ÊÔ·¢ÏÖÿһÖÖÀíÄîµÄÓÅÊÆºÍÊÊÓó¡¾°, ¶ø²»ÊÇһζµØÈ¥·ñ¶¨Ê²Ã´¡£

ÔÚ¹¤×÷³¡¾°ÉÏ, ÎÒ¸üϲ»¶ Linux µÄÀíÄî :

ÎÒÔørm -rfÎóɾ¹ý/etcĿ¼, µ¼ÖÂϵͳÏÝÈë̱»¾; Ò²ÔøÒò°ü¹ÜÀíÒÀÀµÎÊÌâ¶øµ¼ÖÂÈí¼þË𻵠...

ÔÚÎÒ¿´À´, ÕâЩ¶¼²»¿ÉÅÂ, Linux »á׼ȷµÄÏòÎÒչʾ¹ÊÕÏÔ­Òò, ¶ø²»ÊÇ¡¸ÇëÉÔºó...¡¹, ¡¸ÎÒÃÇÕýÔÚ×öһЩ׼±¸¹¤×÷¡¹

ÕâÀï¹ÊÕÏÔ­ÒòÊÇÖ¸Ò»¸ö»ùÓڹ㷺ÈÏÖª»ù´¡ÉϵĽâÊÍ. ±ÈÈç: Èç¹ûÒòΪ´úÂë±àдµÄʧÎó, µ¼ÖÂÒ»¶Î³ÌÐòûÓа´ÕÕÉè¼ÆÒâͼִÐÐ, ÎÒÖ»ÐèÁ˽â´úÂë²ãÃæµÄÂß¼­´íÎó¼´¿É, ¶ø²»ÊÇÉ´íÎóµÄ´úÂëÔڵ緲ãÃæµ¼ÖÂÁËʲôÑùµÄÎÊÌâ·¢Éú

ÈÕ¸´Ò»ÈÕµÄʹÓÃ, ÎÒ·¸´íÎóµÄ¸ÅÂÊÔ½À´Ô½µÍ, ¶Ô Linux ±¾ÉíµÄÀí½âÔ½À´Ô½ÉîÈë, ¶Ô Linux Ô½À´Ô½ÐÅÈÎ, ²¢ÇÒÖð½¥ÓÐÁËÒ»ÖÖ¶Ô Linux µÄÕÆ¿Ø¸Ð¡£

È»¶øÔÚÓÎÏ·ÓéÀÖ³¡¾°ÉÏ, ÎÒ¸üÐÀÉÍ Windows µÄÀíÄî:

µ±ÎÒÏëÍæÓÎÏ··ÅËÉÒ»ÏÂʱ, ÎÒÏ£Íû Windows ΪÎÒ°ü°ìÒ»ÇÐ, ÎÒÒª×öµÄ¾ÍÊÇË«»÷ÔËÐÐ, È»ºó¿ªÊ¼ÓÎÏ·¡£

Git Óë Linux ͬԴͬ×Ú, ÒàÊÇÓÐ×ÅÏàËÆµÄÀíÄî, Æä±¾ÉíÓÐ׿«ÎªÁé»îµÄÉè¼Æ, Git ÈÏΪ :

Óû§ÖªµÀ×Ô¼ºÔÚ×öʲô, ²¢ÇÒ»áΪ×Ô¼ºµÄÐÐΪ¸ºÔð¡£

ÔÚ¿ªÔ´ÁìÓòµÄ¹ã·ºÊ¹ÓÃÖÐÐγÉÁËÈýÖÖ±»¹ã·º½ÓÊܵÄ×î¼Ñʵ¼ù : Git flow, Github flow, Gitlab flow.

´ÓÊÖæ½ÅÂÒ¿ªÊ¼

µ±ÎÒ³õѧ Git ʱ, ÎÒ¹Ø×¢ Git µÄ¹¤³Ìʵ¼ùʤ¹ýÆäÄÚÔÚµÄÉè¼ÆÀíÄî, ÒÔÖÁÓÚÆÈÇеÄȥѰÕÒһЩËùνµÄ×î¼Ñʵ¼ù, È»ºó½©Ó²µØÄ£·ÂÉõÖÁÉú°áÓ²Ì×, ½á¹ûÏÔ¶øÒ×¼û, ÎÒʼÖÕÎÞ·¨×öµ½

flow£¬Ô­ÒâÊÇË®Á÷£¬±ÈÓ÷ÏîÄ¿ÏñË®Á÷ÄÇÑù£¬Ë³³©¡¢×ÔÈ»µØÏòǰÁ÷¶¯£¬²»»á·¢Éú³å»÷¡¢¶Ôײ¡¢ÉõÖÁäöÎÐ.

ÀíÏëÊÇÐÐÔÆÁ÷Ë®, ÏÖʵȴÍùÍù²Ò²»È̶Ã

¾²ÏÂÐÄÀ´ÏëÒ»Ïë

ÊÕÆð¼±¹¦½üÀûµÄÐÄ̬, ÎÒ¿ªÊ¼Ë¼¿¼, Git µÄÉè¼ÆÀíÄîµ½µ×ÊÇʲô¡£

Git ÊÇÒ»ÖÖ°æ±¾¿ØÖÆÏµÍ³, ÏȲ»Ì¸ Git ÊÇÈçºÎÉè¼ÆµÄ, Èç¹ûÈÃÎÒÀ´Éè¼ÆÒ»¸ö°æ±¾¹ÜÀíϵͳ, ¸ÃÈçºÎÏÂÊÖ?

Éè¼ÆÒ»¸ö×î¼òµ¥µÄ°æ±¾¿ØÖÆÏµÍ³

Õâ¾ÍÊÇÒ»¸ö¼òµ¥´Ö±©µÄ°æ±¾¿ØÖÆÏµÍ³, ¼òµ¥µÄÎļþ¿½±´¼ÓÖØÃüÃûÒѾ­ÄÜÂú×ã¶ÔÓÚ±ÏÒµÂÛÎĵİ汾¿ØÖÆ, µ½×îºó, ÄÜÄóöÒ»¸öƯÁÁµÄ±ÏÒµÂÛÎÄÖÕ°å¼´ÍòÊ´󼪡£

ÉÏÃæµÄÿһ¸ö°æ±¾¶¼ÊÇ»ùÓÚÉÏÒ»¸ö°æ±¾Ð޸ĶøÀ´µÄ, ²¢ÇÒµ±Ðµİ汾³öÀ´Ö®ºó, ÀϾɰ汾µÄ¼ÛÖµ¾Í¼¸ºõ²»´æÔÚÁË, ÔÚʹÓà SVN »òÕß Git Ò»¸öÈË¿ª·¢Ð¡ÏîÄ¿»ò¼Ç±Ê¼ÇµÄʱºò, ³¡¾°Óë´ËÀàËÆ¡£

Èç¹û³¡¾°¸´ÔÓÒ»µã¶ùÄØ?

Èç¹ûµ¼Ê¦°ïÎÒÒ»¿é¸Ä, ¶¼»ùÓÚ¡¸±ÏÒµÂÛÎÄ×îÖÕ°æ1.doc¡¹ÐÞ¸Ä, µ¼Ê¦¸Ä³öÁË¡¸C.doc¡¹, ÎҸijöÁË¡¸D.doc¡¹, ÕâʱÈôÏë±£ÁôÁ½ÈËËùÓеÄÐÞ¸Ä, ²¢ºÏ²¢³öÒ»¸öеİ汾¡¸E.doc¡¹, ËÆºõ¾ÍÒª»¨Ð©¹¦·òÁË¡£

Ê×ÏÈÒªÕÒ³öÀ´µ¼Ê¦¸ÄÁËÄÄЩ, ÎÒ¸ÄÁËÄÄЩ;

È»ºó»ùÓÚ¡¸±ÏÒµÂÛÎÄ×îÖÕ°æ1.doc¡¹, °Ñµ¼Ê¦µÄÐ޸ĺÍÎÒµÄÐÞ¸ÄÓ¦ÓùýÀ´;

Èç¹ûµ¼Ê¦µÄÐ޸ĺÍÎÒµÄÐÞ¸ÄÊÇÔÚ²»Í¬µØ·½Ð޸ĵÄ, ÄÇô»¥²»Ó°Ïì, ·Ö±ðÓ¦ÓÃ;

Èç¹ûµ¼Ê¦µÄÐ޸ĺÍÎÒµÄÐÞ¸ÄÔÚͬһ´¦, ҪѡÔñÒÔµ¼Ê¦µÄΪ׼, »¹ÊÇÒÔÎÒµÄΪ׼;

¼´Ê¹µ¼Ê¦µÄÐ޸ĺÍÎÒµÄÐ޸IJ»ÔÚͬһ´¦, µ«ÊÇ·ñ»áÔì³ÉÕûÌåÂß¼­µÄì¶Ü, Òª´ÓÕûÌåÉÏÐÞÕýÂß¼­.

¹þ! Õâ²»¾ÍÊÇ git merge Âï!

²»ºÃÒâ˼, ͼ·Å´íÁË

¹Ø×¢µãµ½µ×ÔÚÄÄÀï?

µ¼Ê¦µÄ¼ÓÈëʹµÃÎÒÃǼòÒ׵ıÏÒµÂÛÎİ汾¿ØÖÆÏµÍ³±äµÃÓеã¶ùÁ¦²»´ÓÐÄ, ÎÒÃDZØÐëСÐÄ´¦Àíµ¼Ê¦µÄÐÞ¸ÄÓëÎÒµÄÐ޸ĶÔÂÛÎı¾ÉíÔì³ÉµÄÓ°Ïì, Èç¹ûÓÖÀ´Ò»¸öÈÈÐÄѧ³¤Í¬Ê±¶ÔÎÒµÄÂÛÎļÓÒÔÖ¸µ¼(ÐÞ¸Ä), ÎÊÌâËÆºõ±äµÃ¸ü¼Ó¸´ÔÓÁË¡£

²»Öª²»¾õÖÐ, ÎÒÃǵĹØ×¢µãÒѾ­´ÓÂÛÎı¾ÉíתÏòÁËÐÞ¸Ä, ¶àÈËͬʱ½øÐÐÐÞ¸ÄʹµÃÎÒ±ØÐëСÐÄ´¦Àíÿ¸öÈ˵ÄÐÞ¸Ä, ²»ÄÜÒÅ©, ²»ÄܳåÍ», Ò²²»ÄÜÂß¼­Ã¬¶Ü, Õâ¼òֱ̫»ìÂÒÁË¡£

Git µÄÉè¼ÆÀíÄî

Àí½â Commit

ͨ¹ý¶ÔÉÏÃæÀý×ӵķÖÎö, ÏàÐÅÄãÒѾ­Ìå»á, ÂÛÎİ汾¿ØÖÆÏµÍ³µÄºËÐĹØ×¢µãÓ¦¸ÃÊÇÐÞ¸Ä, ¶ø²»ÊÇÂÛÎı¾Éí¡£

ÈÃ˼·»Øµ½ Git ÉÏÀ´, Git ·Ö֧ͼÖеÄÿ¸öµãÓÉgit commitÃüÁî²úÉú, ²¢ÇÒ»á²úÉúÒ»¸öΨһµÄsha1Öµ, Òò´Ë¿ÉÒÔͨ¹ýsha1ÖµÀ´Î¨Ò»È·¶¨Ò»¸öÌá½»µã¡£

ÔÚÉÏͼÖÐ, BµãÓ¦ÓÐÁ½ÖÖº¬Òå :

±íʾһ¸ö¿ìÕÕ, ¼´ÏîÄ¿¹¤³ÌËùÓÐÎļþÔÚÕâÒ»¿ÌµÄ״̬;

±íʾһ¸ö²îÒì, ¼´B״̬ÓëA״̬ÎļþµÄ²îÒì, Òà³Æ×÷²¹¶¡(patch)¡£

Àà±ÈÓÚ±ÏÒµÂÛÎÄ, ¿ìÕÕÒ²¾ÍÊDZÏÒµÂÛÎÄ×îÖÕ°æ1.docÂÛÎı¾Éí, ²îÒìÒ²¾ÍÊÇÐÞ¸Ä.

ÈçºÎÌåÏÖBµãµÄÕâÁ½¸öÊôÐÔ? (ÎÒÃÇÓÃ[B]À´±íʾBµãµÄsha1Öµ)

»Øµ½BµãµÄ¿ìÕÕ: git checkout [B]

²é¿´BµãÓëÉÏÒ»¸öÌá½»µãµÄ²îÒì: git show [B]

ʹÓÃgit checkoutÃüÁîÎÒÃÇ¿ÉÒÔÔÚÕû¸ö Git Ìá½»ÀúÊ·ÉϵÄËùÓпìÕÕ°æ±¾´©Ëó, Äã¿ÉÄÜÌý¹ý˵HEADÖ¸Õë, git checkoutÕýÊÇͨ¹ýŲ¶¯HEADÖ¸ÕëÀ´´ïµ½¿ìÕÕÇл»µÄÄ¿µÄ, Èç¹û¶à´Î´©Ëóºó, ÄãÃÔʧÁË×Ô¼º, ÕÒ²»µ½µ±Ç°ÔÚÄÄÒ»¸ö¿ìÕÕ, Çë²é¿´ Git ·Ö֧ͼ, ÕÒµ½HEADÖ¸Õë, Õâ¾ÍÊÇÄãËù´¦µÄ¿ìÕÕ°æ±¾¡£

¿ÉÒÔ¿´µ½, git showÃüÁîÍêÕûµÄչʾÁËBµãÓëÆäÉÏÓнڵãAµãµÄ²îÒì, Git ×÷Ϊһ¸öÃæÏòÔ´ÂëµÄ°æ±¾¿ØÖƹ¤¾ß, ½«²îÒìÒÔÐÐΪ»ù±¾µ¥Î»±íʾÊDZȽϺÏÀíµÄÒ»¸öÑ¡Ôñ. ÕâÒ²Òâζ׎« Git ÓÃÓÚ·ÇÎı¾×ÊÔ´µÄ°æ±¾¿ØÖƹ¤¾ß»òÐí²»ÊÇ×î¼ÑÑ¡Ôñ¡£

¶ÔÒ»¸öÌá½»µãº¬ÒåµÄË«ÖØ½âÊÍ¿´ÉÏÈ¥ºÜ²»´í, ²»¹ý, ÔÚÕâ¸ö·Ö֧ͼÉÏ, EµãÓеã¶ùÌØÊâ, Ö»ÓÐEµãÓÐÁ½¸öÉÏÓνڵãCºÍD, ³¢ÊÔÖ´ÐÐgit show [E], ·¢ÏÖ²¢Ã»ÓÐÏñÆäËû½ÚµãÒ»Ñù, ÏÔʾ³ödiffÐÅÏ¢, Õâ˵µÃ¹ýÈ¥, ²»È»µ½µ×¸ÃÏÔʾEºÍCµÄ²îÒì, »¹ÊÇEºÍDµÄ²îÒìÄØ?

Õâʱ¾ÍÖ»ÄܽèÖú Git µÄÁíÒ»¸öÃüÁîgit diff [X] [Y]À´ÏÔʽÉùÃ÷Òª±È½ÏÈÎÒâÁ½¸ö½ÚµãXºÍYµÄ²îÒì¡£

שͷÓÐÁË, ³Ç±¤ÔÚÄÄÄØ?

ÈÕ³£Ò»Ìì

ÔÚһЩÏîÄ¿×éÀï, Äã¿ÉÄܻᱻ¸æ½ëµÀ: "¼ÇµÃÿÌìϰàǰÌá½»ÏÂÄãµÄ´úÂë." Ò²ÐíËûÃÇÒѾ­·¢ÏÖ: "Ôõô´úÂëÓÖ³åÍ»ÁË", "ÎÒдµÄ´úÂëÔõô±»¸²¸ÇÁË", »á¶ÔÄã¶àÌáÒ»¾ä¸æ½ë: "¼ÇµÃÌύǰÏÈÀ­Ò»Ï´úÂë, ±ð°ÑͬÊÂдµÄ¸²¸ÇÁË". ÓÚÊÇ, Git ¾Í½ö½ö³ÉΪÁËÒ»¸öÔ¶³Ì´úÂë²Ö¿â¡£

²úÆ·: "ÉÏ´ÎÌáµÄ3¸öÐèÇó, ½ñÌì¾ÍÉÏ1¸ö, ÁíÍâ2¸ö²»ÓÃÁË"

¿ª·¢: "ÎÒ´úÂë×òÌ춼дÍêÌá½»ÁË, ÄÇÖ»ÄܰÑ2¸öÐèÇó´úÂëɾµôÁË. ÎÒ¿ÉÊÇÓдúÂë½àñ±µÄ, ²»ÄÜÈÃÎÒµÄÏîÄ¿ÀïÕâô¶àÎÞÓôúÂëÁô×Å"

[Á½Ð¡Ê±ºó]

²úÆ·: "ÎÒÏëÁËÒ»ÏÂ, B¹¦ÄÜ»¹ÊÇÒªÉϵÄ, Ò»¹²ÉÏ2¸ö¹¦ÄÜ"

¿ª·¢: "ÐаÉ, ÎÒÔÙ°Ñ´úÂ뿽±´»ØÀ´"

[ÁÙÉÏÏß]

²úÆ·: "²»ÐÐ, ϵôB¹¦ÄÜ, ÉÏC¹¦ÄÜ! ¿ì!!!"

¿ª·¢: "W-- ÎÒ·ð´È±¯!"

[ÉÏÏߺó]

ÀÏ´ó: "C¹¦ÄÜÓÐbug, Á¢¿Ì»Ø¹ö"

¿ª·¢: "ºÃ, ÎÒÍ˻ص½Éϴη¢°æµÄ¿ìÕÕ"

ÕâÊÇÈÕ³£µÄÒ»Ìì, Ò²ÊÇÔã¸âµÄÒ»Ìì, ´ó°ÑµÄʱ¼äÀË·ÑÔÚ´úÂëµÄɾ³ýºÍ¿½±´ÉÏ, ¶ø²»ÊÇÔÚ´´ÔìÉÏ¡£

ÎÊÌâ³öÔÚÄÄÁË?

ÉϽÚÎÒÃÇÌáµ½, Git ÿ¸ö Commit ¶¼ÓÐÁ½ÖÖÊôÐÔ, ¿ìÕպͲ¹¶¡. ÔÚÉÏÃæµÄʹÓó¡¾°ÖÐ, Git Ö»·¢»Ó³öÁ˲»µ½Ò»²ã¹¦Á¦, ´ó¼Ò¹Ø×¢µÄ½ö½öÊÇ×îÐÂÌá½»µãµÄ¿ìÕÕ, µ±È», Õâ¸ö¿ìÕÕÊǼ«ÎªÖØÒªµÄ, ÖØÒªµ½ÎÒÃǵÄHEADÖ¸Õ뼸ºõ×ÜÊÇÔÚÖ¸ÏòËû, ÖØÒªµ½ÎÒÃÇ»á°ÑËû³ÆÎª×îеÄmaster·ÖÖ§¡£

ÎÒÃǰѹØ×¢µã×ªÒÆµ½ Git µÄ²¹¶¡ÊôÐÔÉÏÀ´, ÄãÿÌìÌá½»µÄ commit ´ú±í×ÅÄãÕâÒ»ÌìµÄ¹¤×÷³É¹û, ÄÇôÃèÊöÔõôд?

"ÕÅÈý20190622¹¤×÷"? »¹ÊÇ "Ôö¼ÓÁËA¹¦ÄÜ, B¹¦ÄÜ, C¹¦ÄÜдÁËÒ»°ë"

»òÐíºóÕßÉÔ΢ºÃÒ»µã¶ù, ÖÁÉÙÔÚ¼¸Ììʱºò²é¿´ Git Ìá½»¼Ç¼ʱÄÜһĿÁËÈ»µÄÖªµÀÕâ´ÎÌá½»°üº¬Ê²Ã´Ð޸ġ£

»¹¼ÇµÃgit diffµÄÊä³öÂð? ÊÇÐм¶µÄ²îÒì¡£ Ϊʲô²»ÊÇÎļþ¼¶±ð, »òÕß×Ö·û¼¶±ð? ÿ´Î´úÂëÌá½»ÒÔÌìΪµ¥Î»ÕæµÄºÏÊÊÂð? µ±È»²»ºÏÊÊ, ÿ¸ö commit µÄ×î¼ÑÁ£¶ÈÓ¦¸ÃÊÇÏà¶Ô¶ÀÁ¢µÄÌØÐÔ(feature), ±ÈÈçÉÏÎÄÌáµ½µÄA, B, CÈý¸ö¹¦ÄÜ¡£

ÀíÏëÇé¿öÏÂ, A, B, CÊÇÈý¸ö¶ÀÁ¢µÄ¹¦ÄÜ, ·Ö±ð×÷ΪÈý´Î commit¡£

¸üºÃµÄ×ö·¨ÊÇʲô?

»¹¼ÇµÃÂð? A, B, C¶¼ÊǶÀÁ¢µÄ²¹¶¡(patch), ÄÇôA, B, CµÄ´ÎÐòÊÇûÓйØÏµµÄ, Ò²¾ÍÊÇ˵C1, B2, A3µÄ´úÂë¿ìÕÕÓ¦¸ÃÊÇÒ»ÑùµÄ. ²»ÐÅÊÔÒ»ÏÂ, ¿ÉÒÔÓÃgit diffÑéÖ¤½á¹û¡£

µ±ÒªÇó³·µô B ¹¦ÄÜʱ, Èç¹û¿ÉÒÔÖ±½Óɾµô B Õâ´ÎÌá½», ÄÇô˲¼ä¾Í´ïµ½Ä¿µÄÁË. µ«ÊÇ, ÓÐÁ½µãÊÇÐèÒª¿¼ÂÇµÄ :

Ò»°ãÀ´Ëµ, ´ó¼ÒͬʱʹÓõķÖֻ֧ǰ½ø, ²»ºóÍË, ¼´²»ÄÜ´Û¸ÄÀúÊ·;

ÈôÕæµÄ´Û¸ÄÁËÀúÊ·, ÄÇô B ¹¦ÄܵĴúÂë¾Í´ÓÌá½»¼Ç¼ÉÏÏûʧÁË, ÍòÒ»ÐèÒªÔÙ´ÎÌí¼Ó B ¹¦ÄÜ, Õ⽫ÊDZ¯¾ç¡£

ÎÒÃÇ¿ÉÒÔ»»Ò»ÖÖ˼·À´´ïµ½ÏàͬµÄÄ¿µÄ: ¹¹ÔìÒ»¸ö²¹¶¡, ¸Ã²¹¶¡BÍêÈ«Ïà·´, ¼´°ÑBÔö¼ÓµÄÐÐɾ³ý, ÐÂÔöBɾ³ýµÄÐС£µ±È», ÕâÒ»Çж¼ÊÇ×Ô¶¯µÄ, ֻҪʹÓÃgit revert [B]ÃüÁî, ¼´¿É´´½¨Ò»¸öBµÄ·´ÏòÌá½»¡£ÏÔÈ», -B1ºÍC2µÄ¿ìÕÕ״̬ÊÇÒ»ÖµÄ, ¿ÉÒÔÓÃgit diffÃüÁîÑéÖ¤¡£

µ±ÒªÇó°Ñ B ¹¦ÄܼӻØÀ´Ê±, ÊǸüÀ³öÉñÆ÷ÁËÂð?

µ±È»²»ÊÇ, ÎÒÃÇ¿ÉÒÔÔÙÖÆ×÷Ò»¸ö-BµÄ·´Ïò²¹¶¡--B, ¸º¸ºµÃÕýÂï¡£²»¹ýÕâ¿´ÆðÀ´¹Ö¹ÖµÄ, Èç¹ûÄܸ´ÖÆÒ»·ÝB²¹¶¡ÖØÐ´òÉϾͺÃÁË, git cherry-pick [B]ÕýÊÇÎÒÃÇÒªÕҵĴ𰸡£ÏÔÈ», --B1, B2, C3µÄ¿ìÕÕ״̬±ØÈ»ÊÇÒ»Öµġ£

×¢Òâ : ͨ¹ýgit cherry-pick¸´ÖƵÄBºÍÔ­ÓеÄBÓв»Ò»ÑùµÄsha1, ¼´±ãÕâÁ½¸ö commit µÄÄÚÈÝÏàͬ¡£

¼ÈÈ»ÕâÈýÖÖ״̬Êǵȼ۵Ä, ÄÇô×÷ΪÇãÏòÓÚÍêÃÀÖ÷ÒåµÄÎÒÃÇ, ¸üÏ£ÍûÔÚ Git Ìá½»ÀúÊ·ÉÏÁôϵÄÊÇ×îºóÒ»Öָɾ»µÄ״̬.¡£µ«ÎÒÒѾ­ÔÚB2״̬ÁË, Ôõô²ÅÄÜʵÏÖC3? ÏàÐÅÄãÒѾ­Ïëµ½Á˰취, »Øµ½×î³õµÄ¼ì³öµã, ͨ¹ýcherry-pickʰȡA, B, C3¸ö²¹¶¡, ¼´¿É´´½¨Ò»¸ö¸É¾»µÄÌá½»ÀúÊ·¡£»òÐíÄ㻹Ìý˵¹ýgit rebase, ÕâÊÇÒ»¸ö·Ç³£Ç¿´óµÄÃüÁî, ÎÒÃÇ»áÔÚºóÎÄÌÖÂÛ¡£

ÖØÐÂÈÏʶ·ÖÖ§

µ±Ìá³öA, B, CÈý¸öÐèÇóµÄʱºò, Èç¹û·ÖÅɸøÈý¸öÈË, ÿ¸öÈ˸ºÔðÒ»¸ö¹¦ÄÜ, ͬʱ»ùÓÚ×îеĴúÂ뿪·¢, ÄÇô½«»á½øÈëÕâÖÖ״̬£º

µ«ÊÇ, Èç¹ûÎÒÃÇ×ñÑ­master, develop·ÖÖ§Ä£ÐÍ¿ª·¢, ÄÇôÓÀÔ¶²»»áÔÚ Git ·Ö֧ͼÉÏ¿´µ½ÕâÖÖ״̬¡£

ÎÒÃÇÖÕÓÚÌÖÂÛµ½·ÖÖ§ÁË, »òÐíÄãÒѾ­·¢ÏÖ, ´ó¼ÒÔÚ̸ÂÛ Git µÄʱºò, ·ÖÖ§ËÆºõÊÇ×îÖØÒªµÄÊÂÇé, ¼¸ºõÈý¾ä²»Àë·ÖÖ§; ¶øÎÒÃÇ˵ÁËÕâô¶à, »¹Ã»ÓÐÌá¼°·ÖÖ§Õâ¼þÊÂ; ÉÏÃæËùÓеIJåͼÖÐ, ¾¡¹ÜÎÒ°ÑËû³Æ×÷·Ö֧ͼ, ȴûÓзÖÖ§±ê¼Ç, Õâ²¢²»Ó°ÏìÎÒÃÇ¶Ô Git µÄÀí½â¡£

ÔÙ´ÎÖØÉêÒ»ÏÂ, ÎÒÃǵĹØ×¢µãÊÇcommit, ÓÃΨһµÄsha1±êʶ, ËûÓÐÁ½ÖÖº¬Òå¿ìÕպͲ¹¶¡¡£

µ«ÊÇ, sha1²»ÊÇÒ»¸öºÃ¼ÇµÄ±êʶ, ÎÒÃÇÐèÒª¸øÒ»Ð©ÖØÒªµÄcommit±ðÃû¡£ Ç°ÃæÎÒÃÇÒѾ­Ìáµ½ÁËHEADÖ¸Õë, ËûÖ¸Ïòµ±Ç°µÄcommit, Õâ¾ÍÊÇÒ»¸ö±êʶ. ³ý´ËÖ®Íâ, Git »¹ÓÐÁ½ÖÖÖØÒªµÄ±êʶ, ·ÖÖ§(branch)ºÍ±êÇ©(tag)¡£

·ÖÖ§ºÍ±êÇ©ÊÇij¸öcommitµÄ±ðÃû, Òò´Ë, ÔÚ Git ÃüÁîÖпÉÒÔʹÓ÷ÖÖ§ºÍ±êÇ©À´´úÌæcommitµÄsha1Öµ¡£±ÈÈçÇл»µ½Ä³¸ö·ÖÖ§, git checkout [branch-name], Æäʵ¾ÍÊÇÇл»µ½ÁËÕâ¸öcommitµãµÄ¿ìÕÕ¡£

ʹÓ÷ÖÖ§Çл»ºÍʹÓÃsha1Çл»»áÓÐһЩ²îÒì, Git »áά³ÖÒ»¸ö Context, ¼Ç¼Á˵±Ç°¼¤»îµÄ·ÖÖ§, Èç¹ûÄãµÄÃüÁîÌáʾ·ûÉÏÓÐ Git ·ÖÖ§µÄ±êʶ(macOSÖÕ¶ËĬÈÏÓиñêʶ), ½«»á¿´µ½ÕâÖÖ²îÒì¡£

·ÖÖ§ºÍ±êÇ©¶¼¿ÉÒÔ×÷ΪÈκÎÒ»¸öcommitµÄ±êʶ, ËûÃÇÇø±ðÔÚÓÚ:

·ÖÖ§(branch)¾ßÓÐǰ½ø¹¦ÄÜ, ¿ÉÒÔǰ½øµ½ÏÂÓÎcommit½ÚµãÉÏ;

±êÇ©(tag)½ö½ö°ó¶¨ÔÚÒ»¸öcommit, Ö÷ÒªÓ¦Óó¡¾°ÊÇ×÷Ϊ°æ±¾·¢²¼µÄ±êʶ¡£

ÎÒÃÇÖ÷ÒªÌÖÂÛ·ÖÖ§(branch). ·ÖÖ§ÔõÑùǰ½øÄØ?

µ±Ö´ÐÐgit commitºó, ·ÖÖ§¾Íǰ½øÁË;

Ö´ÐÐgit mergeºó, ·ÖÖ§»áǰ½ø¡£

µ± Git ¹ØÁªµ½Ô¶³Ì²Ö¿âʱ, ÿ¸ö·ÖÖ§¿ÉÒÔÉèÖÃÒ»¸öÔ¶³Ì×·×Ù·ÖÖ§git branch --set-upstream-to=[origin]/[branch], µ±Ö´ÐÐgit fetch, git pull, git pushʱ, ĬÈ϶¼ÊÇÔÚ²Ù×÷¹ØÁªµÄÔ¶³Ì·ÖÖ§¡£ Ò»¸ö±¾µØ Git ²Ö¿â¿ÉÒÔ¹ØÁª¶à¸öÔ¶³Ì²Ö¿â, ϰ¹ßÉÏĬÈϲֿâ»òÕßÖ÷²Ö¿â½Ð×öorigin¡£

µ±±¾µØmaster·ÖÖ§ÂäºóÔ¶³Ìorigin/master·Ö֧ʱ, Ò»°ã»áÖ´ÐÐgit pullÃüÁî¸ú½ø, µ«ÕâºóÃæµ½µ×·¢ÉúÁËʲô?

git pullÃüÁîÆäʵÊǸögit fetchºÍgit mergeµÄ×éºÏÃüÁî, git fetchÊǽö½öÀ­È¡Ô¶³Ì·ÖÖ§µÄ½ø¶È, ÉÏͼÕâÖÖ״̬, Ô¶³Ìorigin/master³¬Ç°Á˱¾µØmaster, ±ØÈ»ÊÇÖ´ÐÐÁËgit fetchºó²ÅÄÜ¿´µ½, Ò»°ãÖ§³Ö Git µÄͼÐι¤¾ß»òÕß IDE »áÔÚºǫ́¶¨ÆÚ×öÕâÏ×÷, ÔÚÔ¶³Ì·ÖÖ§¸üкó¼°Ê±Í¨Öª¡£

µ±HEADÖ¸ÕëÔÚmasterʱ, Ö´ÐÐgit merge origin/master, master¼´»áǰ½øµ½origin/master¡£

Merge ²»ÊǺϲ¢·ÖÖ§Âð? Ôõô±ä³ÉÁË·Ö֧ǰ½ø?

ΣÏÕµÄ Merge

ÎÒ°Ñgit merge¶¨ÒåΪ¸ßΣ²Ù×÷! Ò»°ã¿ª·¢ÈËÔ±(·ÇÏîÄ¿leader)Ó¦¾¡¿ÉÄܱÜÃâʹÓÃÖ±½Ó»ò¼ä½ÓʹÓøÃÃüÁî¡£

Ìáµ½ Merge, »òÐíÏÂÃæµÄÕâÖÖ³¡¾°ÊÇÎÒÃǵÚһʱ¼äÏëµ½µÄ :

µ±ÎÒ´¦ÔÚmasterʱ, Ò²¾ÍÊÇHEADÖ¸ÕëÖ¸Ïòmaster, Ö´ÐÐgit merge iss53 : ÈôÎÞ³åÍ», ¼´»áµÃµ½ÏÂͼ½á¹û; ÈôÓгåÍ», Ôò»áÌáʾÊÖ¶¯½â¾ö, È»ºó×÷Ϊһ´ÎÐ嵀 commit, ͬÑùÒ²»áµÃµ½ÏÂͼ½á¹û¡£

Ò²ÐíÄã·¢ÏÖÁË, ÕâÀï·Ö֧ͼ·ç¸ñ±ä»¯ÁË, ²»½ö½öÊÇ»­·çµÄת±ä, ×îÖØÒªµÄÊǼýÍ··½Ïò. ÕâÁ½ÕÅͼÊÇÎÒ´Ó Git ¹Ù·½Îĵµ¸´ÖƹýÀ´µÄ, ËùÒÔÇë²»ÒªÖÊÒÉËûµÄȨÍþ¡£ÄÇôÊÇÎÒ֮ǰµÄ¼ýÍ··½Ïò»­´íÁËÂð?

Óо仰Ôõô˵À´×Å? ȨÍþ¾ÍÊÇÓÃÀ´ÖÊÒɵÄ! ²»¹ýÖÊÒÉ֮ǰ, ÎÒÃÇÏȳ¢ÊÔÀí½â¡£

µ±¼ýÍ·ÓÉÉÏÓνڵãÖ¸ÏòÏÂÓνڵã, ¾ÍÏñÎÒ×î³õµÄ²åͼÄÇÑù. ´ÓÕû¸ö·Ö֧ͼÉÏ, ÎÒÃÇÄÜ¿´µ½ÒòΪÍŶӵÄŬÁ¦, ·ÖÖ§ÕýÔÚǰ½ø, ÏîÄ¿ÕýÔÚ½øÕ¹. Ò²¾ÍÊÇ˵, ¸ü·ûºÏºê¹ÛÉϵÄÇ÷ÊÆ;

µ±¼ýÍ·ÓÉÏÂÓνڵãÖ¸ÏòÉÏÓνڵã, ¾ÍÏñ¹Ù·½ÎĵµµÄ²åͼÄÇÑù. »¹¼ÇµÃÿ¸öcommitµÄº¬ÒåÂð? ¿ìÕպͲîÒì, ÊǸýڵãÓëÆäÉÏÓνڵãµÄ²îÒì, ËùÒÔÔÚ Git ÄÚ²¿´æ´¢Ê±, ÿ¸öcommitÒ»¶¨»á±£ÁôÒ»¸öÖ¸Õë, Ö¸ÏòÆäÉÏÓνڵã. Ò²¾ÍÊÇ˵, ÕâÑùµÄÉè¼Æ¸üÄÜÌåÏÖ Git µÄÄÚ²¿Éè¼Æ.

ºÃÁË, ÎÒÃǸùØ×¢ Merge µ½µ××öÁËʲô:

¹¹ÔìÒ»¸ö½ÚµãC6, Õâ¸ö½Úµã½«»áÓÐÁ½¸öÉÏÓνڵã: C4, C5;

½«·ÖÖ§masterÓÉC4ÒÆ¶¯µ½C6¡£

Õâ¿´ÆðÀ´Ã»ÓÐʲôÄѵÄ, Git µÄdiff¹¦ÄÜ»á×Ô¶¯°ïÎÒÃǼÆËã²îÒì, Ê£ÏµĹ¤×÷Ò²ÊÇ Git ĬĬ°ïÎÒÃÇÍê³ÉµÄ¡£µ«ÊÇ, Ä㻹¼ÇµÃÎÒÃǵÄÂÛÎİ汾¿ØÖÆÏµÍ³Âð?

Èç¹ûC4ºÍC5¶Ôͬһ¸öÐÐ×öÁËÐÞ¸Ä, ¸ÃÈ¡ÄĸöÄØ? È¡ÁËC4µÄ, ÄÇôC5ÆäËû´úÂ뻹Äܹ¤×÷Âð? »òÕß·´Ö®. ÓÖ»òÕßÁ½Õß¶¼²»ÄÜÈ¡, ¶øÓ¦¸ÃÖØÐ´ÕâÐдúÂë, ÒÔ¼æÈÝÁ½ÕßµÄÐ޸ġ£

¼´±ãËûÃÇÐ޸ĵĵط½»¥²»½»²æ, ÄÇô»á²»»áÕÕ³ÉÕûÌåÉϵÄÂß¼­´íÎóÄØ? ±ÈÈçC4ÐÞÕýÁËÒ»¸ö³ÉÔ±±äÁ¿µÄƴд´íÎó, C5ÔÚÔöµÄ´úÂëÖл¹ÔÚÒýÓÃÔ­ÓеıäÁ¿Ãû, Õâʱ¹¹ÔìC6ʱ²¢²»»áÓÐÈκγåÍ»ÌáÐÑ, µ«¹¹Ôì³öµÄ´úÂëÈ´ÊÇÎÞ·¨Í¨¹ý±àÒëµÄ¡£

»òÐíÄãÒѾ­Ï°¹ß, ÿµ±ÎÒÃÇÓöµ½ÎÊÌâʱ, Git ¼¸ºõ¶¼ÄܸøÎÒÃÇÌṩ×Ô¶¯»¯µÄ½â¾ö·½°¸¡£ ±ÈÈç : µ±ÐèÒª¶Ô±È²îÒìʱ, ¿ÉÒÔʹÓÃgit diff; µ±ÐèÒªÖÆ×÷·´Ïò²¹¶¡Ê±, ¿ÉÒÔʹÓÃgit revert; µ±ÐèÒª¸´ÖƲ¹¶¡Ê±, ¿ÉÒÔʹÓÃgit cherry-pick¡£ÄÇô, ÏÖÔÚÕâÖÖ³¡¾°, Git ÓÐʲôÃüÁîÄܰïÖúÎÒÃÇÄØ? ºÜÒź¶, ûÓÐ, Git ÄܸøÎÒÃǵĽö½öÊǵ±³öÏÖÐм¶³åͻʱ, ¸øÎÒÃÇÒ»¸ö conflict Ìáʾ, ³ý´ËÖ®Íâ, Ö»ÄÜ¿¿ÎÒÃÇÀ´·¢Ïֺͽâ¾öÁË¡£

ÎÒÃÇÏàÐÅ, ÔÚÄã»òÄãµÄͬÊÂÌá½»C4, C5ʱ, ËûÃǶ¼ÊÇÒ»¸ö¿ÉÒÔ¹¤×÷µÄ°æ±¾, ÖÁÉÙÓ¦¸ÃÄܹ»Õý³£±àÒëºÍͨ¹ý²âÊÔÓÃÀý¡£µ«ÊÇÈç¹û´æÔÚÎÒÃÇÃèÊöµÄµÚ¶þÖÖ³¡¾°, ºÏ²¢C6ʱûÓгåÍ», µ«È´ÎÞ·¨Í¨¹ý±àÒë¡£

ÒÔÉÏÕýÊÇÎÒ°Ñ merge ²Ù×÷¶¨ÒåΪ¸ßΣ²Ù×÷µÄÔ­Òò¡£

¼ÈÈ» Git ²»ÄܸøÓèÎÒÃǰïÖú, ÄDZØÐëҪѰÕÒ»º½â merge ´øÀ´µÄDZÔÚΣÏյĴëÊ©ÁË¡£

Ò»¸ö·½·¨ÊǰÑΣÏÕÅ׸ø¸üÓо­ÑéµÄÈ˵ġ£ ¾ÍÏñ±¾½Ú¿ªÊ¼Ìáµ½µÄÄÇÑù, Ò»°ã¿ª·¢ÈËÔ±(·ÇÏîÄ¿leader)Ó¦¾¡¿ÉÄܱÜÃâʹÓÃÖ±½Ó»ò¼ä½ÓʹÓøÃÃüÁî¡£ËûÃDzȹý¸ü¶àµÄ¿Ó, Ôںϲ¢·Ö֧ʱ»á¿¼Âǵĸü¶à¸üÈ«Ãæ, ²¢ÇÒËûÃǽ«¶Ô±¾´ÎºÏ²¢µÄ³É¹û(¼´Ð嵀 commit, ¾ÍÏñÉÏͼÖеÄC6)¸ºÔð¡£

¼ÆËã»ú¹¤³ÌÖÐ×î²»¿É¿¿µÄ²¿·ÖÊÇÈ˼þ¡£ ÔÙϸÖµÄÈËÒ²Óз¸´íµÄʱºò, ²¢ÇÒÏà±ÈÓÚ¼ÆËã»úÀ´Ëµ, Õâ¸ö¸ÅÂÊÒªÔ¶Ô¶¸ßµÄ¶à, Òò´Ë»¹Ó¦¸ÃÒýÈë×Ô¶¯»¯²âÊÔ»úÖÆ¡£±ÈÈç³ÖÐø¼¯³É(CI), ÿµ±Ò»´ÎºÏ²¢½áÊøºó, ×Ô¶¯´¥·¢±àÒëºÍ²âÊÔ, ²¢·¢ËͲâÊÔ±¨¸æ¡£

×ÜÊǰÑÕâЩ·çÏÕÍÆ¸øÓо­ÑéµÄÈË, ÕâÊDz»¹«Æ½µÄ¡£ ¿öÇÒ, ×÷Ϊ¾­ÑéǷȱµÄÎÒÃÇ, ûÓлú»á´¦Àí·çÏÕ, ÎÒÃÇÔõô»ýÀÛ¾­ÑéÄØ? ×îÖØÒªµÄÊÇ, ÎÒÃÇÄÜ×öµÄ½ö½öÊÇʺ󲹾ÈÂð? Äܲ»ÄÜ´Ó¸ùÔ´ÉϱÜÃâÕâÖÖ·çÏÕ?

ÎÒÃÇÀ´¿´Ò»ÏÂÁíÒ»ÖÖ merge ³¡¾°:

²åͼ·ç¸ñÓÖ»»ÁË, Õâ´ÎµÄ²åͼÀ´×Ô ºï×Ó¶¼Äܶ®µÄ Git ÈëÃÅ

bugfix·ÖÖ§´Ómaster¼ì³ö, ºÜÐÒÔË, master·ÖÖ§»¹Ã»ÓиüÐÂ. Õâʱ, ½«bugfixºÏÈëmaster¡£

ÎÒÃÇÊ×ÏÈÈÃHEADÖ¸ÕëÖ¸Ïòmaster, È»ºóÖ´ÐÐgit merge bugfix --no-ff, ·Ö֧ͼ½«»á±ä³ÉÕâ¸öÑù×Ó¡£

ûÓÐÒâÍâ, Õâ¸ùÎÒÃÇÉÏÃæ¶Ô merge ÐÐΪµÄÃèÊöÊÇÒ»ÑùµÄ : ¹¹ÔìÒ»¸öÐ嵀 commit ½ÚµãC, ÆäÉÏÓνڵã·Ö±ðΪBºÍY, È»ºó½«master·ÖÖ§±êǩָÏòC¡£Ïà½ÏÓÚÉÏÃæµÄ³¡¾°, ÕâÖÖÇé¿öϹ¹ÔìCÊÇÒ»¶¨²»»á²úÉú³åÍ»µÄ.¡£ÎªÊ²Ã´?

ÎÒÃÇ´Ó commit µÄ²¹¶¡ÊôÐÔÈëÊÖ, °ÑB->C¿´³ÉÒ»¸ö²¹¶¡, ÄÇôÎÒÃÇ¶Ô merge ¶¯×÷µÄÆÚÍû½á¹ûÓ¦¸ÃÊÇB->XºÍX->YÁ½¸ö²¹¶¡ÀÛ¼Æ×÷Óá£Ò²¾ÍÊÇ˵:

B->C = B->X + X->Y (1)

µ«ÊÇ´ÓͼÖÐ, ´ÓBµ½CÓÐÁ½Ìõ·¾¶, Ò»ÌõÊÇÖ±´ï, ÁíÒ»ÌõÊÇ·Ö²½:

B->C = B->X + X->Y + Y->C (2)

ÄÇôY->CÄØ? ÈôÏëÈÃÎÒÃÇµÄÆÚÍû(1)ºÍÊÂʵ(2)¶¼³ÉÁ¢, Y->C±ØÐëÊÇÊÇÒ»¸ö¿Õ²¹¶¡, Ò²¾ÍÊÇ˵, CºÍYµÄ¿ìÕÕ״̬ÊÇÍêȫһÖµÄ, ¿ÉÒÔÓÃgit diff [C] [Y]ÑéÖ¤Ò»ÏÂÎÒÃǵÄÍÆÂÛ¡£

ΪʲôҪÓÐÕâ¸ö¿Õ²¹¶¡, Ö±½Ó½«Ê¹ÓÃY½Úµã²»ÐÐÂð? µ±È»¿ÉÒÔ!

¹Û²ìÒ»ÏÂÎÒÃÇµÄ merge ÃüÁî, ÓÐÒ»¸ö¸½¼Ó²ÎÊý--no-ff, Õâ¸ö²ÎÊýÇ¿ÖÆ¹ØµôÁË fast-forward ÌØÐÔ. Èç¹ûÎÒÃDz»Ìí¼ÓÕâ¸ö²ÎÊý, Ö±½ÓÖ»ÓÃgit merge bugfix, ÄÇôµÃµ½µÄ½á¹û½«ÊÇÕâÑùµÄ:

masterÖ±½Ó±»Ö¸ÏòÁËY½Úµã¡£ »¹¼ÇµÃÂð, È÷Ö֧ǰ½øµÄµÚ¶þÖÖ·½·¨ÊÇʲôÀ´×Å? git merge, Õâ²»ÊǾÍÀý×ÓÂï!

Ö´ÐÐgit merge [X]¶¯×÷ʱ, ÈôÎÞÐè¹¹ÔìÐ嵀 commit ½Úµã, Ö±½Ó½«µ±Ç°·ÖÖ§±êǩǰ½øµ½ÒªX½Úµã, Õâ¾ÍÊÇËùνµÄ fast-forward ÌØÐÔ¡£

ÕâÖÖÇé¿öÏ嵀 merge ¶¯×÷È÷çÏÕ´ó´ó½µµÍ¡£ Ê×ÏÈ commit X, YµÄÌá½»ÕßÒª¶ÔÁ½´ÎÐ޸ĸºÔð, ËûÃÇÓÐÔðÈα£Ö¤Ã¿´ÎÌá½»ºóµÄ´úÂëÊÇ¿ÉÒÔͨ¹ý±àÒëºÍ²âÊÔµÄ; Æä´Î, ÏîÄ¿¸ºÔðÈËÔÚ½«bugfix·ÖÖ§ºÏÈëmaster֮ǰ, Ö»ÐèÈ·±£YµÄ¿ìÕÕ°æ±¾ÊÇÕýÈ·µÄ, ÒòΪ merge ¶¯×÷½«²»»á´øÀ´ÈκÎÔٴεıä¸ü, Ö»Êǽ«·Ö֧ǰ½øµ½YµÄ¿ìÕÕ, Õâ´ó´ó½µµÍÁË merge µÄ·çÏÕ¡£

ÔÙ´ÎÌáÐÑ, É÷ÓÃgit pull, ÕâÌõÃüÁîÒþº¬ÁËgit fetch, git mergeÁ½ÌõÃüÁî¡£Ò»¸ö¸üºÃµÄ×ö·¨ÊÇÏÈgit fetch»ñȡԶ³Ì·Ö֧״̬, µ±ÄãÈ·Èϱ¾µØ¹ØÁªµÄ·ÖÖ§ÄÜÓëÔ¶³Ì·ÖÖ§ÒÔfast-forwardºÏ²¢µÄʱºò, ÔÙÖ´ÐÐgit merge»òÕßgit pull¡£

½¨ÖþÀíÏëµÄ³Ç±¤

ÀíÏëµÄ·Ö֧ͼ

ÎÒÃÇÒѾ­ÕÒµ½ÁËÒ»ÖÖÀ´¾¡Á¿±ÜÃâ merge ·çÏյij¡¾°, ÔÚÕâÖÖ³¡¾°ÏÂ, ÎÒÃǻṹÔì³öÔõÑùµÄ·Ö֧ͼ?

Èç¹ûʹÓà fast-forward ÌØÐÔ, ½á¹û½«ÊÇÕâÑù:

Èç¹ûÎÒÃÇʹÓÃgit merge --no-ff²ÎÊý, ½á¹û½«ÊÇÕâÑùµÄ:

¿´µ½Çø±ðÁËÂð? fast-forward ½á¹û½«»áÊÇÒ»ÌõÒ»Ïß, ÕâÊÇ×î¸É¾»Õû½àµÄ·Ö֧ͼ, µ«ÊÇÏàÓ¦µÄ, ÎÒÃÇÒѾ­ÎÞ·¨Ò»Ä¿ÁËÈ»µÄÇø·Ö³öÄö commit ¹¹³ÉÒ»¸ö¹¦ÄÜ, ±ØÐëͨ¹ý¹æ·¶µÄ×¢ÊÍ(±ÈÈçÉÏͼÖÐÈ«²¿ÒÔ JIRA ±àºÅ¿ªÍ·)À´×ö·ÖÇø; ¶ø--no-ff²ÎÊýËäÈ»È÷Ö֧ͼ±äµÃ¿´ÉÏÈ¥¸´ÔÓÁËÒ»µã¶ù, µ«È´·Ç³£Ö±¹ÛµØ±£ÁôÁË commit ¼¯ºÏºÍ¹¦ÄܵĶÔÓ¦¹ØÏµ¡£

Á½ÖÖ·½Ê½Äĸö¸üºÃ? ÏñÎÄÕÂ×î³õ˵µÄÄÇÑù, ÎÒ²»ÊÇÒ»¸ö¼«¶ËÖ÷ÒåÕß, Á½ÖÖ¸÷ÓÐÓÅÁÓ, Òª·Ö³¡¾°¶Ô´ý¡£

¶ÔÓÚ³¬´ó¹æÄ£µÄ¿ªÔ´ÏîÄ¿À´½², ÿһ¸ö commit ¶¼²»ÊÇËæÒâµÄ, ±ØÐëÒªÓÐ JIRA, ÓʼþÁбí, Github Issue ÁбíµÈÖîÈç´ËÀàµÄÌÖÂÛ, Ã÷È· commit µÄ¹¦ÄܺÍÓ°Ïì, È·±£Ã¿¸ö Commit Ö»×öÒ»¼þÊÂ, ±ä¶¯×îС»¯, È»ºóͨ¹ý Pull Request ·½Ê½ÇëÇóºÏ²¢ÖÁÖ÷²Ö¿âµÄÖ÷Ïß·ÖÖ§¡£ÔÚÕâÖÖÇé¿öÏÂ, ʹÓÃ--no-ffµÄ»°, ¼¸ºõÿ¸ö commit ¶¼»á²úÉúÒ»¸ö¿ÕµÄ merge ½Úµã, ·Ö֧ͼ¾Í±ä³ÉÁ˾â³Ý×´, ´øÀ´µÄÊÕÒæÎ¢ºõÆä΢; ¶ø¹æ·¶ commit ×¢ÊÍ, ²¢ÇÒʹÓà fast-forward »òÐíÊÇÒ»¸ö¸üºÃµÄÑ¡Ôñ¡£

¶ÔÓÚÐèÒª¿ìËÙÏìÓ¦±ä»¯µÄ»¥ÁªÍø¹«Ë¾À´Ëµ, ÿһ´Î¸Ä¶¯Ö®Ç°¶¼ÏȽ¨Á¢ JIRA »òÕß Issue, Õ⼸ºõ²»Ì«ÏÖʵ, ͨ¹ý--no-ffµÄ½Úµã¼ÓÉÏÏà¶Ô¼ò½àÃ÷Á˵Ä×¢ÊÍ¿ÉÄÜÊÇÒ»¸ö¸üÃ÷ÖǵÄÑ¡Ôñ¡£

ÏÖʵÓëÀíÏëµÄ²î¾à

µ«¶àÊýÇé¿öÏÂ, ÏÖʵ³¡¾°²¢²»Âú×ãÕâÑùµÄ״̬, ÒòΪÏîÄ¿²»ÊÇÒ»¸öÈËÔÚ¿ª·¢, ÔÚÎÒÃÇÌá½»µÄͬʱ, ±ðÈËÒ²ÔÚÌá½», µ±ÎÒÃǵķÖÖ§×¼±¸ºÏÈëmasterʱ, masterÒѾ­Ç°½øÁË, Óֻص½ÁË×î³õÄÇÖÖÔã¸âµÄ״̬. ÊÇÈ¥Ãæ¶ÔÔã¸âµÄ״̬, »¹ÊDZÜÃâÔã¸âµÄ״̬, Ïë°ì·¨ÐÞÕýËü?

ÏòÀíÏ뿿£

Èç¹ûÎÒÃÇÔÚÏòÖ÷·ÖÖ§ºÏÈë֮ǰ, °ÑÕâÁ½¸öcommitͨ¹ýgit cherry-pickÃüÁî¼Þ½Óµ½×îÐ嵀 master ·ÖÖ§ÉÏ, ¿´ÆðÀ´Ò»Çж¼±äºÃÁË¡£µ±È», X'ºÍY'»á±»ÊÓ×÷ȫеÄcommit, ËûÃǶ¼»áÓÐеÄsha1¡£

²»¹ýÕâÀïÓиöÎÊÌâ, ǰÎÄÌá¹ý, ·ÖÖ§(branch)ÊÇÒ»¸ö¿ÉÒÔÏòǰ»¬¶¯µÄ±êÇ©, ´ÓYµ½Y'ËÆºõ²»ÄÜÖ±½Óǰ½ø, ÎÒÃǵķÖÖ§±ê¼ÇÔõô²ÅÄÜ×ªÒÆµ½Y'ÉÏÄØ?

Ò»¸ö´Ö±©µÄ·½·¨ÊÇ, ÎÒÃÇ¿ÉÒÔÏÈɾµôbugfix·ÖÖ§, È»ºó´ÓY'´´½¨Ëü¡£²»¹ý, Git Ò²ÌṩÁ˽«·ÖÖ§±êǩָÏòÈÎÒâcommit½ÚµãµÄÃüÁî, ¼´git reset¡£

µ±HEADÖ¸ÕëÖ¸Ïòbugfix(Y)·Ö֧ʱ, Ö´ÐÐgit reset --hard [Y'], »á½«HEADÖ¸ÕëÖ¸Ïòbugfix·Ö֧ͬʱָÏòY'¡£(²ÎÊý--hard»áÇå¿Õ¹¤×÷ÇøºÍÔÝ´æÇø, ´ËÍ⻹ÓÐ--mixed, --softÑ¡Ïî, »á¶Ô¹¤×÷ÇøºÍÔÝ´æÇøÓв»Í¬µÄÓ°Ïì, Èç¹ûÄã²»Á˽â, Ò²ÐíÄãÐèҪѰÕÒÆäËûµÄ½Ì³Ì, ±¾ÎIJ»ÌÖÂÛÕâЩ)

ΪÁË´ïµ½ÕâÖÖÀíÏëµÄ·Ö֧״̬, ÎÒÃÇÒª¾­³£Õâô¸É, ÕâÒ»Çй¤×÷ËÆºõ±äµÃÓеã¶ù·±Ëö, ÒªÖ´ÐÐÕâô¶à²½Öè²ÅÄÜ´ïµ½·ÖÖ§¼Þ½ÓµÄÄ¿µÄ¡£ ¶ÔµÄ, Git ΪÎÒÃÇÌṩÁË×Ô¶¯»¯·½°¸, ÄǾÍÊÇÇ¿´óµÄ rebase¡£

Rebase Òë×÷±ä»ù, ´Ó×ÖÃæÉÏÀí½â, rebase ÃüÁî¿ÉÒԸı䵱ǰ·ÖÖ§µÄ»ùµã, ÎÒÃÇÏÖÔÚ½ö¹Ø×¢ rebase ¹¦ÄÜÆäÖеÄÒ»¸öÌØÐÔ, À´´ïµ½ÎÒÃÇ·ÖÖ§¼Þ½ÓµÄÄ¿µÄ¾Í×ã¹»ÁË¡£ »Øµ½×î³õµÄ³¡¾°, bugfix ·ÖÖ§»¹Ö¸ÏòY, ÕâÊÇÎÒÃÇÖ»ÒªÖ´ÐÐgit rebase master, ¼´¿É´ïµ½Ä¿µÄ¡£

ÎÒÃDZ¾µØµÄbugfixÒѾ­±ä»ùÍê³É, ÈôËüÒѾ­¹ØÁª¹ýÔ¶³Ì·ÖÖ§, ÄÇôorigin/bugfix»¹´¦ÔÚY, ÎÒÃÇÒª°Ñ±¾µØµÄ״̬±ä¸üÍÆË͵½Ô¶³Ì, Èç¹û½Ó×ÅÖ´ÐÐgit push, ½«»á±¨´í :

¿ÉÒÔ¿´µ½, Git ·þÎñÆ÷¾Ü¾øÁËÎÒÃǵÄÍÆËÍÇëÇó, ²¢·µ»ØÁËһЩÌáʾÐÅÏ¢, »òÐí¿´µ½Õâ³¡Ãæ, ÄãһϾͻÅÁË, ÎÒÐÁ¿àдµÄµÄ´úÂë²»»á¶ªµô°É! ÌáʾÀïÃæÓÐgit pullÃüÁî, ÎÒÊDz»ÊÇÓ¦¸ÃÖ´ÐÐ, Íì¾ÈÒ»ÏÂ!

µ±ÕæÕýÖ´ÐÐÁËgit pullÃüÁîºó, Õâ²ÅÊÇÔã¸âµÄ³¡Ãæ!

±ðÍüÁË, git pull°µº¬git mergeÓïÒå, Õâ»áµ¼ÖÂÒ»´ÎºÏ²¢, ¹¹ÔìµÄÒ»¸öÐ嵀 commit Z, ÉÏÓηֱðÊÇ bugfix Y'ºÍ origin/bugfix Y, bugfix Ö¸ÏòÁËZ. Èç¹ûÕâʱÔÙÖ´ÐÐÁËgit pushÃüÁî, ÄÇôÕâÔã¸âµÄ·Ö֧ͼ¾ÍÍÆµ½ÁË·þÎñÆ÷ÉÏ, Õû¸öÍŶӽ«»á¿´µ½Äã°Ñ·Ö֧ͼ¸ãÂÒÁË, Õâ»­Ãæ¼òÖ±²»¿ÉÃèÊö! (Èç¹ûÄãÄÔ²¹²»³öÀ´Õâʱ·Ö֧ͼµÄÑù×Ó, ϸöʵ²Ù°¸ÀýÖлáÑÝʾ)

¼Çס, ²»Òª»Å, ÄãÒѾ­Á˽âÁË Git µÄÔ­Àí, ÄãÓÐÄÜÁ¦ÕÆ¿Ø Git, ¶ø²»ÊDZ»Ò»Á½¸öĪÃûµÄ´íÎóÏÅÍËÁË¡£»¹¼ÇµÃ¸Õ¸ÕʹÓõÄgit resetÃüÁîÂð? Ëû¿ÉÒÔ°Ñ·ÖÖ§Ç¿ÖÆÖ¸ÏòÈÎÒ»commit, ÎÒÃÇʹÓÃgit reset --hard [Y'] ²»¾Í»Øµ½¸Õ²ÅµÄ״̬ÁËÂð?

ºÃÁË, ¼Ù×°¸Õ²Åʲô¶¼Ã»·¢Éú, ÎÒÃÇ×Ðϸ¿´¿´·þÎñÆ÷·µ»ØµÄ´íÎó, ²¢ÇÒ˼¿¼Ò»ÏÂÎÊÌâµ½µ×³öÔÚÄÄÀï?

Ê×ÏÈ, git pushµ½µ×ÔÚ×öʲô? pull ºÍ push ÊÇÒ»¶Ô·´Òå´Ê, git pullÊǰÑÔ¶³Ì·ÖÖ§½ø¶Èͬ²½µ½±¾µØ, È»ºó³¢ÊÔ½«Ô¶³Ì·ÖÖ§ºÏ²¢µ½¹ØÁªµÄ±¾µØ·ÖÖ§; git pushÔÚ×öÀàËÆµÄÊÂÇé, ²»¹ýÊÇÏà·´µÄ, Ëû»áÏȰѱ¾µØ·Ö֧ͬ²½µ½Ô¶³Ì, È»ºó³¢ÊÔ½«±¾µØ·ÖÖ§ºÏ²¢µ½¹ØÁªµÄÔ¶³Ì·ÖÖ§¡£µ«ÊÇ, µ±ÎÞ·¨Âú×ã fast-forward Ìõ¼þʱ, git push»áÖ±½Ó±¨´í, ¶ø²»Êdz¢ÊÔ¹¹ÔìÒ»¸öеÄcommit£¬ Õâ¾ÍÊÇÎÒÃǸոÕÓöµ½µÄ´íÎ󳡾°¡£

µ«ºÜÏÔÈ», ÎÒÃÇÔÚ±¾µØµ÷ÕûÁË·ÖÖ§, ²¢ÇÒÆÚÍû°Ñµ÷ÕûºóµÄ×´Ì¬ÍÆË͵½Ô¶³Ì, ¸²¸ÇÔ¶³Ì·ÖÖ§Ô­ÓеÄ״̬. ÕâʱÐèÒªÌí¼ÓÒ»¸ö²ÎÊýgit push --force, Ç¿ÖÆ¸²¸ÇÔ¶³Ì¹ØÁª·ÖÖ§¡£ÏÖÔÚÔ¶³ÌµÄ bugfix ·ÖÖ§ºÍ±¾µØ bugfix ±£³Öͬ²½ÁË, ¶¼Ö¸ÏòÁËY'¡£team leader ¿ÉÒÔ review ´úÂë, È»ºóºÏÈë master ÁË¡£

¶ÔÖ÷·ÖÖ§±£³Ö¾´Î·

ÉÏÃæµÄgit rebase, git push --force¿´ÆðÀ´ºÜÓÐЧ¹û¡£µ«ÊÇ, ÕâÔÚЭ×÷ÖÐËÆºõ»áÕÕ³ÉÒ»¸öÎÊÌâ : Èç¹û´ó¼Ò¶¼ÔÚ force push, ÄÇÆñ²»¾ÍÂÒÌ×ÁË?

ËùÒÔ, Ó¦¸ÃÖÆ¶¨Ò»¸öÔ¼¶¨ : ¹«¹²·ÖÖ§²»ÔÊÐí force push¡£Ò²¾ÍÊÇ˵, ¹«¹²·ÖÖ§Ö»ÄÜǰ½ø¡£

ÔÚ³£ÓÃµÄ Git ·þÎñÆ÷ÉÏ, ±ÈÈçÂëÔÆ, GitLab, Github¶¼Ö§³Ö·ÖÖ§±£»¤¹¦ÄÜ, ÎÒÃÇÖÁÉÙÒªÉ趨һ¸ö±£»¤·ÖÖ§(ÒÔ master ΪÀý), ×÷Ϊ¹¦ÄÜ·ÖÖ§¡£ ¸Ã·ÖÖ§Ó¦¸ÃÓÐÒÔÏÂÌØÐÔ:

Ö»ÄÜǰ½ø, Ò²¾ÍÊDz»ÔÊÐí force push;

²»ÔÊÐíÖ±½Ó commit, Ö»ÄÜͨ¹ý merge ¶¯×÷ʹ·Ö֧ǰ½ø;

ÊÕ½ô merge ȨÏÞ, Ö»ÔÊÐí²¿·Ö¸ß¼¶¹¤³ÌʦִÐÐ merge;

Ö»ÔÊÐí merge Âú×ã fast-forward Ìõ¼þµÄ commit;

ÿ´Î merge ǰ, ±ØÐë½øÐÐ code review ºÍ³ÖÐø¼¯³É(CI);

Commit Ìá½»Õß, code review Õß, merge Õß¶¼Òª¶Ô´úÂë±ä¸ü¸ºÔð.

ÔÚÕâÖÖģʽÏÂ, ËùÓÐÍŶӳÉÔ±ÒÔ master ·Ö֧ΪºËÐĽøÐпª·¢¡£ ÿ¸öÈ˽ӵ½¿ª·¢ÐèÇóºó:

´Ó×îеÄÔ¶³Ì master ·ÖÖ§¼ì³ö×Ô¼ºµÄ¿ª·¢·ÖÖ§;

¿ª·¢;

¿ª·¢½áÊøºó, ÒÔ×îеÄÔ¶³Ì master Ϊ»ùµã, Ö´ÐÐ rebase ²Ù×÷, ½â¾öµô³åÍ»;

ÏòÓÐ merge ȨÏÞµÄÈËÌá½»ºÏ²¢ÇëÇó(ÂëÔÆºÍ Github ³Æ×÷ Pull Request, Gitlab ³Æ×÷ Merge Request)£»

Code review ºÍ CI£»

ÈôµÚ5²½Í¨¹ý, Ìá½»±»ºÏ²¢, master ǰ½ø; ·ñÔò»Øµ½µÚ2²½£»

Òѱ»ºÏÈëµÄ¿ª·¢·ÖÖ§ÉúÃüÖÜÆÚ½áÊø, ±»É¾³ý¡£

¹ØÓÚµÚ7²½, Äãû¿´´í, Ò»¸ö·ÖÖ§µÄÉúÃüÖÜÆÚ¾ÍÊÇÕâô¶ÌÔÝ! ÕâÈ¡¾öÓÚÒ»¸öÌØÐԵĴóС, ¿ÉÄÜÖ»Óм¸·ÖÖÓ, »òÐíÓм¸Ìì, ¶ø²»ÊÇÏñ master ·ÖÖ§Ò»ÑùÓÀÔ¶´æÔÚ¡£

ÿ¸öÈËÔÚ¿ª·¢¹ý³ÌÖж¼Ó¦¸ÃÓÐ×Ô¼ºµÄ·ÖÖ§, (ÎÒÍÆ¼öÒÔÄãµÄÃû×Ö½áβ, ÕâÑù±ãÓÚ±êʶ), ÕâÌõ·ÖÖ§ÊÇÄãµÄ˽ÓзÖÖ§. ÄãÓ¦¸Ã¶Ô master ·ÖÖ§±£³Ö¾´Î·, µ«¶ÔÓÚÄãµÄ˽ÓзÖÖ§, Äã¿ÉÒÔÈÎÒâµÄ force push, rebase, ÉõÖÁÄã²»°ÑËû·Åµ½ÏîÄ¿µÄ¹«Óвֿâ, ·Åµ½×Ô¼º fork µÄ˽ÓвֿâÀï, Õâ¾ÍÊÇÒ»ÕŲݸåÖ½!

ÈÃÎÒÃÇ´Û¸ÄÀúÊ·°É!

ÔÚÎÒÃÇ×Ô¼ºµÄ·ÖÖ§(²Ý¸åÖ½)ÉÏ, ÎÒÃÇ¿ÉÒÔÏà¶ÔËæÒâµØÐÞ¸Ä, µ«Êǵ±Ìá½» PR ʱ, ±ØÐëÕûÀí³öÒ»·Ý¸É¾»Õû½àµÄÌá½»¼Ç¼, Õâ±ØÈ»Éæ¼°µ½ commit ÀúÊ·µÄÐ޸ġ£ »¹¼ÇµÃÉÏÎÄÌáµ½µÄÒ»¸öÇ¿´óÃüÁîÂð? ¶ÔµÄ, ¾ÍÊÇgit rebase!

ÔÚmacOSÖÕ¶ËÉÏͨ¹ýgit log --oneline --graph --all¿ÉÒÔ´òÓ¡³öÉÏÃæµÄ·Ö֧ͼ, ÕâÊÇÎÒ×î³£ÓõÄÒ»¸öÃüÁî, ÔÚlinuxÉϵıíÏÖÐÐΪ¿ÉÄÜ»áÓеã¶ùÇø±ð, »òÐíÄã¿ÉÒÔ³¢ÊÔgit log --oneline --graph --all --decorate=short | less -r, »òÕ߲ο¼git log --help½øÐе÷Õû, À´´ïµ½ÄãÏëÒªµÄ´òӡЧ¹û¡£µ±È», ʹÓÃͼÐÎÈí¼þ²é¿´·Ö֧ͼҲÊÇÒ»¸öºÜºÃµÄÑ¡Ôñ¡£

¿´, ÎÒÔÚ¿ª·¢Ò»¸ö¶©µ¥¹¦ÄÜ, µ±ÎÒ¿ªÊ¼¿ª·¢µÄʱºò, master ÔÚc80dc1eÕâ¸öÌá½»µã, ÎÒͨ¹ýgit checkout -b feature-order-pancheng¼ì³öÒ»¸ö×Ô¼ºµÄ¿ª·¢·ÖÖ§¡£

ÎÒÔÚ¿ª·¢¹ý³ÌÖÐ, ×öÁË7´Î commit, µ«ÊÂʵÉÏÖ»ÓÐ4¸öÊÇÓÐÒâÒåµÄ, ÆäËûµÄ¼¸¸ö½ö½öÊÇÎÒÔÚÌá½»ºóÁ¢¿Ì¾Í·¢ÏÖÁ˺ÜÃ÷ÏԵĴíÎó, È»ºóÐÞÕý¹ýÀ´ÁË, Õâ¿´ÆðÀ´¾ÍÊǸö²Ý¸å, Èç¹ûͬÊ review ÎҵĴúÂë, ¿´µ½Èç´ËµÍ¼¶µÄ´íÎó, ËÆºõ²»Ì«ºÃ¡£ ÕâÀï×îºÃµÄ×ö·¨¾ÍÊÇ´Û¸Ä Git Ìá½»ÀúÊ·, °Ñ fix ÀàÐ굀 commit ÓëÉÏÒ»¸ö commit ºÏ²¢¡£

ÎÒÃÇÏÖÔÚÖ´ÐÐgit rebase -i c80dc1e, -i´ú±í½»»¥Ä£Ê½ :

½øÈëÁËÒ»¸ö vim ½çÃæ(Ò²¿ÉÄÜÊÇ nano, È¡¾öÓÚÄãÅäÖõÄĬÈϱ༭Æ÷), ÉÏÃæÁгöÁËÎÒÃǵÄÿ´ÎÌá½»¡£×¢Òâ, ÕâÀïÊÇ´ÓÉÏÍùÏÂÅÅÁеÄ, ÉÏÒ»¸ö·Ö֧ͼÖÐʱ´ÓÏÂÍùÉÏÅÅÁеÄ, ÔÚ²»Í¬µÄÃüÁî»òÈí¼þÖÐ, ·½Ïò¿ÉÄܲ»Ò»Ñù¡£

ÿ¸ö commit ×îÇ°Ãæ¶¼ÊÇ pick ÃüÁî, Õâ¾ÍÓëÎÒÃÇÇ°ÃæÊ¹ÓÃµÄ cherry-pick ÃüÁî×÷ÓÃÏàËÆ, ÏÂÃæÓжÔËùÓÐÃüÁîµÄ½âÊÍ, Äã¿ÉÒÔ×ÔÐг¢ÊÔ¡£

ÎÒÃÇ¿´µ½, ÓÐÒ»¸ö fixup ÃüÁîËÆºõÕýÊÇÎÒÃÇÏëÒªÕÒµÄ:

±£´æÍ˳ö, Ôٴβ鿴·Ö֧ͼ :

¹þ! ÎÒÃǵĺÚÀúÊ·ÔÚ±¾µØµÄ feature-order-pancheng ·ÖÖ§±»Ä¨µôÁË! È»ºó°ÑËüÍÆË͵½Ô¶³Ì¡£

²»³öÒâÍâ, Git ·þÎñÆ÷¾Ü¾øÁËÎÒÃǵÄÍÆËÍÇëÇó, ÒòΪ²»Âú×ã fast-forward Ìõ¼þ¡£ ÏÖÔÚÄãÓ¦¸Ã²»»á»ÅÁ˰É! ÎÒÃǼÙ×°»ÅÒ»°Ñ, "¸ù¾ÝÌáʾ"Ö´ÐÐgit pull:

¹þ! Ë«·ÝÌá½»! ±»ÀÏ´ó¿´¼û˵²»¶¨Òª°¤ÅúµÄ! »¹¼ÇµÃÕâʱºòÓ¦¸Ã×öʲôÂð? ÏȻص½ merge ǰµÄ״̬, Ö´ÐÐgit reset --hard 395ef39:

È»ºóÖ´ÐÐgit push -f :

֮ǰµÄ origin/feature-order-pancheng ·ÖÖ§Ëù´¦µÄµã´ÓͼÉÏÏûʧÁË, ÎÒÃÇ»¹ÓпÉÄÜÕÒ»ØËûÂð? Ŷ¶ÔÁË, ·ÖÖ§ÃûÖ»ÊǸö±êÇ©¶øÒÑ, ÎÒ»¹¼ÇµÃÄǸöµã֮ǰµÄsha1ÊÇccce49d, Ö´ÐÐgit checkout ccce49d, ·ÖÖ§ÓÖ»ØÀ´ÁË, Ô­À´Ö»ÊÇÒþ²ØÁË! ÎÒÃǰÑÕâÖÖûÓÐÈκαêÇ©µÄ·ÖÖ§³ÆÎ½ÓÎÀë·ÖÖ§, ËûĬÈϲ»»áÔÚ·Ö֧ͼÖÐÏÔʾ, ²¢ÇÒ»áÔÚÒ»¶Îʱ¼äºóÓÉ Git ½øÐÐÀ¬»ø»ØÊÕ, ²Å»áÕæÕýµÄÏûʧ, ÔÚ´Ë֮ǰ, ÎÒÃÇ¿ÉÒÔͨ¹ýgit reglogÕÒµ½ËûÃǵÄsha1, »Øµ½ÄǸö¿ìÕÕ¡£

¶©µ¥¹¦ÄÜ¿ª·¢ºÃÁË, ¿ÉÒÔÏòÖ÷·ÖÖ§ÌáºÏ²¢ÇëÇóÁË, Ŷ, ¶ÔÁË, master ÒѾ­Ç°½øÁË, ÎÒÃÇÌá PR ֮ǰ±ØÐëÏȸú½ø¡£Ö´ÐÐgit rebase master, git push -f, È»ºóÔٲ鿴·Ö֧ͼ :

Õâʱ¾Í¿ÉÒÔÈ¥Ìá½» Pull Request ÁË¡£

µ± PR ͨ¹ýºó, ÄãµÄ·ÖÖ§½«±»ºÏÈë master ·ÖÖ§, Ö´ÐÐgit fetchÀ­È¡Ô¶³Ì·ÖÖ§ÐÅÏ¢, È»ºó²é¿´·Ö֧ͼ :

àÅ, Ò»´ÎÓä¿ìµÄ¿ª·¢½áÊøÁË¡£

Èç¹û´ó¼Ò¶¼×ñÊØÕâ¸öÔ¼¶¨, ÄÇôÎÒÃǵķÖ֧ͼ½«»áÊÇÕâÑù :

ËäÈ»ÎÒÃÇÔÚ master ·ÖÖ§ºÏ²¢ÉÏʹÓÃÁË--no-ff·½Ê½, µ«ÊÇËüµÈ¼ÛÓÚÊÇÒ»ÌõÖ±Ïß, Õâ¶Ô code review ºÍЭ×÷¿ª·¢½«Ê®·ÖÓѺá£

ÄÇô·¢°æÄØ?

Ïà±ÈÓÚÍù master ÉÏ merge Ìá½», ÏîÄ¿·¢°æÊÇÒ»¸ö¸ü½÷É÷µÄ»°Ìâ¡£

ÎÒÃÇÉÏÃæÒѾ­Ìáµ½³ÖÐø¼¯³É(CI), ÕâÊÇÒ»ÖÖ×Ô¶¯»¯µÄ´ò°üºÍ²âÊÔ»úÖÆ, ÍùÍù»áÓë³ÖÐø½»¸¶(CD)Ò»ÆðЭ×÷¡£ÎÒÃÇ¿ÉÒÔ½« Git µÄijЩÐÐΪ×÷Ϊ CI/CD µÄ´¥·¢Ìõ¼þ, À´´ïµ½×Ô¶¯»¯´ò°ü, ²âÊÔ, ²¿ÊðµÄÄÜÁ¦¡£

ÎÒÃǶԷÖÖ§×öÒÔϹ淶:

master Ö÷¹¦ÄÜ·ÖÖ§;

feature-xxx-[developer name] ÌØÐÔ¿ª·¢·ÖÖ§;

fix-xxx-[developer name] ·Ç½ô¼±bugÐÞ¸´·ÖÖ§;

hotfix-xxx-[developer name] ÏßÉϽô¼±bugÐÞ¸´·ÖÖ§;

dev-[date] ¿ª·¢»·¾³·¢²¼·ÖÖ§(»òtag);

test-[date] ²âÊÔ»·¾³·¢²¼·ÖÖ§(»òtag);

uat-[date] ×¼Éú²ú»·¾³·¢²¼·ÖÖ§(»òtag);

release-[date] ÏßÉÏ·¢²¼·ÖÖ§(»òtag)¡£

ÔÚ Git ·þÎñÆ÷ÖÐ, ¼¸ºõ¶¼»áÌṩ CI/CD ¹¦ÄÜ, CI/CD ´¥·¢Ìõ¼þ¸ù¾ÝÕýÔò±í´ïʽƥÅäbranch»òtag, ×Ô¶¯´¥·¢ÏîÄ¿µÄ±àÒë, ´ò°ü, ²âÊÔ, ²¿ÊðµÈÐÐΪ¡£

ÔÚ·ÖÖ§¹ÜÀíÖÐ, dev-[date]·ÖÖ§¿ÉÒÔÓÉÈÎÒ⿪·¢ÈËÔ±ËæÊ±¼ì³ö·¢²¼µ½¿ª·¢»·¾³Áªµ÷; test-[date], uat-[date], release-[date]Ô­ÔòÉϱØÐë´ÓmasterÉÏÖð¼¶¼ì³ö, ·Ö±ð²âÊÔ, Èô·¢ÏÖÎÊÌâ, ½øÐÐ bugfix¡£

¿´, ÎÒÃÇ´Ó75a8e22¼ì³ötest-20190623·ÖÖ§, µ±ÍÆË͵½·þÎñÆ÷ÉÏʱ, CI/CD »á×Ô¶¯´¥·¢, ×îÖÕÏîÄ¿±»²¿Êðµ½²âÊÔ·þÎñÆ÷ÉÏ. ÎÒÃÇÔÚ²âÊÔÉÏ·¢ÏÖÒ»¸ö bug, ÔÚÕæÕýÉÏÏßǰ·¢ÏÖµÄ bug ×ܱÈÉÏÏߺóºÃ¡£bugfix ºó, ÎÒÃÇÈÏΪûÓÐÎÊÌâÁË, ¼ì³örelease-20190623·ÖÖ§, ´¥·¢ CI/CD, ²¿Êðµ½Éú²ú»·¾³. °ëÌìºó, ÎÒÃÇ·¢ÏÖÒ»¸ö½ô¼±µÄÏßÉÏ bug, ÎÒÃǽô¼±´´½¨ÁË hotfix ·ÖÖ§, ÔÚ CI ͨ¹ýºó, ½«ÆäºÏÈëµ½release-20190623·ÖÖ§, È»ºóɾ³ý hotfix ·ÖÖ§¡£

¿´ÉÏÈ¥Õâ´Î·¢°æ³É¹¦ÁË, ÄÇôÕâÁ½¸ö bugfix commit ÔõôºÏÈëµ½ master ÄØ?

»¹¼ÇµÃÎÒÃÇ˵ master ·ÖÖ§µÄ merge Ô­ÔòÂð? Ö»ÔÊÐí merge Âú×ã fast-forward Ìõ¼þµÄ commit. ÔÚÎÒÃÇ¿ªÊ¼²âÊÔºó, master ÒѾ­Ç°½ø, bugfix commit(¼´ÔÚtest-[date], uat-[date], release-[date]É쵀 hotfix) ¾Í²»ÄÜÖ±½ÓºÏ²¢µ½ master, ²¢ÇÒ·¢²¼µã rebase ÊÇÓзçÏÕµÄ, Õâʱ¾ÍÖ»ÄÜͨ¹ý cherry-pick À´°Ñ²¹¶¡ÊÖ¶¯´ò»Øµ½ master ·ÖÖ§ÉÏÁË!

ÎÒÃÇ´Ó×îРmaster ÇгöÒ»¸ö fix ·ÖÖ§, ²¢°ÑÁ½¸ö²¹¶¡Í¨¹ý cherry-pick ÒÆÖ²¹ýÀ´:

½ÓÏÂÀ´¾ÍÊÇ PR Á÷³Ì, µ±ºÏÈë master ºó, ɾ³ý¸Ã fix ·ÖÖ§:

àÅ, ÕâÆªÎÄÕÂǰºó´óԼдÁËÒ»¸öÀñ°Ý, ÊÇʱºòÌá PR ÁË, ÎÒҪȥ rebase ÁË¡£

 

 
   
3634 ´Îä¯ÀÀ       31
Ïà¹ØÎÄÕÂ

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

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

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