ÒѾ¿ªÊ¼Ê¹ÓÃGitÁË£¬ÓÐЩʱºòÒ»°ãµÄÎÊÌâÖ»ÄÜGoogle¾ÍÄÜÕÒµ½´ð°¸£¬µ«ÊÇÓÐЩʱºò²»ÄÜÕÒµ½´ð°¸£¬ÒòΪÓöµ½µÄÎÊÌâ¶¼²»ÖªµÀ¸ÃÓÃʲô¹Ø¼ü×ÖËÑË÷¡£ºÜ¶àÊÇÔÚGitÖÐÎĵÄQQȺÖÐÌÖÂÛ³öÀ´µÄ£¬°ÑһЩ¾Ñé×ܽáһϣº
1.Git×ÓÄ£¿é
ʹÓÃÇé¿ö£ºÀýÈçAndroidϵͳ´úÂëºÍappÖ®¼ä¿ÉÒÔʹÓÃÕâÖÖsubmoduleµÄ·½·¨À´¹ÜÀí¡£
¿ìËÙÉÏÊÖ:
$ git submodule add url path/to/name $ git submodule init $ git submodule foreach git pull |
ÆäËüÇé¿öÏÂsubmodule²»ÊÊÓ㬿ÉÒÔÓÃsubtreeÀ´´úÌæ¡£
2.ͬ²½Ò»¸öCOMMIT
¿ÉÒÔͬ²½Ò»¸öcommitµ½±¾·ÖÖ§
3.Git´òTAG
´òTAGÒ²¾ÍÊÇ·¢²¼°æ±¾
$ git tag -a v1.2 -m "version 1.4" $ git push --tags |
Èç¹û»¹²»ÄÜÀí½â¿ÉÒÔµ½ÕâÀï¿´¿´ÊÇlinusÊÇÔõô¸ølinuxÄں˴òµÄTAG£¬TAG¿´ÆðÀ´Ïñʲô£ºhttps://github.com/torvalds/linux/releases
4.²é¿´statusÏêÇé
$ git add xxx $ git diff --cached |
ÕâÑù¿ÉÒÔÔÚcommit֮ǰÏÈ¿´Ò»ÏÂÐÞ¸ÄÏêÇé¡£
5.²»²úÉúÎÞÓõÄmergeµÄͬ²½
ÓÐÕâôһÖÖÇé¿ö£¬ÓÃÒ»¸ö·Ö֧רÃÅͬ²½´úÂëÌṩÉ̵ĴúÂëµÄʱºò£¬Èç¹ûÒ»°ãµÄpull»á²»¶ÏµÄ²úÉúÒ»¸ömerge¿´ÆðÀ´»áºÜ·³£¬ÓÃϱߵÄʹÓÃÌí¼ÓÒ»¸ö--rebase¾Í²»»á²úÉúÎÞÓõÄmergeÁË
$ git pull --rebase origin master |
6.¹ØÓÚstash
ÊÊÓÃÇé¿ö£º×öÁËÐ޸ĺ󣬻¹Ã»ÓÐadd commitµÈµÈºóÐø¹¤×÷£¬ÏÖÔÚͻȻҪÇл»·ÖÖ§×öÆäËüÊÂÇ飬ĬÈÏÇé¿öÏÂÄãÔÚÕâ¸ö·ÖÖ§Ð޸ĵĴúÂë»á±»´øµ½Çл»¹ýÈ¥µÄ·ÖÖ§ÖС£¿ÉÒÔÏȰÑÄãÐ޸ĵı£´æÆðÀ´¡£ÕâЩÐ޸ĿÉÒÔÔÙ»¹Ô¹ýÀ´¡£
$ git stash -u $ xxxx Ëæ±ãÄãµÄ²Ù×÷ $ git stash pop |
×¢Òâ:-uÊÇ´ú±íÊÇÒ²°ÑÌí¼ÓµÄÐÂÎļþ£¨ÊõÓïÊÇδ¸ú×Ù£©Ò²²ØÆðÀ´£¬Ò»°ãÊÇÒªÓÐÕâ¸öuµÄ¡£
7.»Ö¸´Ò»¸öCOMMIT
Èç¹ûÒ»¸öCOMMITÄã²»ÏëÒªÁË£¬ÏëҪȥ³ý£¬¿ÉÒÔ¿¼ÂÇʹÓÃÒÔÏµķ½·¨£»
Õâ¸ö¾Í¿ÉÒÔÈ¥µôÕâ¸öCOMMITµÄ¸Ä¶¯£¬Õâ¸öÊÇÃ÷ʽµÄÈ¥µô£¬Èç¹ûÄãÓÖºó»ÚÁË£¬»¹¿ÉÒÔÔٴλָ´¡£
8.°²×°×îÐÂGit°æ±¾
ÄÜÇáÒ×°²×°µÄÒ»°ã²»»áÊÇ×îеģ¬ÓÃapt-get install±ãÊÇÈç´Ë¡£ÏÂÃæÓÃÀëÏߵķ½Ê½°²×°Git¡£
aÏȵ½https://github.com/git/git/releases¿´×îа汾£¬È»ºó¸´ÖÆÁ´½Ó¡£ºìÉ«Ëæ¾ßÌå°æ±¾±ä»¯¡£
$ apt-get remove git # Ð¶ÔØÏÖÓÐ $ wget https://github.com/git/git/releases/tag/v1.8.4.3 (Á´½ÓµØÖ·) $ tar xvzf v1.8.4.3.tar.gz $ cd git-v1.8.4.3 $ make prefix=/opt/git all $ make prefix=/opt/git install $ Ìí¼Ó/opt/git/binµ½»·¾³±äÁ¿ÖÐ /etc/environmentÖУ¬»òÕ߯äËü¡£ |
9.°²×°subtree
$ git clone https://github.com/apenwarr/git-subtree $ cp git-subtree/git-subtree.sh /opt/git/bin/git-subtree |
¹ØÓÚʹÓõÄsubtreeµÄ¼¸¸öÌû×Ó£º
¡¶Ê¹ÓÃgit subtree¼¯³ÉÏîÄ¿µ½×ÓĿ¼¡·
¡¶Ò»¸ö³É¹¦µÄGit·ÖÖ§Ä£ÐÍ¡·
10.GitÖ®±¾µØºöÂÔ
Õâ¸ö·ÖͬÖÖÇé¿ö£ºaÊDZ¾µØÓÀ¾ÃºöÂÔ£¬Ð§¹ûµÄgitignoreÒ»Ñù£¬Ö»²»¹ý²»ÊÊÓÚдµ½gitignoreÖжøÒÑ£¬¿ÉÒÔ×Ô¼º½¨Á¢Ò»¸ö±¾µØ¶ÀÏíµÄgitignore£¬È»ºógit
config --global core.excludesfile ÎļþµÄ¾ø¶Ô·¾¶£¬Ò²¿ÉÒÔÖ±½Ó½«±¾µØÒªºöÂÔµÄÎļþÌí¼Óµ½.git/info/excludeÖС£²»¹ýÉÏÊö¶¼ÊÇÕë¶ÔûÓиú×ÙµÄÎļþÀ´ËµµÄ£¬Èç¹ûÎļþÒѾ±»¸ú×ÙÁËÄãÈç¹ûÔÚ±¾µØÏëÒªºöÂÔËüµÄ¸Ä¶¯£¬¾Í²»ÄÜʹÓÃÒÔÉϵķ½·¨ÁË¡£ÕâÕýÇé¿öb¡£Í¨Ë׵ؽ²±ÈÈçÒ»¸ö±àÒëAndroidµÄ½Å±¾ÔÚÆäËüµçÄÔÉ϶¼ÊÇʹÓõÄ-j32À´±àÒëµÄ£¬µ«ÊÇÄãµÄµçÄÔÅäÖÃûÓбðÈ˵ĺ㬲»ÄÜ¿ªµ½-j32£¬µ«ÊÇÕâ¸ö½Å±¾ÊÇÒѾ¸ú×Ù¹ýµÄ£¬ÄãÐÞ¸ÄÁ˾ͻáÔÚÿ´ÎµÄgit
statusÖп´µ½¡£¶ÔÓÚÕâÖÖÇé¿öGitÓÐÒ»¸öºöÂԸ͝µÄ·½·¨£º
$ git update-index --assume-unchanged /path/to/file #ºöÂÔ¸ú×Ù $ git update-index --no-assume-unchanged /path/to/file #»Ö¸´¸ú×Ù |
Ö®ºóÄãÔÚ±¾µØÐÞ¸Ä/path/to/fileÕâ¸öÎļþ£¬GitÒ²²»¹ÜËüÁË¡£¾ÍʵÏÖÁ˱¾µØºöÂÔ¡£

