±à¼ÍƼö: |
±¾ÎÄÀ´×Ôgit-scm.com£¬ÎÒÃǽ«»áÓÉdzÈëÉͨ¹ýһϵÁÐÓÃÀýÀ´½²ÊöÆäÖеÄÿһ¸ö·½Ã棻´ÓÕâЩÀý×ÓÓ¦¸ÃÄܹ»½¨Á¢Êµ¼ÊÖÐÄãÐèÒªµÄÌØ¶¨¹¤×÷Á÷³Ì¡£
|
|
ÎÄÕµĵÚһƪ
1·Ö²¼Ê½ Git - ·Ö²¼Ê½¹¤×÷Á÷³Ì
ÎÄÕµĵÚÈýƪ
3 ·Ö²¼Ê½ Git - ά»¤ÏîÄ¿
ÏòÒ»¸öÏîÄ¿¹±Ï×
ÃèÊöÈçºÎÏòÒ»¸öÏîÄ¿¹±Ï×µÄÖ÷ÒªÀ§ÄÑÔÚÓÚÍê³É¹±Ï×Óкܶ಻ͬµÄ·½Ê½¡£ ÒòΪ Git ·Ç³£Áé»î£¬ÈËÃÇ¿ÉÒÔͨ¹ý²»Í¬µÄ·½Ê½À´Ò»Æð¹¤×÷£¬ËùÒÔÃèÊöÓ¦¸ÃÈçºÎ¹±Ïײ¢²»ÊǷdz£×¼È·
- ÿһ¸öÏîÄ¿¶¼ÓÐÒ»µã¶ù²»Í¬¡£ Ó°ÏìÒòËØ°üÀ¨»îÔ¾¹±Ï×ÕßµÄÊýÁ¿¡¢Ñ¡ÔñµÄ¹¤×÷Á÷³Ì¡¢ÌύȨÏÞÓë¿ÉÄܰüº¬µÄÍⲿ¹±Ï×·½·¨¡£
µÚÒ»¸öÓ°ÏìÒòËØÊÇ»îÔ¾¹±Ï×ÕßµÄÊýÁ¿ - »ý¼«µØÏòÕâ¸öÏîÄ¿¹±Ï×´úÂëµÄÓû§ÊýÁ¿ÒÔ¼°ËûÃǵűÏׯµÂÊ¡£ ÔÚÐí¶àÇé¿öÏ£¬Äã¿ÉÄÜ»áÓÐÁ½Èý¸ö¿ª·¢ÕßÒ»ÌìÌá½»¼¸´Î£¬¶ÔÓÚ²»»îÔ¾µÄÏîÄ¿¿ÉÄܸüÉÙ¡£
¶ÔÓÚ´óһЩµÄ¹«Ë¾»òÏîÄ¿£¬¿ª·¢ÕßµÄÊýÁ¿¿ÉÄÜ»áÊÇÉÏǧ£¬Ã¿Ìì¶¼ÓгɰÙÉÏǧ´ÎÌá½»¡£ ÕâºÜÖØÒª£¬ÒòÎªËæ×Å¿ª·¢ÕßÔ½À´Ô½¶à£¬ÔÚÈ·±£ÄãµÄ´úÂëÄܸɾ»µØÓ¦ÓûòÇáËɵغϲ¢Ê±»áÓöµ½¸ü¶àÎÊÌâ¡£
Ìá½»µÄ¸Ä¶¯¿ÉÄܱíÏÖΪ¹ýʱµÄ£¬Ò²¿ÉÄÜÔÚÄãÕýÔÚ×ö¸Ä¶¯»òÕߵȴý¸Ä¶¯±»Åú×¼Ó¦ÓÃʱ±»ºÏ²¢ÈëµÄ¹¤×÷ÑÏÖØË𻵡£ ÈçºÎ±£Ö¤´úÂëʼÖÕÊÇ×îÐµģ¬²¢ÇÒÌύʼÖÕÊÇÓÐЧµÄ£¿
ÏÂÒ»¸öÓ°ÏìÒòËØÊÇÏîĿʹÓõŤ×÷Á÷³Ì¡£ ËüÊÇÖÐÐÄ»¯µÄÂ𣬼´Ã¿Ò»¸ö¿ª·¢Õß¶¼¶ÔÖ÷Ïß´úÂëÓÐÏàͬµÄдÈëȨÏÞ£¿
ÏîÄ¿ÊÇ·ñÓÐÒ»¸ö¼ì²éËùÓв¹¶¡µÄά»¤Õß»òÕûºÏÕߣ¿ ÊÇ·ñËùÓеIJ¹¶¡ÊÇͬÐÐÆÀÉóºóÅú×¼µÄ£¿ ÄãÊÇ·ñ²ÎÓëÁËÄǸö¹ý³Ì£¿
ÊÇ·ñ´æÔÚ¸±¹Ùϵͳ£¬Äã±ØÐëÏȽ«ÄãµÄ¹¤×÷Ìá½»µ½ÉÏÃæ£¿
ÏÂÒ»¸öÎÊÌâÊÇÌύȨÏÞ¡£ ÊÇ·ñÓÐÏîÄ¿µÄдȨÏÞ»áʹÏòÏîÄ¿¹±Ï×ËùÐèµÄÁ÷³ÌÓм«´óµÄ²»Í¬¡£ Èç¹ûûÓÐдȨÏÞ£¬ÏîÄ¿»áÑ¡ÔñºÎÖÖ·½Ê½½ÓÊܹ±Ï׵Ť×÷£¿
ÊÇ·ñÉõÖÁÓÐÒ»¸öÈçºÎ¹±Ï׵Ĺ淶£¿ ÄãÒ»´Î¹±Ï×¶àÉÙ¹¤×÷£¿ Äã¶à¾Ã¹±Ï×Ò»´Î£¿
ËùÓÐÕâЩÎÊÌâ¶¼»áÓ°Ïìʵ¼ÊÈçºÎÏòÒ»¸öÏîÄ¿¹±Ï×£¬ÒÔ¼°¶ÔÄãÀ´ËµÄÄЩ¹¤×÷Á÷³Ì¸üÊʺϻòÕß¿ÉÓᣠÎÒÃǽ«»áÓÉdzÈëÉͨ¹ýһϵÁÐÓÃÀýÀ´½²ÊöÆäÖеÄÿһ¸ö·½Ã棻´ÓÕâЩÀý×ÓÓ¦¸ÃÄܹ»½¨Á¢Êµ¼ÊÖÐÄãÐèÒªµÄÌØ¶¨¹¤×÷Á÷³Ì¡£
Ìá½»×¼Ôò
ÔÚÎÒÃÇ¿ªÊ¼²é¿´Ìض¨µÄÓÃÀýǰ£¬ÕâÀïÓÐÒ»¸ö¹ØÓÚÌá½»ÐÅÏ¢µÄ¿ìËÙ˵Ã÷¡£ ÓÐÒ»¸öºÃµÄ´´½¨Ìá½»µÄ×¼Ôò²¢ÇÒ¼á³ÖʹÓûáÈÃÓë
Git ¹¤×÷ºÍÓëÆäËûÈËÐ×÷¸üÈÝÒס£ Git ÏîÄ¿ÌṩÁËÒ»¸öÎĵµ£¬ÆäÖÐÁоÙÁ˹ØÓÚ´´½¨Ìá½»µ½Ìá½»²¹¶¡µÄÈô¸ÉºÃµÄÌáʾ
- ¿ÉÒÔÔÚ Git Ô´´úÂëÖÐµÄ Documentation/SubmittingPatches ÎļþÖÐÔĶÁËü¡£
Ê×ÏÈ£¬Äã²»»áÏëÒª°Ñ¿Õ°×´íÎ󣨸ù¾Ý git help diff µÄÃèÊö£¬½áºÏÏÂÃæ¸ø³öµÄͼƬ£¬¿Õ°×´íÎóÊÇÖ¸ÐÐβµÄ¿Õ¸ñ¡¢Tab
ÖÆ±í·û£¬ºÍÐÐÊ׿ոñºó¸ú Tab ÖÆ±í·ûµÄÐÐΪ£©Ìá½»ÉÏÈ¥¡£ Git ÌṩÁËÒ»¸ö¼òµ¥µÄ·½Ê½À´¼ì²éÕâµã -
ÔÚÌύǰ£¬ÔËÐÐ git diff --check£¬Ëü½«»áÕÒµ½¿ÉÄܵĿհ״íÎó²¢½«ËüÃÇΪÄãÁгöÀ´¡£

