Îå¡¢GIT·ÖÖ§
·ÖÖ§±»³ÆÖ®ÎªGIT×îÇ¿´óµÄÌØÐÔ£¬ÒòΪËü·Ç³£µØÇáÁ¿¼¶£¬Èç¹ûÓÃPerforceµÈ¹¤¾ßÓ¦¸ÃÖªµÀ£¬´´½¨·ÖÖ§¾ÍÊǿˡÔĿ¼µÄÒ»¸öÍêÕû¸±±¾£¬¶ÔÓÚ´óÐ͹¤³ÌÀ´Ëµ£¬Ì«·Ñʱ·ÑÁ¦ÁË£¬¶ø¶ÔÓÚGITÀ´Ëµ£¬¿ÉÒÔÔÚ˲¼äÉú³ÉÒ»¸öеķÖÖ§£¬ÎÞÂÛ¹¤³ÌµÄ¹æÄ£Óжà´ó£¬ÒòΪGITµÄ·ÖÖ§Æäʵ¾ÍÊÇÒ»Ö¸Õë¶øÒÑ¡£ÔÚÁ˽âGIT·Ö֧֮ǰ£¬Ó¦¸ÃÏÈÁ˽âGITÊÇÈçºÎ´æ´¢Êý¾ÝµÄ¡£
Ç°ÃæËµ¹ý£¬GIT´æ´¢µÄ²»ÊÇÎļþ¸÷¸ö°æ±¾µÄ²îÒ죬¶øÊÇÎļþµÄÿһ¸ö°æ±¾´æ´¢Ò»¸ö¿ìÕÕ¶ÔÏó£¬È»ºóͨ¹ýSHA-1Ë÷Òý£¬²»Ö»ÊÇÎļþ£¬°ü»»Ã¿¸öÌá½»¶¼ÊÇÒ»¸ö¶ÔÏó²¢Í¨¹ýSHA-1Ë÷Òý¡£ÎÞÂÛÊÇÎı¾Îļþ£¬¶þ½øÖÆÎļþ»¹ÊÇÌá½»£¬¶¼ÊÇGIT¶ÔÏó¡£
GIT¶ÔÏó
ÿ¸ö¶ÔÏó(object) °üÀ¨Èý¸ö²¿·Ö£ºÀàÐÍ£¬´óСºÍÄÚÈÝ¡£´óС¾ÍÊÇÖ¸ÄÚÈݵĴóС£¬ÄÚÈÝÈ¡¾öÓÚ¶ÔÏóµÄÀàÐÍ£¬ÓÐËÄÖÖÀàÐ͵ĶÔÏó£º"blob"¡¢"tree"¡¢
"commit" ºÍ"tag"¡£
1.¡°blob¡±ÓÃÀ´´æ´¢ÎļþÊý¾Ý£¬Í¨³£ÊÇÒ»¸öÎļþ¡£
2.¡°tree¡±ÓеãÏñÒ»¸öĿ¼£¬Ëü¹ÜÀíһЩ¡°tree¡±»òÊÇ ¡°blob¡±£¨¾ÍÏñÎļþºÍ×ÓĿ¼£©
3.Ò»¸ö¡°commit¡±Ö¸ÏòÒ»¸ö"tree"£¬ËüÓÃÀ´±ê¼ÇÏîĿijһ¸öÌØ¶¨Ê±¼äµãµÄ״̬¡£Ëü°üÀ¨Ò»Ð©¹ØÓÚʱ¼äµãµÄÔªÊý¾Ý£¬ÈçÌύʱ¼ä¡¢Ìύ˵Ã÷¡¢×÷Õß¡¢Ìá½»Õß¡¢Ö¸ÏòÉÏ´ÎÌá½»£¨commits£©µÄÖ¸ÕëµÈµÈ¡£
4.Ò»¸ö¡°tag¡±ÊÇÀ´±ê¼Çijһ¸öÌá½»(commit) µÄ·½·¨¡£
±ÈÈç˵ÎÒÃÇÖ´ÐÐÁËÒÔÏ´úÂë½øÐÐÁËÒ»´ÎÌá½»£º
$ git add README test.rb LICENSE2 $ git commit -m 'initial commit of my project' |
ÏÖÔÚ,Git ²Ö¿âÖÐÓÐÎå¸ö¶ÔÏó:Èý¸ö±íʾÎļþ¿ìÕÕÄÚÈÝµÄ blob ¶ÔÏó;Ò»¸ö¼Ç¼×ÅĿ¼Ê÷ÄÚÈݼ°ÆäÖи÷¸öÎļþ¶ÔÓ¦
blob ¶ÔÏóË÷ÒýµÄ tree ¶ÔÏó;ÒÔ¼°Ò»¸ö°üº¬Ö¸Ïò tree ¶ÔÏó(¸ùĿ¼)µÄË÷ÒýºÍÆäËûÌá½»ÐÅÏ¢ÔªÊý¾ÝµÄ
commit ¶ÔÏ󡣸ÅÄîÉÏÀ´Ëµ,²Ö¿âÖеĸ÷¸ö¶ÔÏó±£´æµÄÊý¾ÝºÍÏ໥¹ØÏµ¿´ÆðÀ´ÈçÏÂͼ£º

