ÔÚÈÕ³£µÄGit²Ù×÷ÖУ¬git checkout¡ª¡ª¼ì³ö£¬ÊÇÎÒÃǵij£ÓÃÃüÁî¡£×îΪ³£ÓõÄÁ½ÖÖÇéÐÎÊÇ´´½¨·ÖÖ§ºÍÇл»·ÖÖ§¡£
£¨Ò»£©»ù´¡¡ª¡ªÇ§ÀïÖ®ÐУ¬Ê¼ÓÚÇиâ(checkout)
ÏÈÊìϤϳ£ÓòÙ×÷£¬´´½¨·ÖÖ§ºÍÇл»·ÖÖ§£¬Ò²¿ÉÒÔ³ÆÎª¼ì³ö·ÖÖ§¡£
Ê×ÏÈÎÒÃÇн¨Ò»¸ö²Ö¿âgitTest£¬È»ºóн¨Îļþa£¬ÎªÊ²Ã´ÒªÓÃaÃüÃûÄØ£¬ÕâÀïÊǹÊÒâΪ֮£¬ºóÃæÎª´ó¼Ò½ÒÏþ·ÖÖ§¡£»òÐíÏÂÃæµÄ½éÉÜ»áÓÐЩ¿ÝÔ﷦棬ÒòΪÄúÒѾ¶ÔÕâЩÃüÁîÀÃÊìÓÚÐØ£¬¶øÇÒÔËÓõÃÏ൱ÊìÁ·£¬ÄÇôÄú¿ÉÒÔÖ±½ÓÌø¹ýÕâÒ»²½
ÔÚmaster·ÖÖ§ÉÏ£¬×öÒ»´ÎÌá½»c1£¬È»ºóÏÖÔÚн¨Ò»¸ö·ÖÖ§a£¬²¢Çл»µ½a·ÖÖ§¡£
Õâ¸ö²Ù×÷Ö÷Òª»áÓõ½Á½¸öÃüÁ
´´½¨Ð·ÖÖ§£ºgit branch branchName
Çл»µ½Ð·ÖÖ§£ºgit checkout branchName

È»ºó£¬ÉÏÃæÁ½¸öÃüÁîÒ²¿ÉÒԺϳÉΪһ¸öÃüÁ
git checkout -b branchName

£¨¶þ£©ÕæÏࡪ¡ªHEADÊÇcheckoutµÄÁé»ê
Æäʵ£¬ÎÒÃÇÔÚÇл»·ÖÖ§£¬ºÍн¨·ÖÖ§µÄʱºò£¬ÓÐûÓÐÏë¹ý£¬ÕâЩ²Ù×÷²Ù×÷±³ºóµÄ¹¤×÷ÔÀíÊÇÔõÑùµÄÄØ£¿×î´óµÄ¹¦³¼¾ÍÊÇ.gitĿ¼ÏµÄHEADÒýÓã¬ËýÍðÈçÒ»¸ö°ÅÀÙÎèÕߣ¬´ÓÒ»¸ö·ÖÖ§Æ®ÒݵÄÌøµ½ÁíÒ»¸ö·ÖÖ§£¬ËäÎÞÉùÎÞÏ¢£¬È´¾«×¼Îޱȡ£
ÔÚÎÒÃÇÉí´¦master·ÖÖ§µÄʱºò£¬ÄúÒ»¶¨ºÜºÃÆæ£¬µ±Ç°µÄHEADµÄÄÚÈÝÊÇʲô£¿²»·ÁÀ´¿´¿´°É¡£

ÎÒÃÇ¿´µ½c1µÄÌá½»hashÖµºÍHEAD¶ÔÓ¦·ÖÖ§masterµÄµ±Ç°hashÖµÊÇÒ»ÑùµÄ¡£Ò²¾ÍÊÇ˵£¬HEADÖ¸ÏòµÄÊǵ±Ç°·ÖÖ§Ãûmaster£¬¶ømasterÓÖ¶ÔÓ¦Á˵±Ç°µÄ×îеÄÒ»´ÎÌá½»ID.
ºÃ£¬ÄÇôÎÒÃÇÔÙ×öÒ»´ÎÌá½»£¬¿´¿´master¶ÔÓ¦µÄhashÖµÓÐÎޱ仯¡£