Figure 57. git diff --check µÄÊä³ö
Èç¹ûÔÚÌύǰÔËÐÐÄǸöÃüÁ¿ÉÒÔÖªµÀÌá½»ÖÐÊÇ·ñ°üº¬¿ÉÄÜ»áʹÆäËû¿ª·¢ÕßÄÕŵĿհ×ÎÊÌâ¡£
½ÓÏÂÀ´£¬³¢ÊÔÈÃÿһ¸öÌá½»³ÉΪһ¸öÂß¼ÉϵĶÀÁ¢±ä¸ü¼¯¡£ Èç¹û¿ÉÒÔ£¬³¢ÊÔÈøĶ¯¿ÉÒÔÀí½â - ²»ÒªÔÚÕû¸öÖÜÄ©±àÂë½â¾öÎå¸öÎÊÌ⣬ȻºóÔÚÖÜһʱ½«ËüÃÇÌύΪһ¸ö¾Þ´óµÄÌá½»¡£
¼´Ê¹ÔÚÖÜÄ©ÆÚ¼äÄãÎÞ·¨Ìá½»£¬ÔÚÖÜһʱʹÓÃÔÝ´æÇøÓò½«ÄãµÄ¹¤×÷×îÉÙ²ð·ÖΪÿ¸öÎÊÌâÒ»¸öÌá½»£¬²¢ÇÒΪÿһ¸öÌá½»¸½´øÒ»¸öÓÐÓõÄÐÅÏ¢¡£
Èç¹ûÆäÖÐһЩ¸Ä¶¯ÐÞ¸ÄÁËͬһ¸öÎļþ£¬³¢ÊÔʹÓà git add --patch À´²¿·ÖÔÝ´æÎļþ£¨ÔÚ ½»»¥Ê½ÔÝ´æ
ÖÐÓÐÏêϸ½éÉÜ£©¡£ ²»¹ÜÄã×öÒ»¸ö»òÎå¸öÌá½»£¬Ö»ÒªËùÓеĸ͝ÊÇÔÚͬһʱ¿ÌÌí¼ÓµÄ£¬ÏîÄ¿·ÖÖ§Ä©¶ËµÄ¿ìÕÕ¾ÍÊǶÀÁ¢µÄ£¬Ê¹Í¬Ê¿ª·¢Õß±ØÐëÉó²éÄãµÄ¸Ä¶¯Ê±¾¡Á¿ÈÃÊÂÇéÈÝÒ×Щ¡£
µ±ÄãÖ®ºóÐèҪʱÕâ¸ö·½·¨Ò²»áʹÀ³ö»ò»¹ÔÒ»¸ö±ä¸ü¼¯¸üÈÝÒ×Щ¡£ ÖØÐ´ÀúÊ· ÃèÊöÁËÖØÐ´ÀúÊ·Óë½»»¥Ê½ÔÝ´æÎļþµÄÈô¸ÉÓÐÓõÄ
Git ¼¼ÇÉ - ÔÚ½«¹¤×÷·¢Ë͸øÆäËûÈËǰʹÓÃÕâЩ¹¤¾ßÀ´°ïÖúÉú³ÉÒ»¸ö¸É¾»ÓÖÒ×¶®µÄÀúÊ·¡£
×îºóÒ»¼þÒªÀμǵÄÊÂÊÇÌá½»ÐÅÏ¢¡£ ÓÐÒ»¸ö´´½¨ÓÅÖÊÌá½»ÐÅÏ¢µÄϰ¹ß»áʹ Git µÄʹÓÃÓëÐ×÷ÈÝÒ׵Ķࡣ
Ò»°ãÇé¿öÏ£¬ÐÅÏ¢Ó¦µ±ÒÔÉÙÓÚ 50 ¸ö×Ö·û£¨25¸öºº×Ö£©µÄµ¥ÐпªÊ¼ÇÒ¼òÒªµØÃèÊö±ä¸ü£¬½Ó×ÅÊÇÒ»¸ö¿Õ°×ÐУ¬ÔÙ½Ó×ÅÊÇÒ»¸ö¸üÏêϸµÄ½âÊÍ¡£
Git ÏîĿҪÇóÒ»¸ö¸üÏêϸµÄ½âÊÍ£¬°üÀ¨×ö¸Ä¶¯µÄ¶¯»úºÍËüµÄʵÏÖÓë֮ǰÐÐΪµÄ¶Ô±È - ÕâÊÇÒ»¸öÖµµÃ×ñѵĺùæÔò¡£
ÔÚÕâЩÐÅÏ¢ÖÐʹÓÃÏÖÔÚʱ̬ÆíʹÓïÆøÒ²ÊÇÒ»¸öºÃÏë·¨¡£ »»¾ä»°Ëµ£¬Ê¹ÓÃÃüÁî¡£ ʹÓà ¡°Add tests
for.¡± ¶ø²»ÊÇ ¡°I added tests for¡± »ò ¡°Adding tests for,¡±¡£
ÕâÀïÊÇÒ»·Ý×î³õÓÉ Tim Pope дµÄÄ£°å£º
Ð޸ĵÄÕªÒª£¨50 ¸ö×Ö·û»ò¸üÉÙ£©
Èç¹û±ØÒªµÄ»°£¬¼ÓÈë¸üÏêϸµÄ½âÊÍÎÄ×Ö¡£ÔÚ
´ó¸Å 72 ¸ö×Ö·ûµÄʱºò»»ÐС£ÔÚijЩÇéÐÎÏ£¬
µÚÒ»Ðб»µ±×÷Ò»·âµç×ÓÓʼþµÄ±êÌ⣬ʣϵÄ
Îı¾×÷ΪÕýÎÄ¡£·Ö¸ôÕªÒªÓëÕýÎĵĿÕÐÐÊÇ
±ØÐëµÄ£¨³ý·ÇÄãÍêȫʡÂÔÕýÎÄ£©£»Èç¹ûÄ㽫
Á½Õß»ìÔÚÒ»Æð£¬ÄÇôÀàËÆ±ä»ùµÈ¹¤¾ßÎÞ·¨
Õý³£¹¤×÷¡£
¿ÕÐнÓןü½øÒ»²½µÄ¶ÎÂä¡£
- ¾äºÅÒ²ÊÇ¿ÉÒԵġ£
- ÏîÄ¿·ûºÅ¿ÉÒÔʹÓõäÐ͵ÄÁ¬×Ö·û»òÐǺÅ
Ç°ÃæÒ»¸ö¿Õ¸ñ£¬Ö®¼äÓÿÕÐиô¿ª£¬
µ«ÊÇ¿ÉÒÔÒÀ¾Ý²»Í¬µÄ¹ßÀýÓÐËù²»Í¬¡£ |
Èç¹ûÄãËùÓеÄÌá½»ÐÅÏ¢¿´ÆðÀ´¶¼ÏñÕâÑù£¬¶ÔÄãÓë¸úÄ㹤×÷ÔÚÒ»ÆðµÄÆäËû¿ª·¢ÕßÀ´ËµÊÂÇé»á±äµÃ·Ç³£ÈÝÒס£ Git
ÏîÄ¿ÓÐÒ»¸öÁ¼ºÃ¸ñʽ»¯µÄÌá½»ÐÅÏ¢ - ³¢ÊÔÔÚÄǶùÔËÐÐ git log --no-merges À´¿´¿´Æ¯ÁÁµÄ¸ñʽ»¯µÄÏîÄ¿Ìá½»ÀúÊ·ÏñʲôÑù¡£
ÔÚ½ÓÏÂÀ´µÄÀý×ÓÖУ¬ÒÔ¼°¹á´©±¾Êé´ó²¿·Ö£¬³öÓÚ¼ò½àÐÔµÄÔÒò±¾Êé²»»áÓÐÏñÕâÑùƯÁÁ¸ñʽµÄÐÅÏ¢£»Ïà·´£¬ÎÒÃÇʹÓÃ
-m Ñ¡ÏîµÄ git commit¡£ ÕÕÎÒÃÇ˵µÄ×ö£¬¶ø²»ÊÇÕÕÎÒÃÇ×öµÄ×ö¡£
˽ÓÐСÐÍÍŶÓ
Äã¿ÉÄÜ»áÓöµ½µÄ×î¼òµ¥µÄÅäÖÃÊÇÓÐÒ»Á½¸öÆäËû¿ª·¢ÕßµÄ˽ÓÐÏîÄ¿¡£ ¡°Ë½ÓС± ÔÚÕâ¸öÉÏÏÂÎÄÖУ¬Òâζ×űÕÔ´ -
²»¿ÉÒÔ´ÓÍâÃæµÄÊÀ½çÖзÃÎʵ½¡£ ÄãºÍÆäËûµÄ¿ª·¢Õß¶¼ÓвֿâµÄÍÆËÍȨÏÞ¡£
ÔÚÕâ¸ö»·¾³Ï£¬¿ÉÒÔ²ÉÓÃÒ»¸öÀàËÆÊ¹Óà Subversion »òÆäËû¼¯ÖÐʽµÄϵͳʱ»áʹÓõŤ×÷Á÷³Ì¡£
ÒÀÈ»¿ÉÒԵõ½ÏñÀëÏßÌá½»¡¢·Ç³£ÈÝÒ×µØÐ½¨·ÖÖ§ÓëºÏ²¢·ÖÖ§µÈ¸ß¼¶¹¦ÄÜ£¬µ«Êǹ¤×÷Á÷³Ì¿ÉÒÔÊǺܼòµ¥µÄ£»Ö÷ÒªµÄÇø±ðÊǺϲ¢·¢ÉúÔÚ¿Í»§¶ËÕâ±ß¶ø²»ÊÇÔÚÌύʱ·¢ÉúÔÚ·þÎñÆ÷ÄDZߡ£
ÈÃÎÒÃÇ¿´¿´µ±Á½¸ö¿ª·¢ÕßÔÚÒ»¸ö¹²Ïí²Ö¿âÖÐÒ»Æð¹¤×÷ʱ»áÊÇʲôÑù×Ó¡£ µÚÒ»¸ö¿ª·¢Õߣ¬John£¬¿Ë¡Á˲ֿ⣬×öÁ˸͝£¬È»ºó±¾µØÌá½»¡£
£¨ÎªÁËËõ¶ÌÕâЩÀý×Ó³¤¶È£¬ÐÒéÐÅÏ¢Òѱ»Ì滻Ϊ ...¡££©
# John's Machine
$ git clone john@githost:simplegit.git
Initialized empty Git repository in /home/john/simplegit/.git/
...
$ cd simplegit/
$ vim lib/simplegit.rb
$ git commit -am 'removed invalid default value'
[master 738ee87] removed invalid default value
1 files changed, 1 insertions(+), 1 deletions(-) |
µÚ¶þ¸ö¿ª·¢Õߣ¬Jessica£¬×öÁËͬÑùµÄÊÂÇé - ¿Ë¡²Ö¿â²¢Ìá½»ÁËÒ»¸ö¸Ä¶¯£º
# Jessica's
Machine
$ git clone jessica@githost:simplegit.git
Initialized empty Git repository in /home/jessica/simplegit/.git/
...
$ cd simplegit/
$ vim TODO
$ git commit -am 'add reset task'
[master fbff5bc] add reset task
1 files changed, 1 insertions(+), 0 deletions(-) |
ÏÖÔÚ£¬Jessica °ÑËýµÄ¹¤×÷ÍÆË͵½·þÎñÆ÷ÉÏ£º
# Jessica's
Machine
$ git push origin master
...
To jessica@githost:simplegit.git
1edee6b..fbff5bc master -> master |
John Ò²³¢ÊÔÍÆËÍËûµÄ¸Ä¶¯£º
# John's Machine
$ git push origin master
To john@githost:simplegit.git
! [rejected] master -> master (non-fast forward)
error: failed to push some refs to 'john@githost:simplegit.git' |
²»ÔÊÐí John ÍÆËÍÊÇÒòΪÔÚͬһʱ¼ä Jessica ÒÑ¾ÍÆËÍÁË¡£ Èç¹û֮ǰϰ¹ßÓÚÓà Subversion
ÄÇôÀí½âÕâµãÌØ±ðÖØÒª£¬ÒòΪÄã»á×¢Òâµ½Á½¸ö¿ª·¢Õß²¢Ã»Óбà¼Í¬Ò»¸öÎļþ¡£ ¾¡¹Ü Subversion »á¶Ô±à¼µÄ²»Í¬ÎļþÔÚ·þÎñÆ÷ÉÏ×Ô¶¯½øÐÐÒ»´ÎºÏ²¢£¬µ«
Git ÒªÇóÄãÔÚ±¾µØºÏ²¢Ìá½»¡£ John ±ØÐëץȡ Jessica µÄ¸Ä¶¯²¢ºÏ²¢ËüÃÇ£¬²ÅÄܱ»ÔÊÐíÍÆËÍ¡£
$ git fetch
origin
...
From john@githost:simplegit
+ 049d078...fbff5bc master -> origin/master |
ÔÚÕâ¸öʱºò£¬John µÄ±¾µØ²Ö¿â¿´ÆðÀ´ÏñÕâÑù£º