Èç¹û½øÐжà´ÎÌá½»£¬²Ö¿âµÄÀúÊ·»áÏñÕâÑù£º

·ÖÖ§ÒýÓÃ
ËùνµÄGIT·ÖÖ§£¬Æäʵ¾ÍÊÇÒ»¸öÖ¸Ïòijһ¸öCommit¶ÔÏóµÄÖ¸Õ룬ÏñÏÂÃæÕâÑù£¬ÓÐÁ½¸ö·ÖÖ§£¬masterÓëtesting£º

¶øÎÒÃÇÔõô֪µÀµ±Ç°ÔÚÄÄÒ»¸ö·ÖÖ§ÄØ£¿Æäʵ¾ÍÊǺܼòµ¥µØÊ¹ÓÃÁËÒ»¸öÃû½ÐHEADµÄÖ¸Õ룬ÈçÉÏͼËùʾ¡£HEADÖ¸ÕëµÄÖµ¿ÉÒÔΪһ¸öSHA-1Öµ»òÊÇÒ»¸öÒýÓ㬿´ÒÔÏÂÀý×Ó£º

gitµÄËùÓа汾ÐÅÏ¢¶¼±£´æÁËWorking DirectoryϵÄ.gitĿ¼£¬¶øHEADÖ¸Õë¾Í±£´æÔÚ.gitĿ¼Ï£¬ÈçÉÏͼËùÓУ¬Ä¿Ç°ÎªÖ¹ÒѾÓÐ3¸öÌá½»£¬Í¨¹ý²é¿´HEADµÄÖµ¿ÉÒÔ¿´µ½ÎÒÃǵ±Ç°ÔÚmaster·ÖÖ§£ºrefs/heads/master£¬µ±ÎÒÃÇͨ¹ýgit
checkoutÈ¡³öÄ³Ò»ÌØ¶¨Ìá½»ºó£¬HEADµÄÖµ¾ÍÊdzÉÁËÎÒÃÇcheckoutµÄÌá½»µÄSHA-1Öµ¡£
¼Ç¼ÎÒÃǵ±Ç°µÄλÖúܼòµ¥£¬¾ÍÊÇÄܹýHEADÖ¸Õ룬HEADÖ¸ÏòijһÌá½»µÄSHA-1Öµ»òÊÇijһ·ÖÖ§µÄÒýÓá£
н¨·ÖÖ§
ÓÐʱÐèÒªÔÚн¨·ÖÖ§ºóÖ±½ÓÇл»µ½Ð½¨µÄ·ÖÖ§£¬¿ÉÒÔÖ±½ÓÓÃcheckoutµÄ-bÑ¡Ïî
git checkout -b <branch-name> |
ɾ³ý·ÖÖ§
git branch -d <branch-name> |
Èç¹ûÔÚÖ¸¶¨µÄ·ÖÖ§ÓÐһЩunmergedµÄÌá½»£¬É¾³ý·ÖÖ§»áʧ°Ü£¬ÕâÀï¿ÉÒÔʹÓÃ-D²ÎÊýÇ¿ÖÆÉ¾³ý·ÖÖ§¡£
git branch -D <branch-name> |
¼ì³ö·ÖÖ§»òÌá½»
¼ì³öijһ·ÖÖ§»òijһÌá½»ÊÇͬһ¸öÃüÁî
git checkout <branch-name> | <commit> |
·ÖÖ§ºÏ²¢(merge)
µ±ÎÒÃÇн¨Ò»¸ö·ÖÖ§½øÐпª·¢£¬²¢Ìá½»Á˼¸´Î¸üк󣬸оõÊÇʱºò½«Õâ¸ö·ÖÖ§µÄÄÚÈݺϻØÖ÷ÏßÁË£¬ÕâÊǾͿÉÒÔÈ¡³öÖ÷Ïß·ÖÖ§£¬È»ºó°Ñ·ÖÖ§µÄ¸üÐÂmerge»ØÀ´£º
git checkout master
git merge testing
|
Èç¹ûmaster·ÖÖ§ÊÇtesting·ÖÖ§µÄÖ±½ÓÉÏÓΣ¬¼´´ÓmasterÑÓ×Åtesting·ÖÖ§µÄÌá½»ÀúÊ·Íùǰ×ß¿ÉÒÔÖ±½Ó×ßµ½testing·ÖÖ§µÄ×îÐÂÌá½»£¬ÄÇôϵͳʲôҲ²»ÐèÒª×ö£¬Ö»ÐèÒª¸Ä±ämaster·ÖÖ§µÄÖ¸Õë¼´¿É£¬Õâ±»³ÆÖ®Îª"Fast
Forward"¡£
µ«ÊÇ£¬Ò»°ãÇé¿öÊÇÕâÑùµÄ£¬ÄãÈ¡³öÁË×îеÄmaster·ÖÖ§£¬±ÈÈç˵master·ÖÖ§×îеÄÌá½»ÊÇC2£¨¼ÙÉè¹²3´ÎÌá½»C0<-C1<-C2)£¬ÔÚ´Ë»ù´¡ÉÏÄãн¨ÁË·ÖÖ§£¬µ±ÄãÔÚ·ÖÖ§ÉÏÌá½»ÁËC3¡¢C5ºóÏ뽫br1ʱmerge»Ømasterʱ£¬Äã·¢ÏÖÒѾÓÐÆäËûÈËÌá½»ÁËC4£¬Õâʱºò¾Í²»ÄÜÖ±½ÓÐÞ¸ÄmasterµÄÖ¸ÕëÁË£¬²»È»»á¶ªÊ§±ðÈ˵ÄÌá½»£¬Õâ¸öʱºò¾ÍÐèÒª½«Äãн¨·Ö֧ʱmasterËùÔÚµÄÌá½»£¨C2£©ºóµÄÐ޸ģ¨C4£©£¬ÓëÄãн¨·ÖÖ§ºóÔÚ·ÖÖ§ÉϵÄÐ޸ģ¨C3¡¢C5)×öºÏ²¢£¬½«ºÏ²¢ºóµÄ½á¹û×÷Ϊһ¸öеÄÌá½»Ìá½»µ½master£¬GIT¿ÉÒÔ×Ô¶¯ÍƵ¼³öÓ¦¸Ã»ùÓÚÄĸöÌá½»½øÐкϲ¢£¨C2£©£¬Èç¹ûûÓгåÍ»£¬ÏµÍ³»á×Ô¶¯ÌύеÄÌá½»£¬Èç¹ûÓгåÍ»£¬ÏµÍ³»áÌáʾÄã½â¾ö³åÍ»£¬µ±³åÍ»½â¾öºó£¬Äã¾Í¿ÉÒÔ½«Ð޸ļÓÈëÔÝ´æÇø²¢Ìá½»¡£Ìá½»ÀúÊ·ÀàËÆÏÂÃæÕâÑù£¨Í¼À´×ÔPro-Git)£º

