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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ʹÓÃÔ­ÀíÊӽǿ´ Git
 
×÷Õß : Coding.net   À´Ô´£º ²©¿ÍÔ° ·¢²¼ÓÚ 2016-8-4
  2592  次浏览      28
 

1. Git µÄÍæ·¨

»¶Ó­À´µ½ Coding ¼¼ÊõС¹Ý£¬ÎÒ½ÐÌ·ºØºØ£¬Ä¿Ç°ÎÒÔÚ Coding.net Ö÷Òª¸ºÔð WebIDE Óë Codeinsight µÄ¿ª·¢¡£ÎÒ½ñÌì´øÀ´µÄÖ÷ÒªÄÚÈÝÊÇ Git µÄÔ­ÀíÓëʹÓá£

̸Æð git£¬´ó¼ÒµÄµÚÒ»Ó¡ÏóÎÞ·ÇÊÇºÍ svn Ò»ÑùµÄ°æ±¾¿ØÖÆÏµÍ³£¬µ«Æäʵ£¬ËûÃÇÓÐ×ŷdz£´óµÄ²»Í¬£¬ÖÁÉÙ svn ûÓÐÏñ git Ò»ÑùÕâô¶àµÄÍæ·¨¡£ÏÂÃæÎÒ¾Ù¼¸¸öÀý×Ó£¬¼òÂÔµÄ˵һÏ¡£

1.1 ´î½¨²©¿Í

ÈîÒ»·å½«Ð´ blog µÄÈË·Ö³ÉÈý¸ö½×¶Î

ʹÓÃÃâ·Ñ¿Õ¼ä£¬±ÈÈç CSDN¡¢²©¿ÍÔ°¡£

·¢ÏÖÃâ·Ñ¿Õ¼äÏÞÖÆÌ«¶à£¬ÓÚÊÇ×Ô¼º¹ºÂòÓòÃûºÍ¿Õ¼ä£¬´î½¨¶ÀÁ¢²©¿Í¡£

¶ÀÁ¢²©¿Í¹ÜÀíÌ«Âé·³£¬×îºÃÔÚ±£Áô¿ØÖÆÈ¨µÄǰÌáÏ£¬ÈñðÈËÀ´¹Ü£¬×Ô¼º¸ºÔðдÎÄÕ¡£

ÆäʵµÚÈýÖÖ½×¶ÎÖ¸µÄ¾ÍÊÇʹÓà Pages ·þÎñ¡£ºÜ¶à¹«Ë¾±ÈÈç Coding¡¢Github µÈ´úÂëÍÐ¹ÜÆ½Ì¨¶¼ÍƳöÁË Pages ·þÎñ£¬¿ÉÒÔÓÃÀ´´î½¨¸öÈ˲©¿Í¡£Pages ·þÎñ²»ÐèÒª¸´ÔÓµÄÅäÖ㬾ͿÉÒÔÍê³É²©¿ÍµÄ´î½¨¡£

ÔÚʹÓà Pages µÄ¹ý³ÌÖУ¬Í¨¹ýʹÓñê¼ÇÓïÑÔ£¨Markdown£©Íê³É²©¿ÍµÄ±àд£¬ÍÆË͵½·þÎñÆ÷ÉÏ£¬¾Í¿ÉÒÔ¿´µ½Ð·¢²¼µÄ²©¿ÍÁË¡£

²»ÐèÒª¹ÜÀí·þÎñÆ÷£¬½µµÍÁ˴²©¿ÍµÄÃż÷£¬Í¬Ê±ÓÖ±£³ÖÁËÓû§¶Ô²©¿ÍµÄ¸ß¶È¶¨ÖÆÈ¨¡£

1.2 дÊé

ºÜ¶àÅ£ÈËϲ»¶Ð´²©¿Í£¬²©¿Íд¶àÁË£¬È»ºó»ã¼¯ÆðÀ´¾Í³öÁ˱¾Êé¡£±ÈÈç Matrix67¡¶Ë¼¿¼µÄÀÖȤ¡·¡¢ÈîÒ»·å¡¶ÈçºÎ±äµÃÓÐ˼Ïë¡·¾ÍÊÇÕâÑùµÄÀý×Ó¡£

Æäʵ³öÊé¾àÀëÎÒÃÇÒ²²¢²»Ò£Ô¶£¬ÎªÊ²Ã´£¿ÒòΪÓÐ gitbook ÕâÀà·þÎñ¡£

¶ÔÓÚ git + Pages ·þÎñµÄÓû§£¬gitbook ºÜÈÝÒ×ÉÏÊÖ£¬ÒòΪʹÓà gitbook ¾ÍÊÇʹÓà git Óë markdown¡£

ÄãÍêÈ«¿ÉÒÔ½«Äã markdown µÄ²©¿Í copy£¬»ã¼¯ÆðÀ´£¬ÐγÉÒ»±¾Êé¼®¡£ÄÚÈݵÄÅŰæ gitbook »á°ïÄã×ö£¬ÎÒÃÇÖ»¸ºÔðÄÚÈݾͿÉÒÔÁË¡£±àдºÃÄÚÈÝ£¬ÎÒÃǾÍÄÜÁ¢¿Ì»ñµÃ html¡¢pdf¡¢epub¡¢mobi Ëĸö°æ±¾µÄµç×ÓÊé¡£ÕâÊÇ html °æµÄÔ¤ÀÀ£º

ÔÚ gitbook ÉÏÓÐ explore ƵµÀ£¬ÉÏÃæÁгöÁËËùÓй«¿ªµÄÊé¼®£¨µ±È»Ò²¿ÉÒÔÖ±½ÓËÑË÷£©¡£

ʵ¼ÊÉÏ£¬³ýÁËдÊ飬»¹¿ÉÒÔÁ¬Í¬ÆäËûÈËÒ»Æð½øÐÐÍâÎÄ×ÊÁϵķ­Ò룬¾Ù¸öÀý×Ó¡¶The Swift Programming Language¡·ÖÐÎİ棬½«Ó¢Îİæ·Ö³É¼¸¸ö²¿·Ö£¬È»ºóÔÚ¿ªÔ´ÏîÄ¿ÖÐÓɲÎÓëÕßÈÏÁì·­Ò룬ÿ¸öÈ˹±Ï×Ò»·Ý×Ô¼ºµÄÁ¦Á¿£¬Íê³ÉÁËÕâÑùÒԷdz£¿ìµÄÏàÓ¦ËٶȸúËæ¹Ù·½Îĵµ¸üеIJÙ×÷¡£Èç¹ûÄãϲ»¶µÄÒ»ÃÅÓïÑÔ£¬»òÕß¼¼Êõ£¬ÖÐÎÄ×ÊÁÏȱ·¦£¬´ó¼Ò¿ÉÒÔ·¢ÆðÕâÑùµÄ»î¶¯£¬Íê³ÉÍâÎÄ×ÊÁϵķ­Òë¡£

1.3 È˲ÅÕÐÆ¸

È˲ÅÕÐÆ¸ÕâÒ»¿é£¬ÖÁ½ñ»¹²¢Ã»ÓÐÐγÉÒ»¶¨µÄ¹æÄ£¡£µ«ÈÔ¾ÉÓкܶàµÄ¹«Ë¾Ñ¡ÔñÔÚ´úÂëÍÐ¹ÜÆ½Ì¨ÉÏ£¨±ÈÈç Coding¡¢Github£©ÉÏѰÕÒÖÐÒâµÄ¿ª·¢Õß¡£

ÓÐһЩ¿ª·¢Õß¿´×¼ÁËÕâÒ»¿é£¬×¨ÃÅ¿ª·¢ÁËÕâÑùµÄÍøÕ¾£¬±ÈÈç githuber.cn¡¢github-awards.com¡£