Figure 58. John µÄ·Ö²æÀúÊ·
John ÓÐÒ»¸öÒýÓÃÖ¸Ïò Jessica ÍÆËÍÉÏÈ¥µÄ¸Ä¶¯£¬µ«ÊÇËû±ØÐ뽫ËüÃǺϲ¢Èë×Ô¼ºµÄ¹¤×÷ÖÐÖ®ºó²ÅÄܱ»ÔÊÐíÍÆËÍ¡£
$ git merge
origin/master
Merge made by recursive.
TODO | 1 +
1 files changed, 1 insertions(+), 0 deletions(-) |
ºÏ²¢½øÐеغÜ˳Àû - John µÄÌá½»ÀúÊ·ÏÖÔÚ¿´ÆðÀ´ÏñÕâÑù£º

Figure 59. ºÏ²¢ÁË origin/master Ö®ºó John µÄ²Ö¿â
ÏÖÔÚ£¬John ¿ÉÒÔ²âÊÔ´úÂ룬ȷ±£ËüÒÀÈ»Õý³£¹¤×÷£¬È»ºóËû¿ÉÒ԰Ѻϲ¢µÄй¤×÷ÍÆË͵½·þÎñÆ÷ÉÏ£º
$ git push origin
master
...
To john@githost:simplegit.git
fbff5bc..72bbc59 master -> master |
×îÖÕ£¬John µÄÌá½»ÀúÊ·¿´ÆðÀ´ÏñÕâÑù£º

Figure 60. ÍÆË͵½ origin ·þÎñÆ÷ºó John µÄÀúÊ·
ÔÚ´ËÆÚ¼ä£¬Jessica ÔÚÒ»¸öÌØÐÔ·ÖÖ§ÉϹ¤×÷¡£ Ëý´´½¨ÁËÒ»¸ö³Æ×÷ issue54 µÄÌØÐÔ·ÖÖ§²¢ÇÒÔÚÄǸö·ÖÖ§ÉÏ×öÁËÈý´ÎÌá½»¡£
Ëý»¹Ã»ÓÐץȡ John µÄ¸Ä¶¯£¬ËùÒÔËýµÄÌá½»ÀúÊ·¿´ÆðÀ´ÏñÕâÑù£º

Figure 61. Jessica µÄÌØÐÔ·ÖÖ§
Jessica ÏëÒªÓë John ͬ²½£¬ËùÒÔËý½øÐÐÁËץȡ²Ù×÷£º
# Jessica's
Machine
$ git fetch origin
...
From jessica@githost:simplegit
fbff5bc..72bbc59 master -> origin/master |
ÄÇ»áͬʱÀÈ¡ John ÍÆË͵Ť×÷¡£ Jessica µÄÀúÊ·ÏÖÔÚ¿´ÆðÀ´ÏñÕâÑù£º