´ÓÉÏͼ£¬ÎÒÃÇ¿ÉÒÔ²»ÄÑ¿´³ö£¬HEAD¶ÔÓ¦µÄrefûÓб仯£¬»¹ÊÇmaster£¬µ«ÊÇmaster¶ÔÓ¦µÄcommit
IDÈ´±ä³ÉÁËc2¶ÔÓ¦µÄcommit ID£¬¼´¸üÐÂΪ×îºóÒ»´ÎÌá½»µÄID¿©¡£
ÏÖÔÚ£¬Ìá½»Ò»´ÎµÄÔÀí£¬ÎÒÃÇÒÑÈ»Á˽⣬ÄÇôÇл»·ÖÖ§µÄʱºòÄØ£¿£¿
ÏÖÔÚÎÒÃÇÉí´¦master·ÖÖ§£¬È»ºóÎÒÃÇÇл»µ½a·ÖÖ§£¬¿´¿´»á·¢ÉúʲôÑùµÄÇé¿ö°É¡£

´ÓÉÏͼ·ÖÎö£¬ÔÚmaster·ÖÖ§ÉϵÄʱºò£¬HEADÖ¸ÏòµÄÊÇmaster£¬¶ÔÓ¦µÄÊÇc2µÄcommit
ID¡£¶øÇл»µ½a·ÖÖ§µÄʱºò£¬HEADÒ²ÏàÓ¦µÄÖ¸ÏòÁËa£¬Í¬Ê±a¶ÔÓ¦µÄÊÇa·ÖÖ§ÉϵÄ×îÐÂcommit ID¡£Òò´Ë£¬ÎÒÃÇ¿ÉÒԵóö½áÂÛ£¬ÔÚÇл»·ÖÖ§µÄʱºò£¬HEADÒ²»áÏàÓ¦µÄÖ¸Ïò¶ÔÓ¦µÄ·ÖÖ§ÒýÓá£
µ«ÊÇ£¬Ê¹ÓÃcheckoutÃüÁîµÄʱºò£¬²¢²»ÊÇÿ´Î¶¼»á¸Ä±äHEADÖ¸ÕëµÄÖ¸ÏòŶ¡£ÔÚʲôÇé¿öÏÂHEADÒ»Ö±¼á¶¨²»ÒƵÄÓµ»¤ÕßËûµÄÅ®ÉñÄØ£¿¿ÉνÒ´ø½¥¿íÖÕ²»»Ú£¬³¤Ê¹Ó¢ÐÛÀáÂú½ó°¡£¡ÈÃÎÒÃǽÓ×ÅÍùÏ¿´¡£
£¨Èý£©½ø½×¡ª¡ªHEAD¶¯²»¶¯£¬¿´ÄãÔõôÓÃ
checkoutÃüÁîÓ÷¨ÈçÏ£º
1. git checkout [-q] [<commit>]
[--] <paths> ...
2. git checkout [<branch>]
3. git checkout [-m] [ [-b | -- orphan
] <new_branch>] [start_point]
Ó÷¨2±ÈÓ÷¨1µÄÇø±ðÔÚÓÚ£¬Ó÷¨1°üº¬ÁË·¾¶¡£ÎªÁ˱ÜÃâ·¾¶ºÍÒýÓ㨻òÌá½»ID£©Í¬Ãû¶ø·¢Éú³åÍ»£¬¿ÉÒÔÔÚ<paths>ǰÓÃÁ½¸öÁ¬ÐøµÄÁ¬×Ö·û×÷Ϊ·Ö¸ô¡£Ó÷¨1µÄ<commit>ÊÇ¿ÉÑ¡ÏÈç¹ûÊ¡ÂÔ£¬ÔòÏ൱ÓÚ´ÓÔÝ´æÇø½øÐмì³ö¡£
À´¿´¸öÀý×Ó£º
Çé¾°1£¬Ê¡ÂÔµô<commit>
ÏÖÔÚÎÒÃÇ´¦ÓÚmaster·ÖÖ§Ï£¬È»ºóÎÒÃÇÐÞ¸ÄÁËÎļþa£¬ÊäÈë¡°c3¡±Îı¾µ½aÖУ¬Õâʱºò£¬ÔÝ´æÇøÖеÄÄÚÈÝÊÇûÓÐ"c3"µÄ£¬Í¨¹ýgit
diff¿ÉÒԱȽϡ£ÏÖÔÚÎÒÃÇ´Óµ±Ç°·ÖÖ§ÔÝ´æÇøÖмì³öÎļþa¡£ÄÇôÎÒÃÇ¿ÉÒÔÖ±½ÓʹÓÃgit checkout a¡£