Äà githuber ¾ÙÀý£¬¸ÃÍøÕ¾Ö÷ÒªÌṩÁ½¸ö¹¦ÄÜ£¬µÚÒ»¸öÊÇÐǰñ£¬Ëµ°×Á˽«ËùÓÐËùÓÐÓû§°´ÕÕÓïÑÔ·ÖÀ࣬Ȼºó¸ù¾Ý·ÛË¿Êý£¨star£©ÅÅÐò¡£

ÎÒÃÇ¿ÉÒÔºÜÈÝÒ׵Ŀ´µ½ÅÅÐаñÉÏǰ¼¸Î»µÄÓû§£¬ËûÃǵĿªÔ´ÏîÄ¿£¬ÕâÔÚÒ»¶¨³Ì¶ÈÉÏÄÜ´ú±íÕâÃÅÓïÑԵķ¢Õ¹Ç÷ÊÆ¡£±ÈÈçÎÒ¶Ôjava±È½Ï¸ÐÐËȤ£¬È»ºóÎÒ¿´ÁËÒ»ÏÂǰʮÃû£¬·¢Ïִ󲿷ֶ¼ÊÇ android ¿ª·¢£¬Óɴ˿ɼûandroid¿ª·¢µÄ»ð±¬³Ì¶È¡£

µ±È»ÄãÒ²¿ÉÒÔ¿´µ½ÄãµÄÅÅÃû£¬»áÈÃÄãÓдò¹ÖÉý¼¶µÄ¿ì¸Ð¡£

µÚ¶þ¸ö¹¦ÄÜÊÇËÑË÷£¬ÊäÈëɸѡÌõ¼þ£¬ËÑËѳÌÐòÔ±£¡

1.4 WebIDE

Coding WebIDE ÊÇ Coding ×ÔÖ÷Ñз¢µÄÔÚÏß¼¯³É¿ª·¢»·¾³ (IDE)¡£Ö»ÒªÄãµÄÏîÄ¿ÔÚ´úÂëÍÐ¹ÜÆ½Ì¨´æ·Å£¬¾Í¿ÉÒÔµ¼Èëµ½ WebIDE¡£Ö®ºó¾Í¿ÉÒÔÔÚÏß¿ª·¢¡£

WebIDE »¹Ìṩ WebTerminal ¹¦ÄÜ£¬Óû§¿ÉÒÔÔ¶³Ì²Ù×÷DockerÈÝÆ÷£¬×ÔÓɰ²×°Æ«ºÃµÄÈí¼þ°ü¡¢·½±ãÕÛÌÚ¡£

¿´ÆðÀ´ÊDz»ÊÇ»¹Í¦ºÃÍæµÄ£¬Èç¹ûÏë°ÑÕâЩ¶¼Íæ×ª£¬git Êǿ϶¨ÒªºÃºÃѧµÄ¡£½ÓÏÂÀ´£¬ÎÒÃǾͿ´Ò»Ï git µÄ»ù±¾Ô­Àí¡£

2. Git Ô­Àí

ÎÒÃÇ¿ÉÒÔÏÖÔÚÏëһϣ¬Èç¹ûÎÒÃÇ×Ô¼ºÀ´Éè¼Æ£¬Ó¦¸ÃÔõôÉè¼Æ¡£

´«Í³µÄÉè¼Æ·½°¸ÎÒÃÇ¿ÉÒÔ¼òµ¥µÄ·Ö³ÉÁ½¿é£º¹¤×÷Ŀ¼£¬Ô¶³Ì²Ö¿â¡£

µ«ÊÇ×÷Ϊһ¸öÄ¿±êÃ÷È·µÄ·Ö²¼Ê½°æ±¾¿ØÖÆÏµÍ³£¬Ê×ÏÈÒª×öµÄ¾ÍÊÇÌí¼ÓÒ»¸ö±¾µØ²Ö¿â¡£

½Ó×ÅÎÒÃÇÑ¡ÔñÔÚ¹¤×÷Ŀ¼ÓëÔ¶³Ì²Ö¿âÖмä¼ÓÒ»¸ö»º³åÇøÓò£¬½Ð×öÔÝ´æÇø¡£

¼ÓÈëÔÝ´æÇøµÄÔ­ÒòÓÐÒÔϼ¸µã£º

ΪÁËÄܹ»ÊµÏÖ²¿·ÖÌá½»

ΪÁ˲»ÔÙ¹¤×÷Çø´´½¨×´Ì¬Îļþ¡¢»áÎÛȾ¹¤×÷Çø¡£

ÔÝ´æÇø¼Ç¼ÎļþµÄÐÞ¸Äʱ¼äµÈÐÅÏ¢£¬Ìá¸ßÎļþ±È½ÏµÄЧÂÊ¡£

ÖÁ´Ë¾ÍÎÒÃDZ¾µØ¶øÑÔÓÐÈý¸öÖØÒªµÄÇøÓò£º¹¤×÷Çø¡¢ÔÝ´æÇø¡¢±¾µØ²Ö¿â¡£

½ÓÏÂÀ´ÎÒÃÇÏëһϱ¾µØ²Ö¿âÊÇÈçºÎ´æ·ÅÏîÄ¿ÀúÊ·°æ±¾¡£

2.1 ¿ìÕÕ

ÕâÊÇÏîÄ¿µÄÈý¸ö°æ±¾£¬°æ±¾1ÖÐÓÐÁ½¸öÎļþAºÍB£¬È»ºóÐÞ¸ÄÁËA£¬±ä³ÉÁËA1£¬ÐγÉÁ˰汾2£¬½Ó×ÅÓÖÐÞ¸ÄÁËB±äΪB1£¬ÐγÉÁ˰汾3¡£

Èç¹ûÎÒÃǰÑÏîÄ¿µÄÿ¸ö°æ±¾¶¼±£´æµ½±¾µØ²Ö¿â£¬ÐèÒª±£´æÖÁÉÙ6¸öÎļþ£¬¶øÊµ¼ÊÉÏ£¬Ö»ÓÐ4¸ö²»Í¬µÄÎļþ£¬A¡¢A1¡¢B¡¢B1¡£ÎªÁ˽ÚÊ¡´æ´¢µÄ¿Õ¼ä£¬ÎÒÃÇÒªÏñÒ»¸ö·½·¨½«Í¬ÑùµÄÎļþÖ»ÐèÒª±£´æÒ»·Ý¡£Õâ¾ÍÒýÈëÁËSha-1Ëã·¨¡£

¿ÉÒÔʹÓÃgitÃüÁî¼ÆËãÎļþµÄ sha-1 Öµ¡£

echo 'test content' | git hash-object --stdin

d670460b4b4aece5915caf5c68d12f560a9fe3e4

SHA-1½«ÎļþÖеÄÄÚÈÝͨ¹ýͨ¹ý¼ÆËãÉú³ÉÒ»¸ö 40 볤¶ÈµÄhashÖµ¡£

Sha-1µÄ·Ç³£ÓÐÌØµã£º

ÓÉÎļþÄÚÈݼÆËã³öµÄhashÖµ

hashÖµÏàͬ£¬ÎļþÄÚÈÝÏàͬ

¶ÔÓÚÉÏͼÖеÄÄÚÈÝ£¬ÎÞÂÛÎÒÃÇÖ´ÐжàÉٴΣ¬¶¼»áµÃµ½ÏàͬµÄ½á¹û¡£Òò´Ë£¬ÎļþµÄsha-1ÖµÊÇ¿ÉÒÔ×÷ΪÎļþµÄΨһ id ¡£Í¬Ê±£¬Ëü»¹ÓÐÒ»¸ö¶îÍâµÄ¹¦ÄÜ£¬Ð£ÑéÎļþÍêÕûÐÔ¡£