Figure 62. ץȡ John µÄ¸Ä¶¯ºó Jessica µÄÀúÊ·
Jessica ÈÏΪËýµÄÌØÐÔ·ÖÖ§ÒѾ׼±¸ºÃÁË£¬µ«ÊÇËýÏëÒªÖªµÀ±ØÐëºÏ²¢Ê²Ã´½øÈëËýµÄ¹¤×÷²ÅÄÜÍÆËÍ¡£ ËýÔËÐÐ
git log À´ÕÒ³ö£º
$ git log --no-merges
issue54..origin/master
commit 738ee872852dfaa9d6634e0dea7a324040193016
Author: John Smith <jsmith@example.com>
Date: Fri May 29 16:01:27 2009 -0700
removed invalid default value |
issue54..origin/master Óï·¨ÊÇÒ»¸öÈÕÖ¾¹ýÂËÆ÷£¬ÒªÇó Git Ö»ÏÔʾËùÓÐÔÚºóÃæ·ÖÖ§£¨ÔÚ±¾ÀýÖÐÊÇ
origin/master£©µ«²»ÔÚÇ°Ãæ·ÖÖ§£¨ÔÚ±¾ÀýÖÐÊÇ issue54£©µÄÌá½»µÄÁÐ±í¡£ ÎÒÃǽ«»áÔÚ
Ìá½»Çø¼ä ÖÐÏêϸ½éÉÜÕâ¸öÓï·¨¡£
Ŀǰ£¬ÎÒÃÇ¿ÉÒÔ´ÓÊä³öÖп´µ½ÓÐÒ»¸ö John Éú³ÉµÄµ«ÊÇ Jessica »¹Ã»Óкϲ¢ÈëµÄÌá½»¡£ Èç¹ûËýºÏ²¢
origin/master£¬Ò²¾ÍÊÇ˵½«»áÐÞ¸ÄËýµÄ±¾µØ¹¤×÷µÄÄǸöµ¥¸öÌá½»¡£
ÏÖÔÚ£¬Jessica ¿ÉÒԺϲ¢ËýµÄÌØÐÔ¹¤×÷µ½ËýµÄ master ·ÖÖ§£¬ºÏ²¢ John µÄ¹¤×÷£¨origin/master£©½øÈëËýµÄ
master ·ÖÖ§£¬È»ºóÔÙ´ÎÍÆËͻطþÎñÆ÷¡£ Ê×ÏÈ£¬ÎªÁËÕûºÏËùÓÐÕâЩ¹¤×÷ËýÇл»»ØËýµÄ master ·ÖÖ§¡£
$ git checkout
master
Switched to branch 'master'
Your branch is behind 'origin/master' by 2 commits,
and can be fast-forwarded. |
Ëý¼È¿ÉÒÔÏȺϲ¢ origin/master Ò²¿ÉÒÔÏȺϲ¢ issue54 - ËüÃǶ¼ÊÇÉÏÓΣ¬ËùÒÔ˳Ðò²¢Ã»ÓйØÏµ¡£
²»ÂÛËýÑ¡ÔñµÄ˳ÐòÊÇʲô×îÖյĽá¹û¿ìÕÕÊÇÍêȫһÑùµÄ£»Ö»ÊÇÀúÊ·»áÓÐÒ»µãÇá΢µÄÇø±ð¡£ ËýÑ¡ÔñÏȺϲ¢Èë issue54£º
$ git merge
issue54
Updating fbff5bc..4af4298
Fast forward
README | 1 +
lib/simplegit.rb | 6 +++++-
2 files changed, 6 insertions(+), 1 deletions(-) |
ûÓз¢ÉúÎÊÌ⣻ÈçÄãËù¼ûËüÊÇÒ»´Î¼òµ¥µÄ¿ì½ø¡£ ÏÖÔÚ Jessica ºÏ²¢Èë John µÄ¹¤×÷£¨origin/master£©£º
$ git merge
origin/master
Auto-merging lib/simplegit.rb
Merge made by recursive.
lib/simplegit.rb | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-) |
ÿһ¸öÎļþ¶¼¸É¾»µØºÏ²¢ÁË£¬Jessica µÄÀúÊ·¿´ÆðÀ´ÏñÕâÑù£º

Figure 63. ºÏ²¢ÁË John µÄ¸Ä¶¯ºó Jessica µÄÀúÊ·
ÏÖÔÚ origin/master ÊÇ¿ÉÒÔ´Ó Jessica µÄ master ·ÖÖ§µ½´ïµÄ£¬ËùÒÔËýÓ¦¸Ã¿ÉÒԳɹ¦µØÍÆËÍ£¨¼ÙÉèͬһʱ¼ä
John ²¢Ã»ÓÐÔÙ´ÎÍÆËÍ£©£º
$ git push origin
master
...
To jessica@githost:simplegit.git
72bbc59..8059c15 master -> master |
ÿһ¸ö¿ª·¢Õß¶¼Ìá½»Á˼¸´Î²¢³É¹¦µØºÏ²¢ÁËÆäËûÈ˵Ť×÷¡£

Figure 64. ÍÆËÍËùÓеĸ͝»Ø·þÎñÆ÷ºó Jessica µÄÀúÊ·
ÕâÊÇÒ»¸ö×î¼òµ¥µÄ¹¤×÷Á÷³Ì¡£ Äãͨ³£ÔÚÒ»¸öÌØÐÔ·ÖÖ§¹¤×÷Ò»»á¶ù£¬µ±Ëü×¼±¸ºÃÕûºÏʱºÏ²¢»ØÄãµÄ master
·ÖÖ§¡£ µ±ÏëÒª¹²Ïí¹¤×÷ʱ£¬½«ÆäºÏ²¢»ØÄã×Ô¼ºµÄ master ·ÖÖ§£¬Èç¹ûÓи͝µÄ»°È»ºóץȡ²¢ºÏ²¢ origin/master£¬×îÖÕÍÆË͵½·þÎñÆ÷ÉϵÄ
master ·ÖÖ§¡£ ͨ³£Ë³ÐòÏñÕâÑù£º

Figure 65. Ò»¸ö¼òµ¥µÄ¶àÈË Git ¹¤×÷Á÷³ÌµÄͨ³£Ê¼þ˳Ðò
˽ÓйÜÀíÍŶÓ
ÔÚ½ÓÏÂÀ´µÄÇéÐÎÖУ¬Äã»á¿´µ½´óÐÍ˽ÓÐÍŶÓÖй±Ï×ÕߵĽÇÉ«¡£ ÔÚÄ㽫ѧϰµ½µÄÕâÖÖ¹¤×÷»·¾³ÖУ¬Ð¡×é»ùÓÚÌØÐÔ½øÐÐÐ×÷£¬ÕâЩÍŶӵűÏ×½«»áÓÉÆäËûÈËÕûºÏ¡£
ÈÃÎÒÃǼÙÉè John Óë Jessica ÔÚÒ»¸öÌØÐÔÉϹ¤×÷£¬Í¬Ê± Jessica Óë Josie
ÔÚµÚ¶þ¸öÌØÐÔÉϹ¤×÷¡£ ÔÚ±¾ÀýÖУ¬¹«Ë¾Ê¹ÓÃÁËÒ»ÖÖÕûºÏ-¹ÜÀíÕß¹¤×÷Á÷³Ì£¬¶ÀÁ¢Ð¡×éµÄ¹¤×÷Ö»Äܱ»Ìض¨µÄ¹¤³ÌʦÕûºÏ£¬Ö÷²Ö¿âµÄ
master ·ÖÖ§Ö»Äܱ»ÄÇЩ¹¤³Ìʦ¸üС£ ÔÚÕâÖÖÇé¿öÏ£¬ËùÓеŤ×÷¶¼ÊÇÔÚ»ùÓÚÍŶӵķÖÖ§ÉÏÍê³ÉµÄ²¢ÇÒÉÔºó»á±»ÕûºÏÕßÀµ½Ò»Æð¡£
ÒòΪ Jessica ÔÚÁ½¸öÌØÐÔÉϹ¤×÷£¬²¢ÇÒÆ½ÐеØÓëÁ½¸ö²»Í¬µÄ¿ª·¢ÕßÐ×÷£¬ÈÃÎÒÃǸúËæËýµÄ¹¤×÷Á÷³Ì¡£
¼ÙÉèËýÒѾ¿Ë¡Á˲ֿ⣬Ê×ÏȾö¶¨ÔÚ featureA ÉϹ¤×÷¡£ ËýΪÄǸöÌØÐÔ´´½¨ÁËÒ»¸öзÖÖ§È»ºóÔÚÄÇ×öÁËһЩ¹¤×÷£º
# Jessica's
Machine
$ git checkout -b featureA
Switched to a new branch 'featureA'
$ vim lib/simplegit.rb
$ git commit -am 'add limit to log function'
[featureA 3300904] add limit to log function
1 files changed, 1 insertions(+), 1 deletions(-) |
ÔÚÕâ¸öʱºò£¬ËýÐèÒª½«¹¤×÷¹²Ïí¸ø John£¬ËùÒÔËýÍÆËÍÁË featureA ·ÖÖ§µÄÌá½»µ½·þÎñÆ÷ÉÏ¡£ Jessica
ûÓÐ master ·ÖÖ§µÄÍÆËÍȨÏÞ - Ö»ÓÐÕûºÏÕßÓÐ - ËùÒÔΪÁËÓë John Ð×÷±ØÐëÍÆËÍÁíÒ»¸ö·ÖÖ§¡£
$ git push -u
origin featureA
...
To jessica@githost:simplegit.git
* [new branch] featureA -> featureA |
Jessica Ïò John ·¢Óʼþ¸æËßËûÒÑ¾ÍÆËÍÁËһЩ¹¤×÷µ½ featureA ·ÖÖ§ÏÖÔÚ¿ÉÒÔ¿´Ò»¿´¡£
µ±ËýµÈ´ý John µÄ·´À¡Ê±£¬Jessica ¾ö¶¨Óë Josie ¿ªÊ¼ÔÚ featureB ÉϹ¤×÷¡£
ΪÁË¿ªÊ¼¹¤×÷£¬Ëý»ùÓÚ·þÎñÆ÷µÄ master ·ÖÖ§¿ªÊ¼ÁËÒ»¸öзÖÖ§¡£
# Jessica's
Machine
$ git fetch origin
$ git checkout -b featureB origin/master
Switched to a new branch 'featureB' |
ÏÖÔÚ£¬Jessica ÔÚ featureB ·ÖÖ§ÉÏ´´½¨Á˼¸´ÎÌá½»£º
$ vim lib/simplegit.rb
$ git commit -am 'made the ls-tree function recursive'
[featureB e5b0fdc] made the ls-tree function recursive
1 files changed, 1 insertions(+), 1 deletions(-)
$ vim lib/simplegit.rb
$ git commit -am 'add ls-files'
[featureB 8512791] add ls-files
1 files changed, 5 insertions(+), 0 deletions(-) |
Jessica µÄ²Ö¿â¿´ÆðÀ´ÏñÕâÑù£º