mergeºóµÄÌá½»Êǰ´Ê±¼äÅÅÐòµÄ£¬±ÈÈçÏÂͼ£¬ÎÒÃÇÔÚrenameÌá½»´¦Ð½¨·ÖÖ§test£¬ÔÚtestÉÏÌá½»Commit
from branch test£¬È»ºó»Øµ½masterÌá½»commit in master after
committing in branch£¬ÔÙ½«test·ÖÖ§merge½ømaster£¬Õâʱ¿´Ìá½»Ìá½»ÀúÊ·£¬Commit
from branch testÊÇÔÚcommit in master...֮ǰµÄ£¬¾¡¹ÜÔÚmasterÉÏÎÒÃÇÊÇÔÚrenameµÄ»ù´¡ÉÏÌá½»µÄcommit
in master...¶øGIT»áÔÚ×îºóÌí¼ÓÒ»¸öеÄÌá½»£¨Merge branch 'test'£©±íʾÎÒÃÇÔÚ´Ë´¦½«Ò»¸ö·ÖÖ§merge½øÀ´ÁË¡£ÕâÖÖÇé¿ö»áÓÐÒ»¸öÎÊÌ⣬±ÈÈç˵ÔÚrenameÌá½»´¦Ä³ÈËA´ÓÄãÕâÀïCopyÁËÒ»¸öGIT²Ö¿â£¬È»ºóÄãreleaseÁËÒ»¸öpatch£¨Í¨¹ýgit
format-patch£©¸øA£¬Õâʱºòtest·ÖÖ§»¹Ã»ÓÐmerge½øÀ´£¬ËùÒÔpatchÖÐÖ»°üº¬Ìá½»£ºcommit
in master...È»ºóÄã°Ñtest·ÖÖ§mergeÁ˽øÀ´ÓÖ¸øÁËAÒ»¸öpatch£¬Õâ¸öpatch»á°üº¬Ìá½»£ºCommit
from branch test£¬¶øÕâ¸öpatchÊÇÒÔrenameΪbaseµÄ£¬Èç¹ûcommit in
master...ºÍCommit from branch testÐÞ¸ÄÁËÏàͬµÄÎļþ£¬ÔòµÚ¶þ´ÎµÄpatch¿ÉÄÜ»á´ò²»ÉÏÈ¥£¬ÒòΪÒÔrenameΪbaseµÄpatch¿ÉÄÜÔÚеÄCodeÉÏÕÒ²»µ½ÔÚÄĸöλÖÃÓ¦ÓÃÐ޸ġ£
·ÖÖ§ÑܺÏ(rebase)
ÓÐÁ½ÖÖ·½·¨½«Ò»¸ö·ÖÖ§µÄ¸Ä¶¯ºÏ²¢½øÁíÒ»¸ö·ÖÖ§£¬Ò»¸ö¾ÍÊÇÇ°ÃæËù˵µÄ·ÖÖ§ºÏ²¢£¬ÁíÒ»¸ö¾ÍÊÇ·ÖÖ§Ñܺϣ¬ÕâÁ½ÖÖ·½Ê½ÓÐÊ²Ã´Çø±ðÄØ£¿
·ÖÖ§ºÏ²¢£¨merge£©Êǽ«Á½¸ö·ÖÖ§µÄ¸Ä¶¯ºÏ²¢µ½Ò»Æð£¬²¢Éú³ÉÒ»¸öеÄÌá½»£¬Ìá½»ÀúÊ·Êǰ´Ê±¼äÅÅÐòµÄ£¬¼´ÎÒÃÇʵ¼ÊÌá½»µÄ˳Ðò£¬Í¨¹ýgit
log --graph»òһЩͼÐλ¯¹¤¾ß£¬¿ÉÄܺÜÃ÷ÏԵؿ´µ½·ÖÖ§µÄºÏ²¢ÀúÊ·£¬Èç¹û·ÖÖ§±È½Ï¶à¾ÍºÜ»ìÂÒ£¬¶øÇÒÈç¹ûÒÔ¹¦Äܵãн¨·ÖÖ§£¬µÈ¹¦ÄܵãÍê³ÉºóºÏ»ØÖ÷Ïߣ¬ÓÉÓÚmergeºóÌá½»Êǰ´Ìύʱ¼äÅÅÐòµÄ£¬Ìá½»ÀúÊ·¾Í±È½ÏÂÒ£¬¸÷¸ö¹¦ÄܵãµÄÌá½»»ìÔÓÔÚÒ»Æð£¬»¹¿ÉÄÜÓöµ½ÉÏÃæÌáµ½µÄpatchÎÊÌâ¡£
¶ø·ÖÖ§Ñܺϣ¨rebase£©ÊÇÕÒµ½Á½¸ö·ÖÖ§µÄ¹²Í¬×æÏÈÌá½»£¬½«Òª±»rebase½øÀ´µÄ·ÖÖ§µÄÌá½»ÒÀ´ÎÔÚÒª±»rebaseµ½µÄ·ÖÖ§ÉÏÖØÑÝÒ»±é£¬¼´»Øµ½Á½¸ö·ÖÖ§µÄ¹²Í¬×æÏÈ£¬½«branch£¨¼ÙÈç½Ðexperiment£©µÄÿ´ÎÌá½»µÄ²îÒì±£´æµ½ÁÙʱÎļþÀȻºóÇл»µ½ÒªÑܺÏÈëµÄ·ÖÖ§£¨¼ÙÈçÊÇmaster£©£¬ÒÀ´ÎÓ¦Óò¹¶¡Îļþ¡£experimentÉÏÓм¸´ÎÌá½»£¬ÔÚmaster¾ÍÉú³É¼¸´ÎеÄÌá½»£¬¶øÇÒÊÇÁ¬ÔÚÒ»ÆðµÄ£¬ÕâÑùºÏ½øÖ÷Ïߺóÿ¸ö¹¦ÄܵãµÄÌá½»¾Í¶¼ÔÚÒ»Æð£¬¶øÇÒÌá½»ÀúÊ·ÊÇÏßÐÔµÄ
¶Ô±ÈmergeÓërebaseµÄÌá½»ÀúÊ·»áÊÇÏÂͼÕâÑùµÄ£¨Í¼À´×ÔPro-GIt£©£º