ÓÐÁË sha-1 µÄ°ïÖú£¬ÎÒÃÇ¿ÉÒÔ¶ÔÏîÄ¿°æ±¾µÄ´æ´¢·½Ê½×öһϵ÷Õû¡£

2.1.1 Êý¾Ý¿âÖд洢µÄÊý¾ÝÄÚÈÝ

ʵ¼ÊÉÏ£¬ÏÖÔÚ¾ÍÓëgitʵ¼Ê´æ´¢µÄ½á¹¹Ò»ÖÂÁË¡£ÎÒÃÇ¿ÉÒÔÔ¤ÀÀÒ»ÏÂʵ¼Ê´æ´¢ÔÚ .git ϵÄÎļþ¡£

ÎÒÃÇ¿ÉÒÔ¿´µ½£¬ÔÚ objects Ŀ¼Ï£¬´æ·ÅÁ˺ܶàÎļþ£¬ËûÃǶ¼Ê¹Óà sha-1 µÄǰÁ½Î»´´½¨ÁËÎļþ¼Ð£¬Ê£ÏµÄ38λΪÎļþÃû¡£ÎÒÃÇÏȳƺôÕâЩÎļþΪ obj Îļþ¡£

¶ÔÓÚÕâô¶àµÄ obj Îļþ£¬¾Í±£´æÁËÎÒÃÇ´úÂëÌá½»µÄËùÓмǼ¡£¶ÔÓÚÕâЩ obj Îļþ£¬Æäʵ·ÖΪËÄÖÖÀàÐÍ£¬·Ö±ðÊÇ blob¡¢tree¡¢commit¡¢tag¡£½ÓÏÂÀ´£¬ÎÒÃÇ·Ö±ðÀ´¿´Ò»Ï¡£

blob

Ê×ÏÈ A¡¢A1¡¢B¡¢B1 ¾ÍÊÇ blob ÀàÐ굀 obj¡£

blob: ÓÃÀ´´æ·ÅÏîÄ¿ÎļþµÄÄÚÈÝ£¬µ«ÊDz»°üÀ¨ÎļþµÄ·¾¶¡¢Ãû×Ö¡¢¸ñʽµÈÆäËüÃèÊöÐÅÏ¢¡£ÏîÄ¿µÄÈÎÒâÎļþµÄÈÎÒâ°æ±¾¶¼ÊÇÒÔblobµÄÐÎʽ´æ·ÅµÄ¡£

tree

tree ÓÃÀ´±íʾĿ¼¡£ÎÒÃÇÖªµÀÏîÄ¿¾ÍÊÇÒ»¸öĿ¼£¬Ä¿Â¼ÖÐÓÐÎļþ¡¢ÓÐ×ÓĿ¼¡£Òò´Ë tree ÖÐÓÐ blob¡¢×Ótree£¬ÇÒ¶¼ÊÇʹÓà sha-1ÖµÒýÓõġ£ÕâÊÇÓëĿ¼¶ÔÓ¦µÄ¡£´Ó¶¥²ãµÄ tree ×ÝÀÀÕû¸öÊ÷×´µÄ½á¹¹£¬Ò¶×Ó½áµã¾ÍÊÇblob£¬±íʾÎļþµÄÄÚÈÝ£¬·ÇÒ¶×Ó½áµã±íʾÏîÄ¿µÄĿ¼£¬¶¥²ãµÄ tree ¶ÔÏó¾Í´ú±íÁ˵±Ç°ÏîÄ¿µÄ¿ìÕÕ¡£

commit

commit: ±íʾһ´ÎÌá½»£¬ÓÐparent×ֶΣ¬ÓÃÀ´ÒýÓø¸Ìá½»¡£Ö¸ÏòÁËÒ»¸ö¶¥²ã tree£¬±íʾÁËÏîÄ¿µÄ¿ìÕÕ£¬»¹ÓÐһЩÆäËüµÄÐÅÏ¢£¬±ÈÈçÉÏÒ»¸öÌá½»£¬committer¡¢author¡¢message µÈÐÅÏ¢¡£

2.2 ÔÝ´æÇø

ÔÝ´æÇøÊÇÒ»¸öÎļþ£¬Â·¾¶Îª£º .git/index

ËüÊÇÒ»¸ö¶þ½øÖÆÎļþ£¬µ«ÊÇÎÒÃÇ¿ÉÒÔʹÓÃÃüÁîÀ´²é¿´ÆäÖеÄÄÚÈÝ¡£

ÕâÀïÎÒÃǹØ×¢µÚ¶þÁк͵ÚËÄÁоͿÉÒÔÁË£¬µÚËÄÁÐÊÇÎļþÃû£¬µÚ¶þÁÐÖ¸µÄÊÇÎļþµÄblob¡£Õâ¸öblob´æ·ÅÁËÎļþÔÝ´æÊ±µÄÄÚÈÝ¡£

µÚ¶þÁоÍÊÇsha-1 hashÖµ£¬Ï൱ÓÚÄÚÈݵÄÍâ¼ü£¬Ö¸ÏòÁËʵ¼Ê´æ´¢ÎļþÄÚÈݵÄblob¡£µÚÈýÁÐÊÇÎļþµÄ³åͻ״̬£¬Õâ¸öºóÃæ»á½²£¬µÚËÄÁÐÊÇÎļþµÄ·¾¶Ãû¡£

ÎÒÃDzÙ×÷ÔÝ´æÇøµÄ³¡¾°ÊÇÕâÑùµÄ£¬Ã¿µ±±à¼­ºÃÒ»¸ö»ò¼¸¸öÎļþºó£¬°ÑËü¼ÓÈëµ½ÔÝ´æÇø£¬È»ºó½Ó×ÅÐÞ¸ÄÆäËûÎļþ£¬¸ÄºÃºó·ÅÈëÔÝ´æÇø£¬Ñ­»··´¸´¡£Ö±µ½ÐÞ¸ÄÍê±Ï£¬×îºóʹÓà commit ÃüÁ½«ÔÝ´æÇøµÄÄÚÈÝÓÀ¾Ã±£´æµ½±¾µØ²Ö¿â¡£

Õâ¸ö¹ý³ÌÆäʵ¾ÍÊǹ¹½¨ÏîÄ¿¿ìÕյĹý³Ì£¬µ±ÎÒÃÇÌύʱ£¬git »áʹÓÃÔÝ´æÇøµÄÕâЩÐÅÏ¢Éú³Étree¶ÔÏó£¬Ò²¾ÍÊÇÏîÄ¿¿ìÕÕ£¬ÓÀ¾Ã±£´æµ½Êý¾Ý¿âÖС£Òò´ËÒ²¿ÉÒÔ˵ÔÝ´æÇøÊÇÓÃÀ´¹¹½¨ÏîÄ¿¿ìÕÕµÄÇøÓò¡£

2.3 Îļþ״̬

ÓÐÁ˹¤×÷Çø¡¢ÔÝ´æÇø¡¢±¾µØ²Ö¿â£¬¾Í¿ÉÒÔÀ´¶¨ÒåÎļþµÄ״̬ÁË¡£

ÎļþµÄ״̬¿ÉÒÔ·ÖΪÁ½Àà¡£Ò»ÀàÊÇÔÝ´æÇøÓë±¾µØ²Ö¿â±È½ÏµÃ³öµÄ״̬£¬ÁíÒ»ÀàÊǹ¤×÷ÇøÓëÔÝ´æÇø±È½ÏµÃ³öµÄ״̬¡£ÎªÊ²Ã´Òª·Ö³ÉÁ½ÀàµÄÔ¸ÒâÒ²ºÜ¼òµ¥£¬ÒòΪµÚÒ»Àà״̬ÔÚÌύʱ£¬»áÖ±½ÓдÈë±¾µØ²Ö¿â¡£¶øµÚ¶þÖÖÔò²»»á¡£Ò»¸öÎļþ¿ÉÒÔͬʱӵÓÐÁ½ÖÖ״̬¡£