Õâʱºò£¬Ìáʾ¼ì³öʧ°Ü£¬gitÒÔΪÎÒÃÇÏë¼ì³ö²Ö¿âa¡£»¹¼ÇµÃΪʲôÔÚµÚÒ»²½ÖУ¬ÎÒÃÇÔøÐ½¨µÄÎļþaÂð£¿ÕâÀïÖÕÓÚÅÉÉÏÓó¡ÁË£¬ÓÉÓÚ²Ö¿âÖл¹´æÔÚ·ÖÖ§a£¬Í¬Ê±µ±Ç°·ÖÖ§ÖÐÓÖ´æÔÚÎļþa£¬ÓÚÊÇgitɵɵ·Ö²»Çå³þÁË¡£ÕâʱºòÔõô°ì£¿ÓÐÁ½¸ö°ì·¨£¬µÚÒ»£¬ÎÒÃÇÔÚÃüÃû·ÖÖ§µÄʱºòҪעÒâÓïÒåÐÔ£¬·ÖÖ§ÃûÒª¾ßÓÐÒ»¶¨µÄÒâÒ壬²»ÄÜʹÓüòµ¥µÄa,b,cÀ´ÃüÃû£¬ÕâÑùºÜÈÝÒ×µ¼Ö·ÖÖ§ÃûºÍÎļþÃûÖØ¸´£»µÚ¶þ£¬²ÎÕÕÓ÷¨1£¬Ê¹ÓÃÁ½¸öÁ¬×Ö·ûÀ´·Ö¸ô¡£ÔÚĿǰµÄÇéÐÎÖУ¬ÎÒÃÇʹÓõڶþÖÖ·½·¨°É¡£

Õâʱºò£¬·¢ÏÖ¹¤×÷ÇøµÄÄÚÈݱ»ÔÝ´æÇøµÄÄÚÈݸ²¸Ç£¬"c3"Îı¾Ò²Ã»ÓÐÁË£¬µ±È»HEADÖ¸ÕëҲûÓÐʲô±ä»¯£¬Ò»ÇÐÓÖ»Ö¸´ÁËÆ½¾²¡£
ÔÙ¿´Ò»¸öÀý×Ó£º
Çé¾°2£¬²»Ê¡ÂÔ<commit>
ÔÚ²»Ê¡ÂÔ<commit>µÄʱºò£¬<commit>¼È¿ÉÒÔÊÇijһ¸ö¾ßÌåµÄcommit
hashÖµ£¬Ò²¿ÉÒÔÊÇij¸ö·ÖÖ§Ãû³Æ£¬tagÃû³Æ¡£²»ÂÛ·ÖÖ§Ò²ºÃ£¬tagÒ²ºÃ£¬ËüÃDZ¾ÖÊÉ϶ÔÓ¦µÄ¶¼ÊÇÒ»¸öcommit
hashÖµ¡£