Figure 66. Jessica µÄ³õʼÌá½»ÀúÊ·
Ëý×¼±¸ºÃÍÆË͹¤×÷ÁË£¬µ«ÊÇÒ»·âÀ´×Ô Josie µÄÓʼþ¸æÖªÒ»Ð©³õʼ¹¤×÷ÒѾ±»ÍÆË͵½·þÎñÆ÷É쵀 featureBee
ÉÏÁË¡£ Jessica ÔÚÄÜÍÆË͵½·þÎñÆ÷ǰÊ×ÏÈÐèÒª½«ÄÇЩ¸Ä¶¯ÓëËý×Ô¼ºµÄºÏ²¢¡£ È»ºóËý¿ÉÒÔͨ¹ý git
fetch ץȡ Josie µÄ¸Ä¶¯£º
$ git fetch
origin
...
From jessica@githost:simplegit
* [new branch] featureBee -> origin/featureBee |
Jessica ÏÖÔÚ¿ÉÒÔͨ¹ý git merge ½«ÆäºÏ²¢µ½Ëý×öµÄ¹¤×÷ÖУº
$ git merge
origin/featureBee
Auto-merging lib/simplegit.rb
Merge made by recursive.
lib/simplegit.rb | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-) |
Óеã¶ùÎÊÌâ - ËýÐèÒª½«ÔÚ featureB ·ÖÖ§ÉϺϲ¢µÄ¹¤×÷ÍÆË͵½·þÎñÆ÷É쵀 featureBee
·ÖÖ§¡£ Ëý¿ÉÒÔͨ¹ýÖ¸¶¨±¾µØ·ÖÖ§¼ÓÉÏðºÅ£¨:£©¼ÓÉÏÔ¶³Ì·ÖÖ§¸ø git push ÃüÁîÀ´ÕâÑù×ö£º
$ git push -u
origin featureB:featureBee
...
To jessica@githost:simplegit.git
fba9af8..cd685d1 featureB -> featureBee |
Õâ³Æ×÷Ò»¸ö ÒýÓùæ¸ñ¡£ ²é¿´ ÒýÓùæ¸ñ ÁË½â¹ØÓÚ Git ÒýÓùæ¸ñÓëͨ¹ýËüÃÇ¿ÉÒÔ×öµÄ²»Í¬µÄÊÂÇéµÄÏêϸÌÖÂÛ¡£
ҲҪעÒâ -u ±ê¼Ç£»ÕâÊÇ --set-upstream µÄ¼òд£¬¸Ã±ê¼Ç»áΪ֮ºóÇáËɵØÍÆËÍÓëÀÈ¡ÅäÖ÷ÖÖ§¡£
½ô½Ó×Å£¬John ·¢Óʼþ¸ø Jessica ˵ËûÒÑ¾ÍÆËÍÁËһЩ¸Ä¶¯µ½ featureA ·ÖÖ§²¢ÒªÇóËýÈ¥ÑéÖ¤ËüÃÇ¡£
ËýÔËÐÐÒ»¸ö git fetch À´ÀÈ¡ÏÂÄÇЩ¸Ä¶¯£º
$ git fetch
origin
...
From jessica@githost:simplegit
3300904..aad881d featureA -> origin/featureA |
È»ºó£¬Í¨¹ý git log Ëý¿ÉÒÔ¿´µ½ÄÄЩ·¢ÉúÁ˸ı䣺
$ git log featureA..origin/featureA
commit aad881d154acdaeb2b6b18ea0e827ed8a6d671e6
Author: John Smith <jsmith@example.com>
Date: Fri May 29 19:57:33 2009 -0700
changed log output to 30 from 25 |
×îÖÕ£¬ËýºÏ²¢ John µÄ¹¤×÷µ½Ëý×Ô¼ºµÄ featureA ·ÖÖ§£º
$ git checkout
featureA
Switched to branch 'featureA'
$ git merge origin/featureA
Updating 3300904..aad881d
Fast forward
lib/simplegit.rb | 10 +++++++++-
1 files changed, 9 insertions(+), 1 deletions(-) |
Jessica ÏëÒªÇá΢µ÷ÕûһЩ¶«Î÷£¬ËùÒÔËýÔÙ´ÎÌύȻºó½«ÆäÍÆËͻطþÎñÆ÷£º
$ git commit
-am 'small tweak'
[featureA 774b3ed] small tweak
1 files changed, 1 insertions(+), 1 deletions(-)
$ git push
...
To jessica@githost:simplegit.git
3300904..774b3ed featureA -> featureA |
Jessica µÄÌá½»ÀúÊ·ÏÖÔÚ¿´ÆðÀ´ÏñÕâÑù£º

Figure 67. ÔÚÒ»¸öÌØÐÔ·ÖÖ§Ìá½»ºó Jessica µÄÀúÊ·
Jessica¡¢Josie Óë John ֪ͨÕûºÏÕßÔÚ·þÎñÆ÷É쵀 featureA Óë featureBee
·ÖÖ§×¼±¸ºÃÕûºÏµ½Ö÷ÏßÖÐÁË¡£ ÔÚÕûºÏÕߺϲ¢ÕâЩ·ÖÖ§µ½Ö÷Ïߺó£¬Ò»´Îץȡ»áÄÃÏÂÀ´Ò»¸öеĺϲ¢Ìá½»£¬Ê¹ÀúÊ·¿´ÆðÀ´ÏñÕâÑù£º

Figure 68. ºÏ²¢ÁË Jessica µÄÁ½¸öÌØÐÔ·ÖÖ§ºóËýµÄÀúÊ·
Ðí¶àÍŶÓÇл»µ½ Git ÊÇÒòΪÕâÒ»ÔÊÐí¶à¸öÍŶӲ¢Ðй¤×÷¡¢²¢ÔÚÖ®ºóºÏ²¢²»Í¬¹¤×÷µÄÄÜÁ¦¡£ ÍŶÓÖиüСһЩµÄ×ÓС×é¿ÉÒÔͨ¹ýÔ¶³Ì·ÖÖ§Ð×÷¶ø²»±ØÓ°Ïì»ò·Á°Õû¸öÍŶӵÄÄÜÁ¦ÊÇ
Git µÄÒ»¸ö¾Þ´óÓÅÊÆ¡£ ÔÚÕâ¶ù¿´µ½µÄ¹¤×÷Á÷³Ì˳ÐòÀàËÆÕâÑù£º