±ÈÈçÒ»¸öÎļþ¿ÉÄܼÈÓÐÉÏÃæµÄ modified ״̬£¬ÓÖÓÐÏÂÃæ modified ״̬£¬µ«ÆäʵËûÃDZíʾÁ˲»Í¬µÄ״̬£¬git »áʹÓÃÂÌÉ«ºÍºìÉ«°ÑÕâÁ½ÖÐ modified ×´Ì¬Çø·Ö¿ªÀ´¡£

2.4 ·ÖÖ§

½ÓÏÂÀ´£¬¿´Ò»¸öºÜÖØÒªµÄ¸ÅÄ·ÖÖ§¡£

·ÖÖ§µÄÄ¿µÄÊÇÈÃÎÒÃÇ¿ÉÒÔ²¢ÐеĽøÐпª·¢¡£±ÈÈçÎÒÃǵ±Ç°ÕýÔÚ¿ª·¢¹¦ÄÜ£¬µ«ÊÇÐèÒªÐÞ¸´Ò»¸ö½ô¼±bug£¬ÎÒÃDz»¿ÉÄÜÔÚÕâ¸öÏîÄ¿ÕýÔÚÐ޸ĵÄ״̬ÏÂÐÞ¸´ bug£¬ÒòΪÕâÑù»áÒýÈë¸ü¶àµÄbug¡£

ÓÐÁË·ÖÖ§µÄ¸ÅÄÎÒÃǾͿÉÒÔн¨Ò»¸ö·ÖÖ§£¬ÐÞ¸´ bug£¬Ê¹Ð¹¦ÄÜÓë bug ÐÞ¸´Í¬²½½øÐС£

·ÖÖ§µÄʵÏÖÆäʵºÜ¼òµ¥£¬ÎÒÃÇ¿ÉÒÔÏÈ¿´Ò»Ï .git/HEAD Îļþ£¬Ëü±£´æÁ˵±Ç°µÄ·ÖÖ§¡£

cat .git/HEAD

=>ref: refs/heads/master

ÆäʵÕâ¸ö ref ±íʾµÄ¾ÍÊÇÒ»¸ö·ÖÖ§£¬ËüÒ²ÊÇÒ»¸öÎļþ£¬ÎÒÃÇ¿ÉÒÔ¼ÌÐø¿´Ò»ÏÂÕâ¸öÎļþµÄÄÚÈÝ£º

cat .git/refs/heads/master

=> 2b388d2c1c20998b6233ff47596b0c87ed3ed8f8

¿ÉÒÔ¿´µ½·ÖÖ§´æ´¢ÁËÒ»¸ö object£¬ÎÒÃÇ¿ÉÒÔʹÓà cat-file ÃüÁî¼ÌÐø²é¿´¸Ã object µÄÄÚÈÝ¡£

git cat-file -p 2b388d2c1c20998b6233ff47596b0c87ed3ed8f8

=> tree 15f880be0567a8844291459f90e9d0004743c8d9

=> parent 3d885a272478d0080f6d22018480b2e83ec2c591

=> author Hehe Tan <xiayule148@gmail.com> 1460971725 +0800

=> committer Hehe Tan <xiayule148@gmail.com> 1460971725 +0800

=>

=> add branch paramter for rebase

´ÓÉÏÃæµÄÄÚÈÝ£¬ÎÒÃÇÖªµÀÁË·ÖÖ§Ö¸ÏòÁËÒ»´ÎÌá½»¡£ÎªÊ²Ã´·ÖÖ§Ö¸ÏòÒ»¸öÌá½»µÄÔ­Òò£¬ÆäʵҲÊÇgitÖеķÖ֧ΪʲôÕâôÇáÁ¿µÄ´ð°¸¡£

ÒòΪ·ÖÖ§¾ÍÊÇÖ¸ÏòÁËÒ»¸ö commit µÄÖ¸Õ룬µ±ÎÒÃÇÌύеÄcommit£¬Õâ¸ö·ÖÖ§µÄÖ¸ÏòÖ»ÐèÒª¸úןüоͿÉÒÔÁË£¬¶ø´´½¨·ÖÖ§½ö½öÊÇ´´½¨Ò»¸öÖ¸Õë¡£

3. ¸ß²ãÃüÁî

ÔÚ git ÖзÖΪÁ½ÖÖÀàÐ͵ÄÃüÁһÖÖÊÇÍê³Éµ×²ã¹¤×÷µÄ¹¤¾ß¼¯£¬³ÆÎªµ×²ãÃüÁÁíÒ»ÖÖÊǶÔÓû§¸üÓѺõĸ߲ãÃüÁî¡£Ò»Ìõ¸ß²ãÃüÁÍùÍùÊÇÓɶàÌõµ×²ãÃüÁî×é³ÉµÄ¡£

²»ÖªµÀµÄÈË¿ÉÄÜÒ»Ìý¸ß²ã¸Ð¾õºÜÀ÷º¦µÄÑù×Ó£¬Æäʵ¾ÍÊÇÖ¸µÄÊÇÄÇЩÎÒÃÇ×ʹÓõÄgitÃüÁî¡£

3.1 Add & Commit

add ºÍ commit Ó¦¸Ã¿ÉÒÔ˵ÊÇÎÒÃÇʹÓÃÆµÂÊ×î¸ßµÄ¸ß²ãÃüÁîÁË¡£

touch README.md

git add README.md

git commit -m "add readme¡±

touch Ö¸µÄÊÇ´´½¨Ò»¸öÎļþ£¬´ú±íÁËÎÒÃǶÔÏîÄ¿ÎļþÄÚÈݵÄÐ޸ģ¬add ²Ù×÷Êǽ«Ð޸ı£´æµ½ÔÝ´æÇø£¬commit Êǽ«ÔÝ´æÇøµÄÄÚÈÝÓÀ¾Ã±£´æµ½±¾µØ²Ö¿â¡£

ÿµ±½«Ð޸ĵÄÎļþ¼ÓÈëµ½ÔÝ´æÇø£¬git ¶¼»á¸ù¾ÝÎļþµÄÄÚÈݼÆËã³ö sha-1£¬²¢½«ÄÚÈÝת»»³É blob£¬Ð´ÈëÊý¾Ý¿â¡£È»ºóʹÓà sha-1 Öµ¸üиÃÁбíÖеÄÎļþÏî¡£ÔÚÔÝ´æÇøµÄÎļþÁбíÖУ¬Ã¿Ò»¸öÎļþÃû£¬¶¼»á¶ÔÓ¦Ò»¸ösha-1Öµ£¬ÓÃÓÚÖ¸ÏòÎļþµÄʵ¼ÊÄÚÈÝ¡£×îºóÌá½»µÄÄÇÒ»¿Ì£¬git»á½«Õâ¸öÁбíÐÅϢת»»ÎªÏîÄ¿µÄ¿ìÕÕ£¬Ò²¾ÍÊÇ tree ¶ÔÏó¡£Ð´ÈëÊý¾Ý¿â£¬²¢ÔÙ¹¹½¨Ò»¸öcommit¶ÔÏó£¬Ð´ÈëÊý¾Ý¿â¡£È»ºó¸üзÖÖ§Ö¸Ïò¡£

3.2 Conflicts & Merge & Rebase

3.2.1 Conflicts