£¨merge£©

£¨rebase£©
rebaseºóC3Ìá½»¾Í²»´æÔÚÁË£¬È¡¶ø´úÖ®µÄÊÇC3'£¬¶ømasterÒ²³ÉΪÁËexperimentµÄÖ±½ÓÉÏÓΣ¬Ö»ÐèÒ»´ÎFast
Forward£¨git merge£©ºómaster¾ÍÖ¸ÏòÁË×îеÄÌá½»£¬¾Í¿ÉÒÔɾ³ýexperiment·ÖÖ§ÁË¡£
ÑܺÏ--onto
git rebase --onto master server client |
ÕâÌõÃüÁîµÄÒâ˼ÊÇ£º¼ì³öserver·ÖÖ§Óëclient·ÖÖ§¹²Í¬×æÏÈÖ®ºóclientÉϵı仯£¬È»ºóÔÚmasterÉÏÖØÑÝÒ»±é¡£
¸¸Ìá½»
HEAD±íʾµ±Ç°ËùÔÚµÄÌá½»£¬Èç¹ûÒª²é¿´µ±Ç°Ìá½»¸¸Ìá½»ÄØ£¿git log²é¿´Ìá½»ÀúÊ·£¬ÏÔȻ̫Âé·³ÁË£¬¶øÇÒÊäÈëÒ»³¤´®µÄCommit-IDÒ²²»ÊÇÒ»¸öÁîÈËÓäÔõÄÊ¡£Õâʱ¿É½èÖúÁ½¸öÌØÊâµÄ·ûºÅ£º~Óë^¡£
^ ±íʾָ¶¨Ìá½»µÄ¸¸Ìá½»£¬Õâ¸öÌá½»¿ÉÄÜÓɶà¸ö½»Ìá½»£¬^Ö®ºó¸úÉÏÊý×Ö±íʾµÚ¼¸¸ö¸¸Ìá½»£¬²»¸úÊý×ÖµÈͬÓÚ^1¡£
~nÏ൱ÓÚn¸ö^£¬±ÈÈç~3=^^^£¬±íʾµÚÒ»¸ö¸¸Ìá½»µÄµÚÒ»¸ö¸¸Ìá½»µÄµÚÒ»¸ö¸¸Ìá½»¡£
Ô¶³Ì·ÖÖ§
Ô¶³Ì·ÖÖ§ÒÔ(Ô¶³Ì²Ö¿âÃû)/(·ÖÖ§Ãû)ÃüÁԶ³Ì·ÖÖ§ÔÚ±¾µØÎÞ·¨Òƶ¯Ð޸쬵±ÎÒÃÇcloneÒ»¸öÔ¶³Ì²Ö¿âʱ»á×Ô¶¯ÔÚ±¾µØÉú³ÉÒ»¸öÃû½ÐoriginalµÄÔ¶³Ì²Ö¿â£¬ÏÂÔØÔ¶³Ì²Ö¿âµÄËùÓÐÊý¾Ý£¬²¢Ð½¨Ò»¸öÖ¸ÏòËüµÄ·ÖÖ§original/master£¬µ«Õâ¸ö·ÖÖ§ÎÒÃÇÊÇÎÞ·¨Ð޸ĵģ¬ËùÒÔÐèÒªÔÚ±¾µØÖØÐÂÒ»¸ö·ÖÖ§£¬±ÈÈç½Ðmaster£¬²¢¸ú×ÙÔ¶³Ì·ÖÖ§¡£
CloneÁËÔ¶³Ì²Ö¿âºó£¬ÎÒÃÇ»¹»áÔÚ±¾µØÐ½¨ÆäËû·ÖÖ§£¬²¢ÇÒ¿ÉÄÜÒ²Ïë¸ú×ÙÔ¶³Ì·ÖÖ§£¬Õâʱ¿ÉÒÔÓÃÒÔÏÂÃüÁ
git checkout -b [branch_name] --track|-t <remote>/<remote-banch> |
ºÍн¨·ÖÖ§µÄ·½·¨Ò»Ñù£¬Ö»ÊǼÓÁËÒ»¸ö²ÎÊý--track»òÆäËõдÐÎʽ-t£¬¿ÉÒÔÖ¸¶¨±¾µØ·ÖÖ§µÄÃû×Ö£¬Èç¹û²»Ö¸¶¨¾Í»á±»ÃüÃûΪremote-branch¡£
ÒªÀȡij¸öÔ¶³Ì²Ö¿âµÄÊý¾Ý£¬¿ÉÒÔÓÃgit fetch:
µ±ÀÈ¡µ½ÁËÔ¶³Ì²Ö¿âµÄÊý¾ÝºóÖ»ÊǰÑÊý¾Ý±£´æµ½ÁËÒ»¸öÔ¶³Ì·ÖÖ§ÖУ¬Èçoriginal/master£¬¶øÕâ¸ö·ÖÖ§µÄÊý¾ÝÊÇÎÞ·¨Ð޸ĵ쬴ËʱÎÒÃÇ¿ÉÒÔ°ÑÕâ¸öÔ¶³Ì·ÖÖ§µÄÊý¾ÝºÏ²¢µ½ÎÒÃǵ±Ç°·ÖÖ§
git merge <remote>/<remote-branch> |
Èç¹ûµ±Ç°·ÖÖ§ÒѾ¸ú×ÙÁËÔ¶³Ì·ÖÖ§£¬ÄÇôÉÏÊöÁ½¸ö²¿·Ö¾Í¿ÉÒԺϲ¢ÎªÒ»¸ö
µ±ÔÚ±¾µØÐÞ¸ÄÌá½»ºó£¬ÎÒÃÇ¿ÉÄÜÐèÒª°ÑÕâЩ±¾µØµÄÌá½»ÍÆË͵½Ô¶³Ì²Ö¿â£¬ÕâÀï¾Í¿ÉÒÔÓÃgit
pushÃüÁÓÉÓÚ±¾µØ¿ÉÒÔÓɶà¸öÔ¶³Ì²Ö¿â£¬ËùÒÔÐèÒªÖ¸¶¨Ô¶³Ì²Ö¿âµÄÃû×Ö£¬²¢Í¬Ê±Ö¸¶¨ÐèÒªÍÆµÄ±¾µØ·ÖÖ§¼°ÐèÒªÍÆË͵½Ô¶³Ì²Ö¿âµÄÄÄÒ»¸ö·ÖÖ§
git push <remote> <local-branch>:<remote-branch> |
Èç¹û±¾µØ·ÖÖ§ÓëÔ¶³Ì·Ö֧ͬÃû£¬ÃüÁî¿ÉÒÔ¸ü¼òµ¥
git push <remote> <branch-name> µÈ¼ÛÓÚ git
push <remote> refs/heads/<branch-name>:refs/for/<branch-name> |
Èç¹û±¾µØ·ÖÖ§µÄÃû×ÖΪ¿Õ£¬¿ÉÒÔɾ³ýÔ¶³Ì·ÖÖ§¡£
Ç°ÃæËµ¹ý¿ÉÒÔÓв»Ö¹Ò»¸öÔ¶³Ì·ÖÖ§f£¬Ìí¼ÓÔ¶³Ì·ÖÖ§µÄ·½·¨Îª
git remote add <short-name> <url> |
Áù¡¢±êÇ©-tag
×÷Ϊһ¸ö°æ±¾¿ØÖƹ¤¾ß£¬Õë¶Ôijһʱ¼äµãµÄijһ°æ±¾´òtagµÄ¹¦ÄÜÊDZز»¿ÉÉٵģ¬Òª²é¿´tagÒ²·Ç³£¼òµ¥£¬²é¿´tagʹÓÃÈçÏÂÃüÁî
²ÎÊý"-l"¿ÉÒÔ¶Ôtag½øÐйýÂË
Git ʹÓõıêÇ©ÓÐÁ½ÖÖÀàÐÍ£ºÇáÁ¿¼¶µÄ£¨lightweight£©ºÍº¬¸½×¢µÄ£¨annotated£©¡£ÇáÁ¿¼¶±êÇ©¾ÍÏñÊǸö²»»á±ä»¯µÄ·ÖÖ§£¬Êµ¼ÊÉÏËü¾ÍÊǸöÖ¸ÏòÌØ¶¨Ìá½»¶ÔÏóµÄÒýÓ᣶øº¬¸½×¢±êÇ©£¬Êµ¼ÊÉÏÊÇ´æ´¢ÔÚ²Ö¿âÖеÄÒ»¸ö¶ÀÁ¢¶ÔÏó£¬ËüÓÐ×ÔÉíµÄУÑéºÍÐÅÏ¢£¬°üº¬×űêÇ©µÄÃû×Ö£¬µç×ÓÓʼþµØÖ·ºÍÈÕÆÚ£¬ÒÔ¼°±êǩ˵Ã÷£¬±êÇ©±¾ÉíÒ²ÔÊÐíʹÓÃ
GNU Privacy Guard (GPG) À´Ç©Êð»òÑéÖ¤¡£
ÇáÁ¿¼¶±êǩֻÐèÔÚgit tagºó¼ÓÉÏtagµÄÃû×Ö£¬Èç¹ûtagÃû×Ö
º¬¸½×¢µÄ±êÇ©ÐèÒª¼ÓÉϲÎÊý-a£¨annotated£©£¬Í¬Ê±¼ÓÉÏ-m¸úÉϱêÇ©µÄ˵Ã÷
git tag -a <tag_name> -m "<tag_description>" |
Èç¹ûÄãÓÐ×Ô¼ºµÄ˽Կ£¬»¹¿ÉÒÔÓà GPG À´Ç©Êð±êÇ©£¬Ö»ÐèÒª°Ñ֮ǰµÄ -a
¸ÄΪ -s£¨signed£©
²é¿´±êÇ©µÄÄÚÈÝÓÃ
ÑéÖ¤ÒÑÇ©ÊðµÄ±êÇ©ÓÃ-v£¨verify£©
ÓÐʱÔÚijһ¸ö°æ±¾Íü¼Ç´òtagÁË£¬¿ÉÒÔÔÚºóÆÚÔÙ²¹ÉÏ£¬Ö»ÐèÔÚ´òtagʱ¼ÓÉÏcommit-id
Òª½«tagÍÆË͵½Ô¶³Ì·þÎñÆ÷ÉÏ£¬¿ÉÒÔÓÃ
git push <remote> <tag_name> |
»òÕß¿ÉÒÔÓÃÏÂÃæµÄÃüÁîÍÆËÍËùÓеÄtag
Æß¡¢GitÅäÖÃ
ʹÓÃ"git config"¿ÉÒÔÅäÖÃGitµÄ»·¾³±äÁ¿£¬ÕâЩ±äÁ¿¿ÉÒÔ´æ·ÅÔÚÒÔÏÂÈý¸ö²»Í¬µÄµØ·½£º
1./etc/gitconfig Îļþ£ºÏµÍ³ÖжÔËùÓÐÓû§¶¼ÆÕ±éÊÊÓõÄÅäÖá£ÈôʹÓÃ
git config ʱÓà --systemÑ¡Ï¶ÁдµÄ¾ÍÊÇÕâ¸öÎļþ¡£
2.~/.gitconfig Îļþ£ºÓû§Ä¿Â¼ÏµÄÅäÖÃÎļþÖ»ÊÊÓÃÓÚ¸ÃÓû§¡£ÈôʹÓÃ
git config ʱÓà --globalÑ¡Ï¶ÁдµÄ¾ÍÊÇÕâ¸öÎļþ¡£
3.µ±Ç°ÏîÄ¿µÄ git Ŀ¼ÖеÄÅäÖÃÎļþ£¨Ò²¾ÍÊǹ¤×÷Ŀ¼ÖÐµÄ .git/config
Îļþ£©£ºÕâÀïµÄÅäÖýö½öÕë¶Ôµ±Ç°ÏîÄ¿ÓÐЧ¡£Ã¿Ò»¸ö¼¶±ðµÄÅäÖö¼»á¸²¸ÇÉϲãµÄÏàͬÅäÖã¬ËùÒÔ .git/config
ÀïµÄÅäÖûḲ¸Ç/etc/gitconfig ÖеÄͬÃû±äÁ¿¡£
ÔÚ Windows ϵͳÉÏ£¬Git »áÕÒѰÓû§Ö÷Ŀ¼Ï嵀 .gitconfig
Îļþ¡£Ö÷Ŀ¼¼´ $HOME ±äÁ¿Ö¸¶¨µÄĿ¼£¬Ò»°ã¶¼ÊÇ C:\Documents and Settings\$USER¡£´ËÍ⣬Git
»¹»á³¢ÊÔÕÒѰ /etc/gitconfig Îļþ£¬Ö»²»¹ý¿´µ±³õ Git ×°ÔÚʲôĿ¼£¬¾ÍÒÔ´Ë×÷Ϊ¸ùĿ¼À´¶¨Î»¡£
×î»ù´¡µÄÅäÖÃÊÇÅäÖÃgitµÄÓû§£¬ÓÃÀ´±êʶ×÷ÕßµÄÉí·Ý
git config --global user.name
git config --global user.email |
Îı¾±à¼Æ÷Ò²¿ÉÒÔÅäÖ㬱ÈÈçÔÚgit commitµÄʱºò¾Í»áµ÷ÓÃÎÒÃÇÉèÖõÄÎı¾±à¼Æ÷
git config --global core.editor vim |
ÁíÒ»¸ö³£ÓõÄÊÇdiff¹¤¾ß£¬±ÈÈçÎÒÃÇÏëÓÿÉÊÓ»¯µÄ¶Ô±È¹¤¾ß
git config --global merge.tool meld |
Òª²é¿´ËùÓеÄÅäÖ㬿ÉÒÔÓÃ
»òÕß¿ÉÒÔÔÚgit configºó¼ÓÉÏÅäÖÃÏîµÄÃû×ֲ鿴¾ßÌåÏîµÄÅäÖÃ
×÷Ϊһ¸öÀÁÈË£¬ËäÈ»checkout¡¢statusµÈÃüÁîÖ»ÊÇÒ»¸öµ¥´Ê£¬µ«ÊÇ»¹ÊÇÏÓÌ«³¤ÁË£¬ÎÒÃÇ»¹¿ÉÒÔ¸øÃüÁîÉèÖñðÃûÈç
git config --global alias.co checkout |
ÕâÑùgit co¾ÍµÈÓÚgit checkout
Ç°ÃæËµµØ£¬gitÅäÖÃÏî¶¼±£´æÔÚÄÇ3¸öÎļþÀ¿ÉÒÔÖ±½Ó´ò¿ªÏàÓ¦µÄÅäÖÃÎļþ²é¿´ÅäÖã¬Ò²¿ÉÒÔÖ±½ÓÐÞ¸ÄÕâЩÅäÖÃÎļþÀ´ÅäÖÃgit£¬Ïëɾ³ýijһ¸öÅäÖã¬Ö±½Óɾ³ýÏàÓ¦µÄÐоÍÐÐÁË