Figure 69. ÕâÖÖ¹ÜÀíÍŶӹ¤×÷Á÷³ÌµÄ»ù±¾Ë³Ðò
ÅÉÉúµÄ¹«¿ªÏîÄ¿
Ïò¹«¿ªÏîÄ¿×ö¹±Ï×ÓÐÒ»µã¶ù²»Í¬¡£ ÒòΪûÓÐȨÏÞÖ±½Ó¸üÐÂÏîÄ¿µÄ·ÖÖ§£¬Äã±ØÐëÓÃÆäËû°ì·¨½«¹¤×÷¸øÎ¬»¤Õß¡£ µÚÒ»¸öÀý×ÓÃèÊöÔÚÖ§³Ö¼òµ¥ÅÉÉúµÄ
Git ÍйÜÉÏʹÓÃÅÉÉúÀ´×ö¹±Ïס£ Ðí¶àÍйÜÕ¾µãÖ§³ÖÕâ¸ö¹¦ÄÜ£¨°üÀ¨ GitHub¡¢BitBucket¡¢Google
Code¡¢repo.or.cz µÈµÈ£©£¬Ðí¶àÏîĿά»¤Õ߯ÚÍûÕâÖÖ·ç¸ñµÄ¹±Ïס£ ÏÂÒ»½Ú»áÌÖÂÛÆ«ºÃͨ¹ýÓʼþ½ÓÊܹ±Ïײ¹¶¡µÄÏîÄ¿¡£
Ê×ÏÈ£¬Äã¿ÉÄÜÏëÒª¿Ë¡Ö÷²Ö¿â£¬Îª¼Æ»®¹±Ï׵IJ¹¶¡»ò²¹¶¡ÐòÁд´½¨Ò»¸öÌØÐÔ·ÖÖ§£¬È»ºóÔÚÄǶù×ö¹¤×÷¡£ ˳Ðò¿´ÆðÀ´»ù±¾ÏñÕâÑù£º
$ git clone
(url)
$ cd project
$ git checkout -b featureA
# (work)
$ git commit
# (work)
$ git commit |
Note Äã¿ÉÄÜ»áÏëҪʹÓà rebase -i À´½«¹¤×÷ѹËõ³ÉÒ»¸öµ¥¶ÀµÄÌá½»£¬»òÕßÖØÅÅÌá½»ÖеŤ×÷ʹ²¹¶¡¸üÈÝÒ×±»Î¬»¤ÕßÉóºË
- ²é¿´ ÖØÐ´ÀúÊ· ÁË½â¹ØÓÚ½»»¥Ê½±ä»ùµÄ¸ü¶àÐÅÏ¢¡£
µ±ÄãµÄ·ÖÖ§¹¤×÷Íê³Éºó×¼±¸½«Æä¹±Ï×»ØÎ¬»¤Õߣ¬È¥ÔʼÏîÄ¿ÖÐÈ»ºóµã»÷ ¡°Fork¡± °´Å¥£¬´´½¨Ò»·Ý×Ô¼ºµÄ¿ÉдµÄÏîÄ¿ÅÉÉú²Ö¿â¡£
È»ºóÐèÒªÌí¼ÓÕâ¸öвֿâ URL ΪµÚ¶þ¸öÔ¶³Ì²Ö¿â£¬ÔÚ±¾ÀýÖгÆ×÷ myfork£º
$ git remote
add myfork (url) |
È»ºóÐèÒªÍÆË͹¤×÷µ½ÉÏÃæ¡£ Ïà¶ÔÓںϲ¢µ½Ö÷·ÖÖ§ÔÙÍÆËÍÉÏÈ¥£¬ÍÆËÍÄãÕýÔÚ¹¤×÷µÄÌØÐÔ·ÖÖ§µ½²Ö¿âÉϸü¼òµ¥¡£ ÔÒòÊǹ¤×÷Èç¹û²»±»½ÓÊÜ»òÕßÊDZ»¼ðÑ¡µÄ£¬¾Í²»±Ø»ØÍËÄãµÄ
master ·ÖÖ§¡£ Èç¹ûά»¤Õߺϲ¢¡¢±ä»ù»ò¼ðÑ¡ÄãµÄ¹¤×÷£¬²»¹ÜÔõÑùÄã×îÖÕ»áͨ¹ýÀÈ¡ËûÃǵIJֿâÕÒ»ØÀ´ÄãµÄ¹¤×÷¡£
$ git push -u myfork featureA |
µ±¹¤×÷ÒѾ±»ÍÆË͵½ÄãµÄÅÉÉúºó£¬ÄãÐèҪ֪ͨά»¤Õß¡£ Õâͨ³£±»³Æ×÷Ò»¸öÀÈ¡ÇëÇó£¨pull request£©£¬Äã¼È¿ÉÒÔͨ¹ýÍøÕ¾Éú³ÉËü
- GitHub ÓÐËü×Ô¼ºµÄ Pull Request »úÖÆ£¬ÎÒÃǽ«»áÔÚ GitHub ½éÉÜ - Ò²¿ÉÒÔÔËÐÐ
git request-pull ÃüÁîÈ»ºóÊÖ¶¯µØ½«Êä³ö·¢Ë͵ç×ÓÓʼþ¸øÏîÄ¿µÄά»¤Õß¡£
request-pull ÃüÁî½ÓÊÜÌØÐÔ·ÖÖ§ÀÈëµÄ»ù´¡·ÖÖ§£¬ÒÔ¼°ËüÃÇÀÈëµÄ Git ²Ö¿â URL£¬Êä³öÇëÇóÀÈëµÄËùÓÐÐ޸ĵÄ×ܽᡣ
ÀýÈ磬Jessica ÏëÒª·¢Ë͸ø John Ò»¸öÀÈ¡ÇëÇó£¬ËýÒѾÔÚ¸Õ¸ÕÍÆË͵ķÖÖ§ÉÏ×öÁËÁ½´ÎÌá½»¡£Ëý¿ÉÒÔÔËÐÐÕâ¸ö£º
$ git request-pull origin/master
myfork
The following changes since commit 1edee6b1d61823a2de3b09c160d7080b8d1b3a40:
John Smith (1):
added a new function
are available in the git repository at:
git://githost/simplegit.git featureA
Jessica Smith (2):
add limit to log function
change log output to 30 from 25
lib/simplegit.rb | 10 +++++++++-
1 files changed, 9 insertions(+), 1 deletions(-) |
Õâ¸öÊä³ö¿ÉÒÔ±»·¢Ë͸øÎ¬»¤Õß - Ëü¸æËßËûÃǹ¤×÷ÊÇ´ÓÄĸö·ÖÖ§¿ªÊ¼¡¢¹éÄɵÄÌá½»Óë´ÓÄÄÀïÀÈëÕâЩ¹¤×÷¡£
ÔÚÒ»¸öÄã²»ÊÇά»¤ÕßµÄÏîÄ¿ÉÏ£¬Í¨³£ÓÐÒ»¸ö×ÜÊǸú×Ù origin/master µÄ master ·ÖÖ§»áºÜ·½±ã£¬ÔÚÌØÐÔ·ÖÖ§ÉÏ×ö¹¤×÷ÊÇÒòΪÈç¹ûËüÃDZ»¾Ü¾øÊ±Äã¿ÉÒÔÇáËɵضªÆú¡£
Èç¹ûͬһʱ¼äÖ÷²Ö¿âÒÆ¶¯ÁËÈ»ºóÄãµÄÌá½»²»ÔÙÄܸɾ»µØÓ¦Óã¬ÄÇôʹ¹¤×÷Ö÷Ìâ¶ÀÁ¢ÓÚÌØÐÔ·ÖÖ§Ò²»áʹÄã±ä»ù£¨rebase£©¹¤×÷ʱ¸üÈÝÒס£
ÀýÈ磬ÄãÏëÒªÌṩµÚ¶þ¸öÌØÐÔ¹¤×÷µ½ÏîÄ¿£¬²»Òª¼ÌÐøÔÚ¸Õ¸ÕÍÆË͵ÄÌØÐÔ·ÖÖ§ÉϹ¤×÷ - ´ÓÖ÷²Ö¿âµÄ master
·ÖÖ§ÖØÐ¿ªÊ¼£º
$ git checkout -b featureB
origin/master
# (work)
$ git commit
$ git push myfork featureB
# (email maintainer)
$ git fetch origin |
ÏÖÔÚ£¬Ã¿Ò»¸öÌØÐÔ¶¼±£´æÔÚÒ»¸öÖü²Ø¿âÖÐ - ÀàËÆÓÚ²¹¶¡¶ÓÁÐ - ¿ÉÒÔÖØÐ´¡¢±ä»ùÓëÐ޸Ķø²»»áÈÃÌØÐÔ»¥Ïà¸ÉÉæ»ò»¥ÏàÒÀÀµ£¬ÏñÕâÑù£º