git ÖеķÖÖ§Ê®·ÖÇáÁ¿£¬Òò´ËÎÒÃÇÔÚʹÓÃgitµÄʱºò»áƵ·±µÄÓõ½·ÖÖ§¡£²»¿É²»ÃâµÄÐèÒª½«Ð´´½¨µÄ·ÖÖ§ºÏ²¢¡£

ÔÚ git Öкϲ¢·ÖÖ§ÓÐÁ½ÖÖÑ¡Ôñ£ºmerge ºÍ rebase¡£µ«ÊÇ£¬ÎÞÂÛÄÄÒ»ÖÖ£¬¶¼ÓпÉÄܲúÉú³åÍ»¡£Òò´ËÎÒÃÇÏÈÀ´¿´Ò»Ï³åÍ»µÄ²úÉú¡£

ͼÉϵÄÇé¿ö£¬²¢²»ÊÇÒÆ¶¯·ÖÖ§Ö¸Õë¾ÍÄܽâ¾öÎÊÌâµÄ£¬ËüÐèÒªÒ»Öֺϲ¢²ßÂÔ¡£Ê×ÏÈ£¬ÎÒÃÇÐèÒªÃ÷È·µÄÊÇË­ºÍË­µÄºÏ²¢£¬ÊÇ 2£¬3 Óë 4£¬5£¬6µÄºÏ²¢Âð£¿Ëµµ½·ÖÖ§£¬ÎÒÃÇ×Ü»áÁªÏëµ½Ïߣ¬¾Í»áÈÏΪÊÇÏߵĺϲ¢¡£Æäʵ²»Êǵģ¬ÕæÊµºÏ²¢µÄÊÇ 3 ºÍ 6¡£ÒòΪÿһ´ÎÌá½»¶¼°üº¬ÁËÏîÄ¿ÍêÕûµÄ¿ìÕÕ£¬¼´ºÏ²¢Ö»ÊÇ tree Óë tree µÄºÏ²¢¡£

ÎÒÃÇ¿ÉÒÔÏÈÏëÒ»¸ö¼òµ¥µÄËã·¨¡£ÓÃÀ´±È½Ï3ºÍ6¡£µ«ÊÇÎÒÃÇ»¹ÐèÒªÒ»¸ö±È½ÏµÄ±ê×¼£¬Èç¹ûÖ»ÊÇ3ºÍ6±È½Ï£¬ÄÇô3Óë6Ïà±È£¬Ìí¼ÓÁËÒ»¸öÎļþ£¬Ò²¿ÉÒÔ˵³ÉÊÇ6Óë3±Èɾ³ýÁËÒ»¸öÎļþ£¬ÕâÎÞ·¨È·Çбíʾµ±Ç°µÄ³åͻ״̬¡£Òò´ËÎÒÃÇѡȡËûÃǵÄÁ½¸ö·ÖÖ§µÄ·ÖÆçµã£¨merge base£©×÷Ϊ²Î¿¼µã£¬½øÐбȽϡ£

±È½Ïʱ£¬Ïà¶ÔÓÚ merge base£¨Ìá½»1£©½øÐбȽϡ£

Ê×ÏȰÑ1¡¢3¡¢6ÖÐËùÓеÄÎļþ×öÒ»¸öÁÐ±í£¬È»ºóÒÀ´Î±éÀúÕâ¸öÁбíÖеÄÎļþ¡£ÏÖÔÚÎÒÃÇÄÃÁбíÖеÄÒ»¸öÎļþ½øÐоÙÀý£¬°ÑÔÚÌá½»1¡¢3¡¢6ÖеĸÃÎļþ·Ö±ð³ÆÎª°æ±¾1¡¢°æ±¾3¡¢°æ±¾6¡£

°æ±¾1¡¢°æ±¾3¡¢°æ±¾6µÄ sha-1 ÖµÍêÈ«Ïàͬ£¬ÕâÖÖÇé¿ö±íÃ÷ûÓгåÍ»

°æ±¾3»ò6ÖÁÉÙÒ»¸öÓë°æ±¾1״̬Ïàͬ£¨Ö¸µÄÊÇsha-1ÖµÏàͬ»ò¶¼²»´æÔÚ£©£¬ÕâÖÖÇé¿ö¿ÉÒÔ×Ô¶¯ºÏ²¢¡£±ÈÈç1ÖдæÔÚÒ»¸öÎļþ£¬3¶Ô¸ÃÎļþ½øÐÐÐ޸쬶ø6ÖÐɾ³ýÁËÕâ¸öÎļþ£¬ÔòÒÔ6Ϊ׼¾Í¿ÉÒÔÁË

°æ±¾3»ò°æ±¾6¶¼Óë°æ±¾1µÄ״̬²»Í¬£¬Çé¿ö¸´ÔÓһЩ£¬×Ô¶¯ºÏ²¢²ßÂÔºÜÄÑÉúЧ£¬ÐèÒªÊÖ¶¯½â¾ö¡£ÎÒÃÇÀ´¿´Ò»ÏÂÕâÖÖ״̬µÄ¶¨Òå¡£

³åͻ״̬¶¨Ò壺

1 and 3: DELETED_BY_THEM;

1 and 6: DELETED_BY_US;

3 and 6: BOTH_ADDED;

1 and 3 and 6: BOTH_MODIFIED

ÎÒÃÇÄõÚÒ»ÖÖÇé¿ö¾ÙÀý£¬ÎļþÓÐÁ½ÖÖ״̬ 1 ºÍ 3£¬1 ±íʾ¸ÃÎļþ´æÔÚÓÚ commit 1£¨Ò²¾ÍÊÇMERGE_BASE£©£¬3 ±íʾ¸ÃÎļþÔÚ commit 3 £¨master ·ÖÖ§£©Öб»ÐÞ¸ÄÁË£¬Ã»ÓÐ 6£¬Ò²¾ÍÊǸÃÎļþÔÚ commit 6£¨feature ·ÖÖ§£©±»É¾³ýÁË£¬×ܽáÀ´ËµÕâÖÖ״̬¾ÍÊÇ DELETED_BY_THEM¡£

¿ÉÒÔÔÙ¿´Ò»ÏµÚËÄÖÖÇé¿ö£¬ÎļþÓÐÈýÖÖ״̬ 1¡¢3¡¢6£¬1 ±íʾ commit 1£¨MERGE_BASE£©ÖдæÔÚ£¬3 ±íʾ commit 3£¨master ·ÖÖ§£©½øÐÐÁËÐ޸ģ¬6 ±íʾ£¨feature ·ÖÖ§£©Ò²½øÐÐÁËÐ޸ģ¬×ܽáÀ´Ëµ¾ÍÊÇ BOTH_MODIFIED£¨Ë«·½Ð޸ģ©¡£

Óöµ½²»¿É×Ô¶¯ºÏ²¢³åͻʱ£¬git»á½«ÕâЩ״̬дÈëµ½ÔÝ´æÇø¡£ÓëÎÒÃÇÌÖÂÛ²»Í¬µÄÊÇ£¬gitʹÓÃ1£¬2£¬3±ê¼ÇÎļþ£¬1±íʾÎļþµÄbase°æ±¾£¬2±íʾµ±Ç°µÄ·ÖÖ§µÄ°æ±¾£¬3±íʾҪºÏ²¢·ÖÖ§µÄ°æ±¾¡£

3.2.2 Merge

ÔÚ½â¾öÍê³åÍ»ºó£¬ÎÒÃÇ¿ÉÒÔ½«Ð޸ĵÄÄÚÈÝÌύΪһ¸öеÄÌá½»¡£Õâ¾ÍÊÇ merge¡£

merge Ö®ºóÈÔ¿ÉÒÔ×ö³öеÄÌá½»¡£