ÔÚ¼ì³öa·Ö֧ϵÄaÎļþµÄʱºò£¬×îºÃ°ÑÁ½¸öÁ¬×Ö·û¼ÓÉÏ£¬²»È»gitÒ²»áÎÞ·¨Çø·Ö¡£Õû¸ö¹ý³ÌÖУ¬HEADÍ·Ö¸ÕëûÓз¢Éú¸Ä¶¯¡£
×ܽ᣺µÚ1ÖÖÓ÷¨£¨°üº¬<paths>µÄÓ÷¨£©²»»á¸Ä±äHEADÍ·Ö¸Õ룬Ö÷ҪʹÓÃÓÚÖ¸¶¨°æ±¾µÄÎļþ¸²¸Ç¹¤×÷ÇøÖжÔÓ¦µÄÎļþ¡£Èç¹ûÊ¡ÂÔ<commit>£¬Ôò»áÓÃÔÝ´æÇøµÄÎļþ¸²¸Ç¹¤×÷ÇøÖеÄÎļþ£¬·ñÔòÓÃÖ¸¶¨Ìá½»ÖеÄÎļþ¸²¸ÇÔÝ´æÇøºÍ¹¤×÷ÇøÖеĶÔÓ¦Îļþ¡£
½ÓÏÂÀ´£¬ÎÒÃÇ¿´¿´Ó÷¨2£¬ÔÚµÚÒ»²¿·ÖÖУ¬ÎÒÃÇÖªµÀÇл»·ÖÖ§£¬»á¸Ä±äHEADµÄÖ¸Ïò£¬ÄÇôÈç¹ûÎÒÃÇÊǼì³öij¸öcommit»áÔõÑùÄØ£¿Í¬¼ì³ö·ÖÖ§Ò»Ñù£¬»áÓøÃcommitϵÄÄÚÈݸ²¸Çµ±Ç°·ÖÖ§¹¤×÷ÇøºÍÔÝ´æÇøµÄÄÚÈÝ£¬Çë¿´Àý×Ó¡£

ĿǰÎÒÃÇ´¦ÓÚmaster·ÖÖ§ÉÏ£¬ÇÒÒѾÓÐÁËÁ½´ÎÌá½»£¬·Ö±ðÊÇc1ºÍc2£¬È»ºóÎÒÃÇÐÞ¸Äa£¬¸øaÎļþÌí¼ÓÄÚÈÝ"c3"£¬²¢addµ½ÔÝ´æÇø£¬Ë漴ʹÓÃcheckoutµ½c1µÄcommit
ÉÏ¡£×¢Ò⣬¸Õ¿ªÊ¼checkoutµÄʱºò£¬git²»»áÔÊÐíÄãÖ±½ÓÇл»£¬ÒòΪÄãÐÞ¸ÄÁËÔÝ´æÇøµÄÄÚÈÝ£¬ Ëü»áÌáÐÑÄãÌá½»ºóÔÙÇл»£¬Õâʱºò£¬Äã¿ÉÒÔʹÓÃ-f
Ç¿ÐÐÇл»¡£Ôٲ鿴״̬µÄʱºò£¬gitÌáʾÎÒÃÇÒѾ²»ÔÚÈκηÖÖ§ÉÏ£¬HEADÖ¸ÕëÒ²ÊÇÖ¸Ïò¾ßÌåµÄc1µÄcommitÖµ£¬½øÈëÁË¡°·ÖÀëÍ·Ö¸Õ롱״̬¡£Õâ¸ö״̬Ï£¬Òª»Øµ½masterÉÏÃæ£¬Ö»ÐèÒªgit
checkout master¼´¿É£¬Ò²¿ÉÒÔÔÚÕâ¸ö״̬ÉÏн¨·ÖÖ§¡£
Èç¹û£¬checkouºóÃæ²»¸úÈκβÎÊý£¬Ôò¾ÍÊǶԹ¤×÷Çø½øÐмì²é£¬Çë¿´Àý×Ó¡£
ÎÒÃÇÉí´¦master·ÖÖ§ÉÏ£¬²¢ÇÒûÓÐÈκθ͝£¬Õâʱºògit checkoutûÓÐÈκÎÊä³ö¡£È»ºó£¬ÎÒÃǸøaÎļþÌí¼ÓÄÚÈÝ¡°c3¡±£¬È»ºóÔÙgit
checkoutһϣ¬git¾Í»áÌáʾaÎļþÓÐÐ޸ģ¬ÊDz»ÊǺܼòµ¥£¿