Figure 70. featureB µÄ³õʼÌá½»ÀúÊ·
¼ÙÉèÏîĿά»¤ÕßÒѾÀÈ¡ÁËÒ»´®ÆäËû²¹¶¡£¬È»ºó³¢ÊÔÀÈ¡ÄãµÄµÚÒ»¸ö·ÖÖ§£¬µ«ÊÇûÓиɾ»µØºÏ²¢¡£ ÔÚÕâÖÖÇé¿öÏ£¬¿ÉÒÔ³¢ÊÔ±ä»ùÄǸö·ÖÖ§µ½
origin/master µÄ¶¥²¿£¬ÎªÎ¬»¤Õß½â¾ö³åÍ»£¬È»ºóÖØÐÂÌá½»ÄãµÄ¸Ä¶¯£º
$ git checkout featureA
$ git rebase origin/master
$ git push -f myfork featureA |
ÕâÑù»áÖØÐ´ÄãµÄÀúÊ·£¬ÏÖÔÚ¿´ÆðÀ´ÏñÊÇ featureA ¹¤×÷Ö®ºóµÄÌá½»ÀúÊ·

Figure 71. featureA ¹¤×÷Ö®ºóµÄÌá½»ÀúÊ·
ÒòΪÄ㽫·ÖÖ§±ä»ùÁË£¬ËùÒÔ±ØÐëÎªÍÆËÍÃüÁîÖ¸¶¨ -f Ñ¡ÏÕâÑù²ÅÄܽ«·þÎñÆ÷ÉÏÓÐÒ»¸ö²»ÊÇËüµÄºó´úµÄÌá½»µÄ
featureA ·ÖÖ§Ìæ»»µô¡£ Ò»¸öÌæ´úµÄÑ¡ÏîÊÇÍÆËÍÕâ¸öй¤×÷µ½·þÎñÆ÷ÉϵÄÒ»¸ö²»Í¬·ÖÖ§£¨¿ÉÄܳÆ×÷ featureAv2£©¡£
ÈÃÎÒÃÇ¿´Ò»¸ö¸üÓпÉÄܵÄÇé¿ö£ºÎ¬»¤Õß¿´µ½ÁËÄãµÄµÚ¶þ¸ö·ÖÖ§ÉϵŤ×÷²¢ÇÒºÜϲ»¶ÆäÖеĸÅÄµ«ÊÇÏëÒªÄãÐÞ¸ÄÒ»ÏÂʵÏÖµÄϸ½Ú¡£
ÄãÒ²¿ÉÒÔÀûÓÃÕâ´Î»ú»á½«¹¤×÷»ùÓÚÏîÄ¿ÏÖÔÚµÄ master ·ÖÖ§¡£ Äã´ÓÏÖÔÚµÄ origin/master
·ÖÖ§¿ªÊ¼Ò»¸öзÖÖ§£¬ÔÚÄǶùѹËõ featureB µÄ¸Ä¶¯£¬½â¾öÈκγåÍ»£¬¸Ä±äʵÏÖ£¬È»ºóÍÆËÍËüΪһ¸öзÖÖ§¡£
$ git checkout -b featureBv2
origin/master
$ git merge --squash featureB
# (change implementation)
$ git commit
$ git push myfork featureBv2 |
--squash Ñ¡Ïî½ÓÊܱ»ºÏ²¢µÄ·ÖÖ§ÉϵÄËùÓй¤×÷£¬²¢½«ÆäѹËõÖÁÒ»¸ö±ä¸ü¼¯£¬Ê¹²Ö¿â±ä³ÉÒ»¸öÕæÕýµÄºÏ²¢·¢ÉúµÄ״̬£¬¶ø²»»áÕæµÄÉú³ÉÒ»¸öºÏ²¢Ìá½»¡£
ÕâÒâζ×ÅÄãµÄδÀ´µÄÌá½»½«»áÖ»ÓÐÒ»¸ö¸¸Ìá½»£¬²¢ÔÊÐíÄãÒýÈëÁíÒ»¸ö·ÖÖ§µÄËùÓи͝£¬È»ºóÔڼǼһ¸öÐÂÌύǰ×ö¸ü¶àµÄ¸Ä¶¯¡£
ͬÑù --no-commit Ñ¡ÏîÔÚĬÈϺϲ¢¹ý³ÌÖпÉÒÔÓÃÀ´ÑÓ³ÙÉú³ÉºÏ²¢Ìá½»¡£
ÏÖÔÚÄã¿ÉÒÔ¸øÎ¬»¤Õß·¢ËÍÒ»ÌõÏûÏ¢£¬±íʾÄãÒѾ×öÁËÒªÇóµÄÐÞ¸ÄÈ»ºóËûÃÇ¿ÉÒÔÔÚÄãµÄ featureBv2
·ÖÖ§ÉÏÕÒµ½ÄÇЩ¸Ä¶¯¡£