¿ÉÒÔ¿´µ½ merge ÊÇÒ»ÖÖ²»Ð޸ķÖÖ§ÀúÊ·Ìá½»¼Ç¼µÄ·½Ê½£¬ÕâÒ²ÊÇÎÒÃdz£Óõķ½Ê½¡£µ«ÊÇÕâÖÖ·½Ê½ÔÚijЩÇé¿öÏÂʹÓà ÆðÀ´²»Ì«·½±ã£¬±ÈÈçµ±ÎÒÃÇ´´½¨ÁË pr¡¢mr »òÕß ½«Ð޸IJ¹¶¡·¢Ë͸ø¹ÜÀíÕߣ¬¹ÜÀíÕßÔںϲ¢²Ù×÷ÖвúÉúÁ˳åÍ»£¬»¹ÐèҪȥ½â¾ö³åÍ»£¬ÕâÎÞÒÉÔö¼ÓÁËËûÈ˵ĸºµ£¡£

ʹÓà rebase ¿ÉÒÔ½â¾öÕâÖÖÎÊÌâ¡£

3.2.3 Rebase

¼ÙÉèÎÒÃǵķÖÖ§½á¹¹ÈçÏ£º

rebase »á°Ñ´Ó Merge Base ÒÔÀ´µÄËùÓÐÌá½»£¬ÒÔ²¹¶¡µÄÐÎʽһ¸öÒ»¸öÖØÐ´ﵽĿ±ê·ÖÖ§ÉÏ¡£ÕâʹµÃÄ¿±ê·ÖÖ§ºÏ²¢¸Ã·ÖÖ§µÄʱºò»áÖ±½Ó Fast Forward£¬¼´²»»á²úÉúÈκγåÍ»¡£Ìá½»ÀúÊ·ÊÇÒ»ÌõÏߣ¬Õâ¶ÔÇ¿ÆÈÖ¢»¼Õß¿ÉνÊÇÒ»´ó¸£Òô¡£

Èç¹ûÎÒÃÇÏëÒª¿´ rebase ʵ¼ÊÉÏ×öÁËʲô£¬ÓÐÒ»¸ö·½·¨£¬ÄǾÍÊÇÓá°Âý¾µÍ·¡±À´¿´rebaseµÄÕû¸ö²Ù×÷¹ý³Ì¡£rebase ÌṩÁ˽»»¥Ê½Ñ¡Ïî(²ÎÊý -i)£¬ÎÒÃÇ¿ÉÒÔÕë¶Ôÿһ¸öpatch£¬Ñ¡ÔñÄãÒª½øÐеIJÙ×÷¡£

ͨ¹ýÕâ¸ö½»»¥Ê½Ñ¡ÏÎÒÃÇ¿ÉÒÔ¡±µ¥²½µ÷ÊÔ¡±rebase²Ù×÷¡£

¾­¹ý²âÊÔ£¬Æäʵ rebase Ö÷ÒªÔÚ .git/rebase-merge ÏÂÉú³ÉÁËÁ½¸öÎļþ£¬·Ö±ðΪ git-rebase-todo ºÍ done Îļþ£¬ÕâÁ½¸öÎļþµÄ×÷Óù⿴Ãû×־ͿÉÒÔ¿´µÃ³öÀ´¡£git-rebase-todo ´æ·ÅÁË rebase ½«Òª²Ù×÷µÄ commit¡£¶ø done ´æ·ÅÕýÔÚ²Ù×÷»òÒѾ­²Ù×÷Íê±ÏµÄ commit¡£±ÈÈçÎÒÃÇÕâÀgit-rebase-todo ´æ·ÅÁË 4¡¢5¡¢6£¬Èý¸öÌá½»¡£

Ê×ÏÈ git ½« sha-1 Ϊ 4 µÄ commit ·ÅÈë done¡£±íʾÕýÔÚ²Ù×÷ 4£¬È»ºó½« 4 ÒÔ²¹¶¡µÄÐÎʽ´òµ½ 3 ÉÏ£¬ÐγÉÁËеÄÌá½» 4¡¯¡£ÕâÒ»²½ÊÇ¿ÉÄܲúÉú³åÍ»µÄ£¬Èç¹ûÓгåÍ»£¬ÐèÒª½â¾öÍê³åͻ֮ºó²ÅÄܼÌÐø²Ù×÷¡£

½Ó׎² sha-1 Ϊ 5 µÄÌá½»·ÅÈë done Îļþ£¬È»ºó½« 5 ÒÔ²¹¶¡µÄÐÎʽ´òµ½ 4¡¯ ÉÏ£¬ÐÎ³É 5¡¯¡£

ÔÙ½Ó׎« sha-1 Ϊ 6 µÄÌá½»·ÅÈë done Îļþ£¬È»ºó½« 6 ÒÔ²¹¶¡µÄÐÎʽ´òµ½ 5¡¯ ÉÏ£¬ÐÎ³É 6¡¯¡£×îºóÒÆ¶¯·ÖÖ§Ö¸Õ룬ʹÆäÖ¸Ïò×îеÄÌá½» 6¡¯ ÉÏ¡£Õâ¾ÍÍê³ÉÁË rebase µÄ²Ù×÷¡£

ÎÒÃÇ¿´Ò»ÏÂÕæÊµµÄ rebase Îļþ¡£

pick e0f56d9 update gitignore

pick e370289 add a

# Commands:

# p, pick = use commit

# r, reword = use commit, but edit the commit message

# e, edit = use commit, but stop for amending

# s, squash = use commit, but meld into previous commit

# f, fixup = like "squash", but discard this commit's log message

# x, exec = run command (the rest of the line) using shell

# d, drop = remove commit

¸ÃÎļþÒ»¹²ÓÐÈýÁУ¬µÚÒ»ÁбíʾҪ½øÐеIJÙ×÷£¬ËùÓпÉÒÔ½øÐеIJÙ×÷£¬ÔÚÏÂÃæ×¢ÊÍÀï¶¼ÁÐÁ˳öÀ´£¬±ÈÈç pick ±íʾʹÓøÃÌá½»£¬reword ±íʾʹÓøÃÌá½»£¬µ«ÐÞ¸ÄÆäÌá½»µÄ message£¬edit ±íʾʹÓøÃÌá½»£¬µ«ÊÇÒª¶Ô¸ÃÌá½»½øÐÐһЩÐ޸쬯äËüµÄ¾Í²»Ò»Ò»ËµÁË¡£

¶ø done ÎļþµÄÐÎʽÈçÏ£¬ºÍ git-rebase-todo ÊÇÒ»ÑùµÄ£º

pick e0f56d9 update gitignore

pick e370289 add a

´Ó¸Õ²ÅµÄͼÖУ¬ÎÒÃǾͿÉÒÔ¿´µ½ rebase µÄÒ»¸öȱµã£¬ÄǾÍÊÇÐÞ¸ÄÁË·ÖÖ§µÄÀúÊ·Ìá½»¡£Èç¹ûÒѾ­½«·ÖÖ§ÍÆË͵½ÁËÔ¶³Ì²Ö¿â£¬»áµ¼ÖÂÎÞ·¨½«Ð޸ĺóµÄ·ÖÖ§ÍÆËÍÉÏÈ¥£¬±ØÐëʹÓà -f ²ÎÊý£¨force£©Ç¿ÐÐÍÆËÍ¡£

ËùÒÔʹÓà rebase ×îºÃ²»ÒªÔÚ¹«¹²·ÖÖ§ÉϽøÐвÙ×÷¡£

3.3 Checkout¡¢Revert¡¢Reset

3.3.1 Checkout