×ܽ᣺¶ÔÓÚµÚ2ÖÖÓ÷¨£¬²»ÊǼì³öij¸ö¾ßÌåÎļþµÄµÄʱºò£¬¼´²»Ö¸¶¨<paths>µÄʱºò£¬µ¥´¿µÄ¼ì³öij¸öcommit»ò·ÖÖ§£¬ÊÇ»á¸Ä±äHEADÍ·Ö¸ÕëµÄ¡£¶øÇÒÖ»Óе±HEADÇл»µ½Ä³¸ö·ÖÖ§µÄʱºò²Å¿ÉÒÔ¶ÔÌá½»½øÐиú×Ù£¬·ñÔò¾Í»á½øÈë¡°·ÖÀëÍ·Ö¸Õ롱µÄ״̬¡£Èç¹ûÊ¡ÂÔÓ÷¨2ºóÃæµÄ<branch>£¬ÔòĬÈ϶Թ¤×÷Çø½øÐÐ״̬¼ì²é¡£
£¨ËÄ£©ÊìϤµÄcheckout£¬Ä°ÉúµÄÓ÷¨£¬ÂèÂèÔÙÒ²²»Óõ£ÐÄÎÒµÄcheckoutÀ²£¡
1. git branch <branch> <start
point>
ÒÔij¸öcommit´´½¨Ð·ÖÖ§¡£ ÔÚͨ³£Çé¿öÏ£¬ÎÒÃǶ¼»áÔÚµ±Ç°·ÖÖ§µÄ»ù´¡ÉÏ£¬´´½¨Ð·ÖÖ§¡£±ÈÈçgit
branch new_branch Ò²ÐíÄã²»ÖªµÀ£¬ÎÒÃÇ»¹¿ÉÒÔ»ùÓÚµ±Ç°·ÖÖ§µÄijһ´ÎcommitÀ´´´½¨·ÖÖ§¡£Çë¿´£¡

´ÓÉÏͼ¿É¼û£¬ÎÒÃÇÏë»ùÓÚmaster·ÖÖ§µÄc1 Ìá½»ID´´½¨Ð·ÖÖ§new_branch£¬´´½¨³É¹¦ºó£¬Çл»µ½new_branch£¬²é¿´log£¬Ö»ÓÐc1£¬Ò®~~³É¹¦À²£¡
µ±È»£¬Ò²¿ÉÒÔʹÓÃgit checkout -b <new_branch> <start
point>Õâ¸ö³£ÓõÄÃüÁî¡£
2. git checkout --datch <branch>
Çл»µ½·ÖÖ§µÄÓÎÀë״̬£¬Ä¬ÈÏÒԸ÷Ö֧ϵÄ×îºóÒ»´ÎÌá½»ID£¬Çë¿´ÏÂÃæµÄÀý×Ó¡£
µ±Ç°·Ö֧Ϊa£¬È»ºóʹÓÃgit checkout --detach master£¬ÄÇôHEAD¾Í»áÇл»µ½masterµÄ×îºóÒ»´ÎcommitÖµµÄ״̬Ï£¡

3. git checkout -B <branch>
Õâ¸öÃüÁ¿ÉÒÔÇ¿ÖÆ´´½¨ÐµķÖÖ§£¬ÎªÊ²Ã´¼Ó-BÄØ£¿Èç¹ûµ±Ç°²Ö¿âÖУ¬ÒѾ´æÔÚÒ»¸ö¸úÄãн¨·Ö֧ͬÃûµÄ·ÖÖ§£¬ÄÇôʹÓÃÆÕͨµÄgit
checkout -b <branch>Õâ¸öÃüÁÊǻᱨ´íµÄ£¬ÇÒͬÃû·ÖÖ§ÎÞ·¨´´½¨¡£Èç¹ûʹÓÃ-B²ÎÊý£¬ÄÇô¾Í¿ÉÒÔÇ¿ÖÆ´´½¨ÐµķÖÖ§£¬²¢»á¸²¸ÇµôÔÀ´µÄ·ÖÖ§¡£Çë¿´¾ßÌå²Ù×÷¡£
µ±Ç°·Ö֧Ϊmaster£¬ÇÒ²Ö¿âÖÐÒѾ´æÔÚ·ÖÖ§a£¬ÎÒÃÇÏÈÓÃgit checkout -b aÀ´´´½¨a·ÖÖ§£¬±ØÈ»»áʧ°ÜµÄ£¬²¢ÌáʾÎÒÃDzֿâÖÐÒѾÓÐÁËÒ»¸öa·ÖÖ§¿©£¬·Â·ðÔÚ˵¡°hi£¬¸çÃÇ£¬ÄãÒѾÓÐÁËÒ»¸öÀÏÆÅÁË£¬Ò»·òÒ»ÆÞÖÆÄãµÄ²»¶®£¿ÄãÒÔΪÕâÀïÊÇÓ¡¶È°¡£¿¡±¡£Ëæºó£¬ÎÒÃÇʹÓÃgit
checkout -B a£¬Ò®~~£¬it works!