11.GitlabÓû§Í·ÏñµÄÎÊÌâ
Èç¹û×°µÄGit·þÎñÆ÷ÊÇGitLabµÄ»°£¬ÊÇ¿ÉÒÔʹÓÃÓû§Í·ÏñµÄ£¬GitLab¹ÜÀíÍ·ÏñµÄÒ»°ã·½·¨ÊÇÓÃgravatar£¬ÕâÒ»µãºÍgithubÒ»Ñù£¬ÊǹØÁªemailµØÖ·µÄ£¬ÏÈÔÚÉϱß×¢²áÒ»¸öÕË»§£¬ÉÏ´«Ò»¸öÍ·Ïñ²¢¹ØÁªÄ³Ò»¸öÓÊÏ䣬Gitlab»òÕßGithub»á×Ô¶¯È¥gravatarÉÏÀÈ¡ÄãµÄ¸öÈËÍ·Ïñ¡£
12.Git´ò°üÔ´Âë
¶ÔGit¹ÜÀíµÄÔ´Âë½øÐÐѹËõ´ò°ü£¬Èç¹ûʹÓÃtar xvzf xxxx.tag.gz xxxxxµÄ»°²¢²»ÊÇÒ»¸öºÜºÃµÄÑ¡Ôñ£¬ÒòΪ»á½«.git/Ŀ¼ÏµÄÖмäÎļþÈ«²¿Ñ¹Ëõ£¬Èç¹ûÖ»ÏëҪijһ¸ö°æ±¾µÄÔ´Âë¡£GitÌṩÁËarchive.Ëü»á¸ø´ò°üÒ»·Ý´¿¾»µÄ´úÂë¡£µ±È»Õâ¸öÖ»ÊÊÓÃÓÚ·¢²¿Ò»¸ö°æ±¾µÄÔ´Â룬¶ø²»ÊDZ¸·ÝGit¹ÜÀíµÄÕûÌ×Ô´Âë¡£
xxx´ú±íSHA-1 HashÖµ¡£
13.Git·´Ïò´ò²¹¶¡
Ò»Ì×ûÓйÜÀíÓÐÔ´Â룬ÖмäÓй¦ÄÜA£¬ÇÒÒ²Óй¦ÄÜAµÄ²¹¶¡Îļþ£¬¿ÉÒÔʹÓò¹¶¡Îļþ½øÐз´´ò²¹¶¡À´ÊµÏÖÈ¥µô¹¦ÄÜA¡£
×¢£ºÖ»ÊÇÊÕ¼¯£¬»¹Ã»ÓÐÍêÕû²âÊÔÕâÀï¡£
14.¹ØÓÚGit·þÎñÆ÷Ñ¡ÔñºÍ°²×°
Ñ¡Ôñ½¨ÒéGitLab£¬°²×°ÎҲο¼¼Ó×ܽáÕ⼸¸öÌû×Ó£º
1.¡¶ gitlabhq / doc / install / installation.md ¡·¸ù¾Ý¹úÇéΪ¹Ù·½µÄ°²×°·½·¨Ìí¼ÓÁË˵Ã÷µÄ°²×°Îĵµ¡£
2.¡¶ ÔÚ Ubuntu 12.04 Éϰ²×° GitLab6.x¡·Ò»¸ö¶Ô°²×°¹ý³Ì´òÓ¡ÐÅÏ¢¶¼¼Ç¼µÄ°²×°Îĵµ£¬°²×°¹ý³ÌÖпÉÒԶԱȰ²×°¹ý³Ì¡£
3.¡¶ÖØÉèMySQL rootÃÜÂë¡·ÖмäÓöµ½µÄÎÊÌâMySQLÃÜÂëÕÒ²»µ½ÁË£¬ÕâÆªÎÄÕ¸øÁ˴𰸡£
15.ºÏ²¢commit
1.¡¶Ê¹ÓÃgitºÏ²¢¶à¸öÌá½»¡·
2.¡¶gitÈçºÎºÏ²¢Ö»ÓÐÁ½¸öcommitµ½Ò»¸ö£¿¡·
16.GitÖ»clone×îа汾´úÂë²»Òª.gitĿ¼
Õâ¸öÒ²ÊÇÔÚȺÖгöÏÖÁËÎÊÌ⣬ÎÒÔø¾Ò²ÓйýÕâÑùµÄÐèÇó£¬Ïë·¨ÊǺõ쬵«ÊÇÀí½âÊÇ´íÎóµÄ¡£Èç¹ûÖ»Òª×îºóÒ»¸ö°æ±¾µÄ´úÂ룬¶ø²»Òª.gitĿ¼ÖеĶ«Î÷£¬Óа취£º
git clone --depth=1 git://someserver/somerepo dirformynewrepo
rm -rf !$/.git |
µ«ÊÇÕâÓÖ˵Ã÷²»ÊÇÒª²ÎÓ뿪·¢µÄ£¬ÊÇʹÓõġ£Ê¹ÓÃÒ»°ãÊÇҪʹÓôúÂ뿪·¢×îз¢²¼°æ±¾£¬Èç¹ûÖ»Òª×îеÄÌá½»°æ±¾ÊÇûÓÐÓô¦µÄ¡£ÒòΪËü²»ÊÇÎȶ¨µÄ¡£ÕâÑù¾ÍÒýÈëÁË·¢²¼°æ±¾Õâһ˵Ã÷£¬GitÖÐÊÇ´òTag£¬Ò»¸ötagÊÇÒ»¸ö°æ±¾£¬¿ÉÒÔÒԸղŵÄÐèÇóÈ¥ÕÒ×îºóÒ»¸ötag°æ±¾¡£githubÉÏÊÇ¿ÉÒÔÖ±½ÓÏÂÔØÄ³Ò»¸ötag°æ±¾µÄ¡£Èç¹ûÒªÓÃgit
cloneÀ´Íê³É£¬»á¸´ÔÓһЩ¡£ÏÖÔÚµÄgithubÊǽáºÏÁËwebµÄ£¬ÀýÈçgithub»òÕßÊÇ×Ô¼º´î½¨µÄgitlab¶¼ÊÇ¿ÉÒÔÖ±½Ó´ÓwebÉÏÏÂÔØÖ¸¶¨µÄtag°æ±¾¡£¶øÃ»ÓÐÓÃÓÚ°æ±¾¿ØÖƵÄ.gitĿ¼¡£
17.¹ØÓÚpullºÍmerge
¶¼ÔÚÌᳫÌí¼Ó--no-ffÑ¡Ïî¡£
18.ɾ³ý×ÓÄ£¿é-½â¾ö×ÓÄ£¿é×Ô¶¯ÕÒÉÏÃŵÄÎÊÌâ
Ò²ÐíÄã²¢²»ÏëÒªÓÃ×ÓÄ£¿é£¬µ«ÊÇÓÐʱËü»á×Ô¶¯ÕÒÉÏÃÅ£¬ÄÇôÄãÒªÁ˽âÒ»ÏÂÔõôȥ³ýËüÁË¡£Ôõô¸ö×Ô¶¯ÉÏÃÅ£¬ÇÒÌýÎÒÂýÂýµÀÀ´¡£
ÔÚÏîÄ¿AÖУ¬Èç¹ûÓÃgit cloneÁËÁíÍâÒ»¸öÏîÄ¿B£¬»òÐíÄãÖ»ÊÇÏë°ÑÏîÄ¿BµÄ´úÂëÌí¼Óµ½ÏîÄ¿AÖУ¬µ«ÊÇÕâʱִÐÐgit
status/addµÄʱºò»á·¢ÏÖÏîÄ¿BÖеĴúÂ룬²¢²»»á±»Ìí¼Ó£¬Ò²¾ÍÊÇ˵²»Äܱ»¸ú×Ù¡£ÕâÊÇÎªÊ²Ã´ÄØ£¬ÕâÀïÒòΪ»á×Ô¶¯½«ÏîÄ¿B×öΪÁË×ÓÄ£¿é¹ÜÀí£¬¾ÍÊÇÒòΪËüÊÇÒ»¸ö°üº¬.gitĿ¼µÄÍêÕûµÄ¹¤³Ì¡£½â¾öÕâ¸öÎÊÌâÓÐͬÖÖ·½·¨£º
1.ÔÚcloneÏîÄ¿bµÄºóÁ¢¼´½«ÏîÄ¿BÖеÄ.gitĿ¼ɾ³ý
2.git rm --cached path/to/B
È»ºóÔÙÖ´ÐÐgit status/add Ö®ÀàµÄÃüÁî¾Í»á¿ÉÒÔÕý³£µÄ¸ú×ÙÁË¡£
19.»Ö¸´Ò»¸öÎļþµ½Ö®Ç°µÄij¸öÌá½»
Õâ¸öÖÖÇé¿öÒ»°ãÊdzöÔÚij¸öbug½â¾öºóÕûÀí¹æ·¶´úÂëµÄʱºò£¬½â¾öÕâ¸öbugµÄʱºò¿ÉÄÜÌí¼ÓÁ˲»Éٵĵ÷ÊÔ´úÂ룬×îºó½â¾öºó£¬ÓÐЩµ÷ÊÔÐÅϢֻΪÁËÁ˽â´úÂëÁ÷³Ì£¬¶ÔÒÔºó²¢Ã»Óб£ÁôµÄÒâÒ壬ËùÒÔ¾ÍÒª½«Æä»Ö¸´¿ªÊ¼½â¾öÕâ¸öbug֮ǰµÄÌá½»¡£xxxxx´ú±í¿ªÊ¼½â¾öÕâ¸öbug֮ǰµÄÒ»¸öÌá½»µÄ¹þÏ£Âë¡£
¶ÔÓÚÒѾ¸ú×ÙµÄÎļþ£º
1.git reset xxxxxx path/to/file
2.git checkout path/to/file
¶ÔÓÚûÓиú×ÙµÄÎļþ£º
1.git rm path/to/file
20.ºÏ²¢Ê±Ö»²úÉúºÏ²¢Ìá½»
»¹ÓÐÆäËü˵·¨£ººÏ²¢Ê±²»ºÏ²¢ÀúÊ·£»ºÏ²¢Ê±½«ËùÓÐcommitºÏΪһ¸ö¡£
git pull --squash another
»°ËµÒ»°ãÓÃÓÚmaster·ÖÖ§£¬ÏñlinusµÄlinuxÄÚºËÒ»Ñù¡£
¸ü¶àÐÅÏ¢¼û¡¶Git merge no history commit¡·¡¶git merge ¨Csquash½éÉÜ¡·
21.¹ØÓÚGUI Clients
ÕâÀï¡¶GUI Clients¡·¡£
22.git pull ǰ¼òµ¥Éó²é
Çé¿öÊÇÕâÑùµÄ£º±¾È˹ÜÀíµÄÊÇdevelop·ÖÖ§£¬ÆäËûÈ˹ÜÀíµÄËûÃÇ×Ô¼ºµÄ·ÖÖ§¡£ËùÒÔÓ¦¸Ãÿ´Î¸Ä¶¯µÄ¶¼Ó¦¸ÃÊÇpackage/appsϵÄÎļþ£¬µ«ÊÇÓÐÒ»ÖÖÇé¿öÊÇÎÒµ£ÐÄËûÃǻ᲻СÐĸĵ½ÏµÍ³´úÂë²¢Ìá½»ÁË¡£Ôںϲ¢Ö®Ç°²é¿´¶¼¸ÄÁËÄÄЩÎļþ¡£ÕâÑù¾ÍÄÜÓÐЧµØ·ÀÖ¹ÎóÐ޸ġ£
ºÍÀÏÓѹµÍ¨ºó£¬µÃ³öÒÔϽáÂÛ£º
£±.ÈÃËûÃÇÌí¼Ó±¾µØºöÂÔ£¬ºöÂÔËûÃÇÒ»¶¨²»»á¸ÄµÄĿ¼¡£
£².ÔÚÿ´ÎºÏ²¢´úÂëµÄʱºò£¬¿´Ò»ÏÂÿ¸ö·ÖÖ§¶¼ÐÞ¸ÄÁËÄÄЩÎļþ£¬ÓÐûÓÐϵͳÎļþ±»Ð޸ġ£
£³.ʹÓÃgrrit¡£
£´.ÏÈgit fetch ÔÙmerge¡£
×îºóÑ¡ÔñÁ˵ڶþÖÖ¡£ÒòΪgit pullºó£¬Ìá½»µÄʱºò»áÏÔʾ³öÕâ´ÎºÏ²¢´úÂë¶¼ÓÐÄÄЩÐ޸ġ£
23.Gitk ²»´íµÄ²é¿´LogµÄ¹¤¾ß
24.GitÓöÉÏ´úÂë¹æ·¶
µ±GitÓöÉÏ´úÂë¹æ·¶»áÓÐЩÊÂÇéÒª´¦ÀíºÃ£¬ÕâÀïдÏÈд¸ö¾µäµÄ£º
1.¼ì²â×Ô¼ºÒªÌá½»µÄ´úÂëÖÐÓÐÎÞtable
Ò»°ã¶àÈË¿ª·¢µÄ³ÌÐòÖв»×¼Ê¹ÓÃtable´úÌæ¿Õ¸ñµÄ£¬ÒÔÏÂÊÇGoogleµÄJava´úÂë¹æ·¶(ÖÐÎÄ)ÖеĽØÍ¼£º