¶ÔÓÚ checkout£¬ÎÒÃÇÒ»°ã²»»áİÉú¡£ÒòΪʹÓÃËüµÄƵÂʷdz£¸ß£¬¾­³£ÓÃÀ´Çл»·ÖÖ§¡¢»òÕßÇл»µ½Ä³Ò»´ÎÌá½»¡£

ÕâÀïÎÒÃÇÒÔÇл»·Ö֧ΪÀý£¬´Ó git µÄ¹¤×÷Çø¡¢ÔÝ´æÇø¡¢±¾µØ²Ö¿â·Ö±ðÀ´¿´ checkout Ëù×öµÄÊÂÇé¡£Checkout ǰµÄ״̬ÈçÏ£º

Ê×ÏÈ checkout ÕÒµ½Ä¿±êÌá½»£¨commit£©£¬Ä¿±êÌá½»ÖеĿìÕÕÒ²¾ÍÊÇ tree ¶ÔÏó¾ÍÊÇÎÒÃÇÒª¼ì³öµÄÏîÄ¿°æ±¾¡£

checkout Ê×Ïȸù¾ÝtreeÉú³ÉÔÝ´æÇøµÄÄÚÈÝ£¬ÔÙ¸ù¾Ý tree ÓëÆä°üº¬µÄ blob ת»»³ÉÎÒÃǵÄÏîÄ¿Îļþ¡£È»ºóÐÞ¸Ä HEAD µÄÖ¸Ïò£¬±íʾÇл»·ÖÖ§¡£

¿ÉÒÔ¿´µ½ checkout ²¢Ã»ÓÐÐÞ¸ÄÌá½»µÄÀúÊ·¼Ç¼¡£Ö»Êǽ«¶ÔÓ¦°æ±¾µÄÏîÄ¿ÄÚÈÝÌáÈ¡³öÀ´¡£

3.3.2 Revert

Èç¹ûÎÒÃÇÏëÒªÓÃÒ»¸öÓÃÒ»¸ö·´ÏòÌá½»»Ö¸´ÏîÄ¿µÄij¸ö°æ±¾£¬ÄǾÍÐèÒª revert À´Ð­ÖúÎÒÃÇÍê³ÉÁË¡£Ê²Ã´ÊÇ·´ÏòÌá½»ÄØ£¬¾ÍÊǾɰ汾Ìí¼ÓÁ˵ÄÄÚÈÝ£¬ÒªÔÚа汾ÖÐɾ³ý£¬¾É°æ±¾ÖÐɾ³ýÁ˵ÄÄÚÈÝ£¬ÒªÔÚа汾ÖÐÌí¼Ó¡£ÕâÔÚ·ÖÖ§ÒѾ­ÍÆË͵½Ô¶³Ì²Ö¿âµÄÇ龳Ϸdz£ÓÐÓá£

Revert ֮ǰ£º

revert Ò²²»»áÐÞ¸ÄÀúÊ·Ìá½»¼Ç¼£¬Êµ¼ÊµÄ²Ù×÷Ï൱ÓÚÊǼì³öÄ¿±êÌá½»µÄÏîÄ¿¿ìÕÕµ½¹¤×÷ÇøÓëÔÝ´æÇø£¬È»ºóÓÃÒ»¸öеÄÌá½»Íê³É°æ±¾µÄ¡°»ØÍË¡±¡£

Revert Ö®ºó£º

Reset

reset ²Ù×÷Óë revert ºÜÏñ£¬ÓÃÀ´ÔÚµ±Ç°·ÖÖ§½øÐа汾µÄ¡°»ØÍË¡±£¬²»Í¬µÄÊÇ£¬reset ÊÇ»áÐÞ¸ÄÀúÊ·Ìá½»¼Ç¼µÄ¡£

reset ³£ÓõÄÑ¡ÏîÓÐÈý¸ö£¬·Ö±ðÊÇ ¡ªsoft, ¡ªmixed, ¡ªhard¡£ËûÃǵÄ×÷ÓÃÓòÒÀ´ÎÔö´ó¡£

ÎÒÃÇ·Ö±ðÀ´¿´¡£

soft »á½ö½öÐ޸ķÖÖ§Ö¸Ïò¡£¶ø²»Ð޸Ť×÷ÇøÓëÔÝ´æÇøµÄÄÚÈÝ£¬ÎÒÃÇ¿ÉÒÔ½Ó×Å×öÒ»´ÎÌá½»£¬ÐγÉÒ»¸öÐ嵀 commit¡£ÕâÔÚÎÒÃdz·ÏúÁÙʱÌá½»µÄ³¡¾°ÏÂÏԵñȽÏÓÐÓá£

ʹÓà reset --soft ǰ£º

ʹÓà reset --soft ºó:

mixed ±È soft µÄ×÷ÓÃÓò¶àÁËÒ»¸ö ÔÝ´æÇø¡£Êµ¼ÊÉÏ mixed Ñ¡ÏîÓë soft Ö»²îÁËÒ»¸ö add ²Ù×÷¡£

ʹÓà reset --mixed ǰ£º

ʹÓà reset --mixed ºó£º

hard »á×÷ÓÃÓòÓÖ±È mixed ¶àÁËÒ»¸ö ¹¤×÷Çø¡£

ʹÓà reset --hard ǰ£º

ʹÓà reset --hard ºó£º

hard Ñ¡Ïî»áµ¼Ö¹¤×÷ÇøÄÚÈÝ¡°¶ªÊ§¡±¡£

ÔÚʹÓà hard Ñ¡Ïîʱ£¬Ò»¶¨ÒªÈ·±£ÖªµÀ×Ô¼ºÔÚ×öʲô£¬²»ÒªÔÚÃÔºýµÄʱºòʹÓÃÕâÌõÑ¡Ïî¡£Èç¹ûÕæµÄÎó²Ù×÷ÁË£¬Ò²²»Òª»Å£¬ÒòΪֻҪ git Ò»°ã²»»áÖ÷¶¯É¾³ý±¾µØ²Ö¿âÖеÄÄÚÈÝ£¬¸ù¾ÝÄ㶪ʧµÄÇé¿ö£¬¿ÉÒÔ½øÐÐÕһأ¬±ÈÈçÔÚ¶ªÊ§ºó¿ÉÒÔʹÓà git reset --hard ORIG_HEAD Á¢¼´»Ö¸´£¬»òÕßʹÓà reflog ÃüÁî²é¿´Ö®Ç°·ÖÖ§µÄÒýÓá£

3.4 stash

ÓÐʱ£¬ÎÒÃÇÔÚÒ»¸ö·ÖÖ§ÉÏ×öÁËһЩ¹¤×÷£¬ÐÞ¸ÄÁ˺ܶà´úÂ룬¶øÕâʱÐèÒªÇл»µ½ÁíÒ»¸ö·ÖÖ§¸Éµã±ðµÄÊ¡£µ«ÓÖ²»Ï뽫ֻ×öÁËÒ»°ëµÄ¹¤×÷Ìá½»¡£ÔÚÔø¾­ÕâÑù×ö¹ý£¬½«µ±Ç°µÄÐÞ¸Ä×öÒ»´ÎÌá½»£¬message Ìîд half of work£¬È»ºóÇл»ÁíÒ»¸ö·ÖÖ§È¥×ö¹¤×÷£¬Íê³É¹¤×÷ºó£¬Çл»»ØÀ´Ê¹Óà reset ¡ªsoft »òÕßÊÇ commit amend¡£

git ΪÁ˰ïÎÒÃǽâ¾öÕâÖÖÐèÇó£¬ÌṩÁË stash ÃüÁî¡£