Figure 72. featureBv2 ¹¤×÷Ö®ºóµÄÌá½»ÀúÊ·
ͨ¹ýÓʼþµÄ¹«¿ªÏîÄ¿
Ðí¶àÏîÄ¿½¨Á¢Á˽ÓÊܲ¹¶¡µÄÁ÷³Ì - ÐèÒª¼ì²éÿһ¸öÏîÄ¿µÄÌØ¶¨¹æÔò£¬ÒòΪËüÃÇÖ®¼äÓÐÇø±ð¡£ ÒòΪÓм¸¸öÀúÊ·ÓÆ¾ÃµÄ¡¢´óÐ͵ÄÏîÄ¿»áͨ¹ýÒ»¸ö¿ª·¢ÕßµÄÓʼþÁбí½ÓÊܲ¹¶¡£¬ÏÖÔÚÎÒÃǽ«»áͨ¹ýÒ»¸öÀý×ÓÀ´ÑÝʾ¡£
¹¤×÷Á÷³ÌÓë֮ǰµÄÓÃÀýÊÇÀàËÆµÄ - ÄãΪ¹¤×÷µÄÿһ¸ö²¹¶¡ÐòÁд´½¨ÌØÐÔ·ÖÖ§¡£ Çø±ðÊÇÈçºÎÌá½»ËüÃǵ½ÏîÄ¿ÖС£
Éú³Éÿһ¸öÌá½»ÐòÁеĵç×ÓÓʼþ°æ±¾È»ºóÓʼÄËüÃǵ½¿ª·¢ÕßÓʼþÁÐ±í£¬¶ø²»ÊÇÅÉÉúÏîĿȻºóÍÆË͵½Äã×Ô¼ºµÄ¿Éд°æ±¾¡£
$ git checkout -b topicA
# (work)
$ git commit
# (work)
$ git commit |
ÏÖÔÚÓÐÁ½¸öÌá½»Òª·¢Ë͵½ÓʼþÁÐ±í¡£ ʹÓà git format-patch À´Éú³É¿ÉÒÔÓʼĵ½ÁбíµÄ mbox
¸ñʽµÄÎļþ - Ëü½«Ã¿Ò»¸öÌύת»»ÎªÒ»·âµç×ÓÓʼþ£¬Ìá½»ÐÅÏ¢µÄµÚÒ»ÐÐ×÷ΪÖ÷Ì⣬ʣÓàÐÅÏ¢ÓëÌá½»ÒýÈëµÄ²¹¶¡×÷ΪÕýÎÄ¡£
ËüÓÐÒ»¸öºÃ´¦ÊÇÊÇʹÓà format-patch Éú³ÉµÄÒ»·âµç×ÓÓʼþÓ¦ÓõÄÌá½»ÕýÈ·µØ±£ÁôÁËËùÓеÄÌá½»ÐÅÏ¢¡£
$ git format-patch -M origin/master
0001-add-limit-to-log-function.patch
0002-changed-log-output-to-30-from-25.patch |
format-patch ÃüÁî´òÓ¡³öËü´´½¨µÄ²¹¶¡ÎļþÃû×Ö¡£ -M ¿ª¹Ø¸æËß Git ²éÕÒÖØÃüÃû¡£ Îļþ×îºó¿´ÆðÀ´ÏñÕâÑù£º
$ cat 0001-add-limit-to-log-function.patch
From 330090432754092d704da8e76ca5c05c198e71a8
Mon Sep 17 00:00:00 2001
From: Jessica Smith <jessica@example.com>
Date: Sun, 6 Apr 2008 10:17:23 -0700
Subject: [PATCH 1/2] add limit to log function
Limit log functionality to the first 20
---
lib/simplegit.rb | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index 76f47bc..f9815f1 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -14,7 +14,7 @@ class SimpleGit
end
def log(treeish = 'master')
- command("git log #{treeish}")
+ command("git log -n 20 #{treeish}")
end
def ls_tree(treeish = 'master')
--
2.1.0 |
Ò²¿ÉÒÔ±à¼ÕâЩ²¹¶¡ÎļþΪÓʼþÁбíÌí¼Ó¸ü¶à²»ÏëÒªÔÚÌá½»ÐÅÏ¢ÖÐÏÔʾ³öÀ´µÄÐÅÏ¢¡£ Èç¹ûÔÚ --- ÐÐÓë²¹¶¡¿ªÍ·£¨diff
--git ÐУ©Ö®¼äÌí¼ÓÎı¾£¬ÄÇô¿ª·¢Õ߾ͿÉÒÔÔĶÁËü£»µ«ÊÇÓ¦Óò¹¶¡Ê±»áÅųýËü¡£
ΪÁ˽«ÆäÓʼĵ½ÓʼþÁÐ±í£¬Äã¼È¿ÉÒÔ½«ÎļþÕ³Ìù½øµç×ÓÓʼþ¿Í»§¶Ë£¬Ò²¿ÉÒÔͨ¹ýÃüÁîÐгÌÐò·¢ËÍËü¡£ Õ³ÌùÎı¾¾³£»á·¢Éú¸ñʽ»¯ÎÊÌâ£¬ÌØ±ðÊÇÄÇЩ²»»áºÏÊʵر£Áô»»ÐзûÓëÆäËû¿Õ°×µÄ
¡°¸ü´ÏÃ÷µÄ¡± ¿Í»§¶Ë¡£ ÐÒÔ˵ÄÊÇ£¬Git ÌṩÁËÒ»¸ö¹¤¾ß°ïÖúÄãͨ¹ý IMAP ·¢ËÍÕýÈ·¸ñʽ»¯µÄ²¹¶¡£¬Õâ¿ÉÄܶÔÄã¸üÈÝÒ×Щ¡£
ÎÒÃǽ«»áÑÝʾÈçºÎͨ¹ý Gmail ·¢ËÍÒ»¸ö²¹¶¡£¬ËüÕýºÃÊÇÎÒÃÇËùÖª×îºÃµÄÓʼþ´úÀí£»¿ÉÒÔÔÚ֮ǰÌáµ½µÄ Git
Ô´´úÂëÖÐµÄ Documentation/SubmittingPatches ÎļþµÄ×îÏÂÃæÁ˽âһϵÁÐÓʼþ³ÌÐòµÄÏêϸָÁî¡£
Ê×ÏÈ£¬ÐèÒªÔÚ ~/.gitconfig ÎļþÖÐÉèÖà imap Çø¿é¡£ ¿ÉÒÔͨ¹ýһϵÁÐµÄ git config
ÃüÁîÀ´·Ö±ðÉèÖÃÿһ¸öÖµ£¬»òÕßÊÖ¶¯Ìí¼ÓËüÃÇ£¬²»¹ÜÔõÑù×îºóÅäÖÃÎļþÓ¦¸Ã¿´ÆðÀ´ÏñÕâÑù£º
[imap]
folder = "[Gmail]/Drafts"
host = imaps://imap.gmail.com
user = user@gmail.com
pass = p4ssw0rd
port = 993
sslverify = false |
Èç¹û IMAP ·þÎñÆ÷²»Ê¹Óà SSL£¬×îºóÁ½ÐпÉÄÜûÓбØÒª£¬host µÄÖµ»áÊÇ imap:// ¶ø²»ÊÇ
imaps://¡£ µ±ÄÇЩÉèÖÃÍê³Éºó£¬¿ÉÒÔʹÓà git imap-send ½«²¹¶¡ÐòÁзÅÔÚÌØ¶¨ IMAP
·þÎñÆ÷µÄ Drafts Îļþ¼ÐÖУº
$ cat *.patch |git imap-send
Resolving imap.gmail.com... ok
Connecting to [74.125.142.109]:993... ok
Logging in...
sending 2 messages
100% (2/2) done |
ÔÚÕâ¸öʱºò£¬ÄãÓ¦¸ÃÄܹ»µ½ Drafts Îļþ¼ÐÖУ¬ÐÞ¸ÄÊÕ¼þÈË×Ö¶ÎΪÏëÒª·¢ËͲ¹¶¡µÄÓʼþÁÐ±í£¬¿ÉÄÜÐèÒª³Ë͸øÎ¬»¤Õß»ò¸ºÔðÄǸö²¿·ÖµÄÈË£¬È»ºó·¢ËÍ¡£
ÄãÒ²¿ÉÒÔͨ¹ýÒ»¸ö SMTP ·þÎñÆ÷·¢ËͲ¹¶¡¡£ ֮ͬǰһÑù£¬Äã¿ÉÒÔͨ¹ýһϵÁÐµÄ git config
ÃüÁîÀ´·Ö±ðÉèÖÃÑ¡Ï»òÕßÄã¿ÉÒÔÊÖ¶¯µØ½«ËüÃÇÌí¼Óµ½ÄãµÄ ~/.gitconfig ÎļþµÄ sendmail
Çø¿é£º
[sendemail]
smtpencryption = tls
smtpserver = smtp.gmail.com
smtpuser = user@gmail.com
smtpserverport = 587 |
µ±ÕâÍê³Éºó£¬Äã¿ÉÒÔʹÓà git send-email ·¢ËÍÄãµÄ²¹¶¡£º
$ git send-email *.patch
0001-added-limit-to-log-function.patch
0002-changed-log-output-to-30-from-25.patch
Who should the emails appear to be from? [Jessica
Smith <jessica@example.com>]
Emails will be sent from: Jessica Smith <jessica@example.com>
Who should the emails be sent to? jessica@example.com
Message-ID to be used as In-Reply-To for the first
email? y |
È»ºó£¬¶ÔÓÚÕýÔÚ·¢Ë͵Äÿһ¸ö²¹¶¡£¬Git »áͳöÕâÑùµÄÒ»´®ÈÕÖ¾ÐÅÏ¢£º
(mbox) Adding cc: Jessica
Smith <jessica@example.com> from
\line 'From: Jessica Smith <jessica@example.com>'
OK. Log says:
Sendmail: /usr/sbin/sendmail -i jessica@example.com
From: Jessica Smith <jessica@example.com>
To: jessica@example.com
Subject: [PATCH 1/2] added limit to log function
Date: Sat, 30 May 2009 13:29:15 -0700
Message-Id: <1243715356-61726-1-git-send-email-jessica@example.com>
X-Mailer: git-send-email 1.6.2.rc1.20.g8c5b.dirty
In-Reply-To: <y>
References: <y>
Result: OK |
×ܽá
Õâ¸ö²¿·Ö½éÉÜÁË´¦Àí¿ÉÄÜ»áÓöµ½µÄ¼¸¸öåÄÈ»²»Í¬ÀàÐ굀 Git ÏîÄ¿µÄһЩ³£¼ûµÄ¹¤×÷Á÷³Ì£¬½éÉÜÁ˰ïÖú¹ÜÀíÕâ¸ö¹ý³ÌµÄһЩй¤¾ß¡£
½ÓÏÂÀ´£¬Äã»áÁ˽⵽ÈçºÎÔÚ¹±Ï×µÄÁíÒ»Ãæ¹¤×÷£ºÎ¬»¤Ò»¸ö Git ÏîÄ¿¡£ Ä㽫»áѧϰÈçºÎ³ÉΪһ¸öÈʴȵĶÀ²ÃÕß»òÕûºÏ¹ÜÀíÕß¡£ |