ËùÒÔÔÚÌá½»´úÂëǰ×Ô¼ìÒ»ÏÂ×Ô¼º´úÂëÖÐÓÐÓÐÎÞtableÊǺÜÓбØÒªµÄ¡£
$ git diff | grep -P ¡°\t¡± | grep ¡°+¡± |
Èç¹ûtabÒѾ´æÔÚ£¬ÕâÀïÓкܺõĽâ¾ö·½°¸£¬ËùÒÔÏîÄ¿´úÂë²»Òª¼±ÓÚcommitǰÆÚ¹¤×÷ºÜÖØÒª¡£
25.You are in the middle of an am session.
$ git status On branch hardware You are in the middle of an am session. (fix conflicts and then run "git am --continue") (use "git am --skip" to skip this patch) (use "git am --abort" to restore the original branch) nothing to commit, working directory clean $ |
¶ÔÓÚÕâ¸öÇé¿ö£¬ÎÒÊÇÔÚ½ÓÊÖÒ»¸ö±ðÈ˵IJֿâµÄʱºòÓöµ½µÄ£¬ÎÒĿǰûÓиüºÃµÄ·½·¨£¬Ò²²»ÖªµÀ×öÁËÄÄЩÊÂÇ飬ÎÒ²ÉÈ¡µÄÊÇ
ÖØÐÂcloneÒ»·Ý´úÂë¡£ |