4. git checkout --orphan <branch>
Êǵ쬼ÙÈçÄãµÄij¸ö·ÖÖ§ÉÏ£¬»ýÀÛÁËÎÞÊý´ÎµÄÌá½»£¬ÄãÒ²ÀÁµÃÈ¥´òÀí£¬´òÓ¡³öµÄlogÒ²ÈÃÄãÎÞÁ¦Í²ۣ¬ÄÇôÕâ¸öÃüÁÊÇÄãµÄÉñÆ÷£¬Ëü»á»ùÓÚµ±Ç°ËùÔÚ·Ö֧н¨Ò»¸ö³àÂãÂãµÄ·ÖÖ§£¬Ã»ÓÐÈκεÄÌá½»ÀúÊ·£¬µ«Êǵ±Ç°·ÖÖ§µÄÄÚÈÝÒ»Ò»¾ãÈ«¡£Ð½¨µÄ·ÖÖ§£¬ÑϸñÒâÒåÉÏ˵£¬»¹²»ÊÇÒ»¸ö·ÖÖ§£¬ÒòΪHEADÖ¸ÏòµÄÒýÓÃÖÐûÓÐcommitÖµ£¬Ö»ÓÐÔÚ½øÐÐÒ»´ÎÌá½»ºó£¬Ëü²ÅËãµÃÉÏÕæÕýµÄ·ÖÖ§¡£»¹µÈÊ²Ã´ÄØ£¿¸Ï½ôÊÔÊÔ£¡

ºÃÁË£¬ÏÖÔÚÎÒÃÇÖÕÓÚÕÒµ½×éÖ¯ÁË£¡

5. git checkout --merge <branch>
Õâ¸öÃüÁîÊÊÓÃÓÚÔÚÇл»·ÖÖ§µÄʱºò£¬½«µ±Ç°·ÖÖ§Ð޸ĵÄÄÚÈÝÒ»Æð´ò°ü´ø×ߣ¬Í¬²½µ½Çл»µÄ·ÖÖ§Ï¡£

ÓÐÁ½¸öÐèҪעÒâµÄÎÊÌâ¡£
µÚÒ»£¬Èç¹ûµ±Ç°·ÖÖ§ºÍÇл»·ÖÖ§¼äµÄÄÚÈݲ»Í¬µÄ»°£¬ÈÝÒ×Ôì³É³åÍ»¡£
µÚ¶þ£¬Çл»µ½Ð·ÖÖ§ºó£¬µ±Ç°·ÖÖ§Ð޸ĹýµÄÄÚÈݾͶªÊ§ÁË¡£
ËùÒÔÕâ¸öÃüÁÉ÷Óã¡
6. git checkout -p <branch>
Õâ¸öÃüÁî¿ÉÒÔÓÃÀ´´ò²¹¶¡¡£Õâ¸öÃüÁîÖ÷ÒªÓÃÀ´±È½ÏÁ½¸ö·ÖÖ§¼äµÄ²îÒìÄÚÈÝ£¬²¢Ìṩ½»»¥Ê½µÄ½çÃæÀ´Ñ¡Ôñ½øÒ»²½µÄ²Ù×÷¡£Õâ¸öÃüÁî²»½ö¿ÉÒԱȽÏÁ½¸ö·ÖÖ§¼äµÄ²îÒ죬»¹¿ÉÒԱȽϵ¥¸öÎļþµÄ²îÒìŶ£¡

½áÊøÓÖÁ´Ë£¬¹ØÓÚgit checkoutÃüÁîÔݸæÒ»¶ÎÂ䣬¶ÔÓÚcheckoutÃüÁÄãÒ²ÓÐËùÊìϤÁ˰ɡ£µ±È»£¬git
checkout»¹ÓÐһЩÆäËüÓ÷¨£¬±¾ÎIJ¢Ã»Óн²µ½£¬Äã¿ÉÒÔÔÚgit bash»òÖÕ¶ËÖÐʹÓÃgit checkout
--helpÈ¥½øÒ»²½Á˽⣡ |