stash ½«¹¤×÷ÇøÓëÔÝ´æÇøÖеÄÄÚÈÝ×öÒ»¸öÌá½»£¬±£´æÆðÀ´£¬È»ºóʹÓÃreset hardÑ¡Ïî»Ö¸´¹¤×÷ÇøÓëÔÝ´æÇøÄÚÈÝ¡£ÎÒÃÇ¿ÉÒÔËæÊ±Ê¹Óà stash apply ½«ÐÞ¸ÄÓ¦ÓûØÀ´¡£

stash ʵÏÖ˼·½«ÎÒÃǵÄÐÞ¸ÄÌá½»µ½±¾µØ²Ö¿â£¬Ê¹ÓÃÌØÊâµÄ·ÖÖ§Ö¸Õ루.git/refs/stash£©ÒýÓøÃÌá½»£¬È»ºóÔÚ»Ö¸´µÄʱºò£¬½«¸ÃÌá½»»Ö¸´¼´¿É¡£ÎÒÃÇ¿ÉÒÔ¸ü½øÒ»²½£¬¿´¿´ stash ×öµÄÌá½»ÊÇʲôÑùµÄ½á¹¹¡£

ÈçͼËùʾ£¬Èç¹ûÎÒÃÇÌṩÁË ¡ªinclude-untracked Ñ¡Ïgit »á½« untracked Îļþ×öÒ»¸öÌá½»£¬µ«ÊǸÃÌá½»ÊÇÒ»¸öÓÎÀëµÄ״̬£¬½Ó׎«ÔÝ´æÇøµÄÄÚÈÝ×öÒ»¸öÌá½»¡£×îºó½«¹¤×÷ÇøµÄÐÞ¸Ä×öÒ»¸öÌá½»£¬²¢ÒÔuntracked µÄÌá½»¡¢ÔÝ´æÇø µÄÌá½»¡¢»ù´¡ÌύΪ¸¸Ìá½»¡£

¸ãÕâô¸´ÔÓ£¬ÊÇΪÁËÌṩ¸üÁé»îµØÑ¡ÏÎÒÃÇ¿ÉÒÔÑ¡ÔñÐԵĻָ´ÆäÖеÄÄÚÈÝ¡£±ÈÈç»Ö¸´ stash ʱ£¬¿ÉÒÔÑ¡ÔñÊÇ·ñÖØ½¨ index£¬¼´Óë stash ²Ù×÷ʱÍêȫһÖµÄ״̬¡£

3.5 bisect

×îºóÒª½²µ½Ò»¸öÔø¾­°ÑÎÒ´Ó¡°»ð¿Ó¡±ÖоȳöÀ´µÄ¹¦ÄÜ¡£

ÏîÄ¿·¢²¼µ½ÏßÉϵÄÏîÄ¿³öÏÖÁËbug£¬¶ø¾­¹ýÅŲ飬ȴÕÒ²»µ½ÎÊ bug µÄÔ´Í·¡£ÎÒÃÇ»¹ÓÐÒ»ÖÖ·½·¨£¬ÄǾÍÊÇÏÈÕÒµ½ÉÏÒ»´ÎºÃµÄ°æ±¾£¬´ÓÉÏÒ»´Îµ½±¾´ÎÖ®¼äµÄËùÓÐÌá½»ÒÀ´Î³¢ÊÔ£¬Ò»Ò»ÅŲ顣ֱµ½ÕÒµ½³öÏÖÎÊÌâµÄÄÇÒ»´ÎÌá½»£¬È»ºó·ÖÎö bug Ô­Òò¡£

git ΪÎÒÃÇÏëµ½ÁËÕâÑùµÄ³¡¾°£¬Í¬ÑùÊǸղŵÄ˼·£¬µ«ÊÇʹÓöþ·Ö·¨½øÐвéÕÒ¡£Õâ¾ÍÊÇ bisect ÃüÁî¡£

ʹÓøÃÃüÁîºÜ¼òµ¥£¬

git bisect start

git bisect bad HEAD

git bisect good v4.1

git »á¼ÆËãÖмäµÄÒ»¸öÌá½»£¬È»ºóÎÒÃǽøÐвâÊÔ¡£

¸ù¾Ý²âÊÔ½á¹û£¬Ê¹Óà git bisect good or bad ½øÐбê¼Ç£¬git »á×Ô¶¯Çл»µ½ÏÂÒ»¸öÌá½»¡£²»¶ÏµÄÖØ¸´Õâ¸ö²½Ö裬ֱµ½ÕÒµ½×î³õÒýÈë bug µÄÄÇÒ»´ÎÌá½»¡£

ÎÒÃÇÖªµÀ¶þ·Ö·¨µÄЧÂÊÊǺܸߵģ¬2µÄ10´Î·½¾ÍÒѾ­1024ÁË£¬Òò´ËÎÒÃDzâÊÔÒ»°ã×î¶àÊÇ10´Î£¬ÔÙ¶à¾ÍÊÇ11´Î¡¢12´Î¡£ÆäʵÕâ¾ÍÒªÇóÎÒÃÇÓÅ»¯²âÊԵķ½·¨£¬Ê¹µÃ¼òµ¥µÄ²Ù×÷¾ÍÄÜʹ bug ÖØÏÖ¡£Èç¹ûÖØÐµIJÙ×÷·Ç³£¼òµ¥£¬¼òµ¥µ½ÎÒÃÇ¿ÉÒÔʹÓýű¾¾ÍÄܲâÊÔ£¬ÄǾ͸üÇáËÉÁË£¬¿ÉÒÔʹÓà git bisect run ./test.sh£¬Ò»²½µ½Î»¡£

Èç¹ûijһ¸öÌá½»´úÂëÅܲ»ÆðÀ´£¬¿ÉÒÔʹÓà git bisect skip Ìø¹ýµ±Ç°Ìá½»»òÕßʹÓà visualize ÔÚ git ¸ø³öµÄÁбíÖÐÊÖ¶¯Ö¸¶¨Ò»¸öÌá½»½øÐвâÊÔ¡£

 

   
2592 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

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

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

ÅäÖùÜÀíʵ¼ù
ÅäÖùÜÀí·½·¨¡¢¹¤¾ßÓëÓ¦ÓÃ
¶à²ã´Î¼¯³ÉÅäÖùÜÀí
²úÆ··¢²¼¹ÜÀí
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

Èí¼þÅäÖùÜÀíµÄÎÊÌ⡢ĿµÄ
Èí¼þÅäÖùÜÀí¹æ·¶
CQWeb 7.1ÐÔÄܲâÊÔÓëµ÷ÓÅÖ¸ÄÏ
ΪʲôÐèҪʹÓÃClearCase
ClearCaseÓëRTCµÄ¼¯³É
ÀûÓÃClearQuest ½øÐвâÊÔ¹ÜÀí

²úÆ··¢²¼¹ÜÀí
ÅäÖùÜÀí·½·¨¡¢Êµ¼ù¡¢¹¤¾ß
¶à²ã´Î¼¯³ÉÅäÖùÜÀí
ʹÓÃCCÓëCQ½øÐÐÏîĿʵ¼ù
CVSÓëÅäÖùÜÀí
Subversion¹ÜÀíÔ±

ÅäÖùÜÀíʵ¼ù£¨´Ó×éÖ¯¼¶µ½ÏîÄ¿¼¶£©
ͨºÅÔº ÅäÖùÜÀí¹æ·¶ÓëÓ¦ÓÃ
ÅäÖùÜÀíÈÕ¹¹½¨¼°³ÖÐø¼¯³É
µ¤·ð˹ ClearCaseÓëÅäÖùÜÀí
ÖйúÒÆ¶¯ Èí¼þÅäÖùÜÀí
ÖйúÒøÐÐ Èí¼þÅäÖùÜÀí
Ìì½ò»ªÒíÀ¶Ìì¿Æ¼¼ ÅäÖùÜÀíÓëPvcs