°Ë¡¢ÆäËû
¹ØÓÚGIT¸÷ÃüÁîµÄ˵Ã÷¿ÉÒԲ鿴Ïà¹Ø°ïÖúÎĵµ£¬Í¨¹ýÒÔÏ·½·¨£º
git config --global alias.co checkout |
REPO
¿ªÆôÒ»¸öеÄÖ÷Ì⣬Æäʵ¾ÍÊÇÿ¸öProject¶¼Ð½¨Ò»¸ö·ÖÖ§¡£
repo init -u <url> [OPTIONS] |
ÔÚµ±Ç°Ä¿Â¼Ï³õʼ»¯repo£¬»áÔÚµ±Ç°Ä¿Â¼ÉúÉú³ÉÒ»¸ö.repoĿ¼£¬ÏñGit
ProjectϵÄ.gitÒ»Ñù£¬-uÖ¸¶¨url£¬¿ÉÒÔ¼Ó²ÎÊý-mÖ¸¶¨manifestÎļþ£¬Ä¬ÈÏÊÇdefault.xml£¬.repo/manifests±£´æmanifestÎļþ¡£.repo/projectsÏÂÓÐËùÓеÄprojectµÄÊý¾ÝÐÅÏ¢£¬repoÊÇһϵÁÐgit
projectµÄ¼¯ºÏ£¬Ã¿¸ögit projectϵÄ.gitĿ¼ÖеÄrefsµÈĿ¼¶¼ÊÇÁ´½Óµ½.repo/manifestsϵġ£
¿ÉÒÔ¸ù¾Ýµ±Ç°¸÷ProjectµÄ°æ±¾ÐÅÏ¢Éú³ÉÒ»¸ömanifestÎļþ
repo sync [PROJECT1...PROJECTN] |
ͬ²½Code¡£
²é¿´±¾µØËùÓÐProjectµÄÐ޸ģ¬ÔÚÿ¸öÐ޸ĵÄÎļþǰÓÐÁ½¸ö×Ö·û£¬µÚÒ»¸ö×Ö·û±íʾÔÝ´æÇøµÄ״̬¡£

ÿ¶þ¸ö×Ö·û±íʾ¹¤×÷ÇøµÄ״̬

ɾ³ýÒѾmergeµÄ·ÖÖ§
ɾ³ý·ÖÖ§£¬ÎÞÂÛÊÇ·ñmerged
repo branch»òrepo branches |
²é¿´ËùÓзÖÖ§
²é¿´ÐÞ¸Ä
ÉÏ´«±¾µØÌá½»ÖÁ·þÎñÆ÷
repo forall [PROJECT_LIST]-c COMMAND |
¶ÔÖ¸¶¨µÄProjectÁбí»òËùÓÐProjectÖ´ÐÐÃüÁîCOMMAND£¬¼ÓÉÏ-p²ÎÊý¿É´òÓ¡³öProjectµÄ·¾¶¡£
repo forall -c 'git reset --hard HEAD;git clean -df;git rebase --abort' |
Õâ¸öÃüÁî¿ÉÒÔ³·ÏúÕû¸ö¹¤³ÌµÄ±¾µØÐ޸ġ£ |