±à¼ÍƼö: |
±¾ÎÄÖ÷Òª´ÓÏîĿ˵Æð£¬½éÉÜÁ˽²½âÈçºÎÅäÖò¢³õʼ»¯Ò»¸ö²Ö¿â¡¢¿ªÊ¼»òÍ£Ö¹¸ú×ÙÎļþ¡¢ÔÝ´æ»òÌá½»¸ü¸ÄµÈ£¬Ï£Íû¶ÔÄúÄÜÓÐËù°ïÖú¡£
±¾ÎÄÀ´×Ô΢ÐŹ«ÖÚºÅCodeArtist£¬ÓÉ»ðÁú¹ûÈí¼þLuca±à¼¡¢ÍƼö¡£ |
|
Ò»¡¢´ÓÏîĿ˵Æð
ÎÒÃÇ´ÓÓÃMaven´î½¨µÄÏîÄ¿½²Æð£¬ÀÏÑù×ÓÔõô°²×°Git²»Ëµ£¬Ç°Ãæ½áºÏIDEA½²½â²Ù×÷£¬ºóÃæ¶¼ÊÇ»ùÓÚÃüÁîÐеĽ̳̣¬ÔÚÖÕ¶ËÊäÈëgit
--versionÊä³ö°æ±¾±íʾÒѾ°²×°³É¹¦£º
$ git --version
git version 2.17.0 |
ÒÔºó±íʾÊäÈëÃüÁʹÓÃ$¿ªÍ·
1. Ìí¼ÓÅäÖÃ
# ÅäÖÃÓû§
$ git config --global user.name "AiJiangnan"
# ÅäÖÃÓû§ÓÊÏä
$ git config --global user.email "904629998@qq.com"
# ²é¿´ÅäÖÃ
$ git config -l |
´øÓÐ--global ²ÎÊýµÄÊÇÈ«¾ÖÅäÖÃ
2. ´´½¨²Ö¿â
ʹÓÃIDEA´ò¿ªÏîÄ¿£¬µã»÷²Ëµ¥£ºVCS -> Enable Version Control Integration£¬µ¯³ö³É¹¦¿òºóµ±Ç°ÏîÄ¿¾ÍÒѾ´´½¨ºÃ±¾µØ²Ö¿âÁË¡£Èç¹ûûÓгɹ¦£¬¼ì²éIDEAÉèÖÃÊÇ·ñ¼¯³ÉÁËGit¡£
´ò¿ªÉèÖÃ(Ctrl+Alt+S)£ºFile -> Settings -> Version
Control -> Git ½øÐÐÅäÖãº

ÔÚµÚÒ»ÏîÉèÖà Path to Git executable ÅäÖÃGitµÄÖ´ÐÐÎļþ·¾¶£¬µã»÷ÓÒ²àµÄ
Test µ¯³ö³É¹¦¿ò£¬±íʾÅäÖóɹ¦¡£ÅäÖóɹ¦ºóÔÙÖ´ÐÐÒ»ÏÂÇ°Ãæ´´½¨²Ö¿âµÄ²Ù×÷¼´¿É¡£´ò¿ªIDEAµÄ°æ±¾¹ÜÀí½çÃæ(Alt+9)ÈçÏ£º

ÔÚ×ó²à²Ëµ¥Í¼±êÕÒµ½ Group By ¹´Ñ¡ Directory ¾Í¿ÉÒÔ½«Ð޸ĵÄÎļþÒÔĿ¼µÄÐÎʽÏÔʾ¡£
4. Ìá½»´úÂë
·¢ÏÖÏîÄ¿ÖеÄÎļþ²¢²»ÊÇËùÓеÄÎļþ¶¼Òª½»¸øGit²Ö¿â¹ÜÀí£¬ÎÒÃÇÖ»ÐèÒª¹ÜÀíÔ´´úÂëºÍ±ØÒªµÄ×ÊÔ´Îļþ£¬ÏñIDEAµÄÅäÖÃÎļþºÍ±àÒëÉú³ÉµÄÎļþ¶¼¿ÉÒÔºöÂÔ£¬ÔÚÏîÄ¿¸ùĿ¼´´½¨Ò»¸ö.gitignoreÎļþ£¬²¢ÊäÈëÐèÒªºöÂÔµÄÎļþ»òĿ¼¡£ÏÂÃæÊDzο¼ÄÚÈÝ£º
# idea
.idea
*.iml
# maven
target
# java
*.class
*.log |
´Ëʱ Local Changes ÖÐÄÇЩºöÂÔµÄÎļþºÍÎļþ¼ÐÒѾûÓÐÁË¡£È«Ñ¡ÖÐ Local Changes
ÖеÄÎļþÓÒ»÷£¬È»ºóÑ¡Ôñ Commit (Ctrl+K)£¬µ¯³öÏÂÃæ´°¿Ú£º

×ó²àÉÏ·½ÏÔʾѡÖеÄÌá½»µÄÎļþ£¬Ï·½Ìîд±¾´ÎÐ޸ĵÄÐÅÏ¢£¬ÎªÁ˼Ǽÿһ´ÎÌá½»¶¼×öÁËʲô¸Ä±ä¡£ÓÒ²àÊÇÅäÖÃһЩÔÚÌύǰºÍÌá½»ºóµÄ²Ù×÷£¬±ÈÈçÔÚÌύǰ(Before
Commit)ÎÒÃÇ¿ÉÒÔ£º
Reformat code£º¸ñʽ»¯´úÂë
Optimize imports£ºÓÅ»¯µ¼°ü
Check TODO(Show All)£º¼ì²éTODO
ÅäÖÃ×Ô¼ºÏëÒªµÄ²Ù×÷ºóµ¥»÷ Commit (Ctrl+Enter)Íê³ÉÌá½»¡£´ËʱÔÚ Log ½çÃæ¿ÉÒÔ¿´µ½Õâ´ÎÌá½»¼Ç¼¡£
5. ·ÖÖ§¹ÜÀí
µ¥»÷IDEA״̬À¸ÓÒÏÂ½ÇµÄ Git: master È»ºóÑ¡Ôñ New Branch£¬´´½¨Ò»¸öзÖÖ§£¬È¡ÃûΪdevΪÎÒÃǵĿª·¢·ÖÖ§¡£

µ¥»÷IDEA״̬À¸ÓÒÏÂ½ÇµÄ Git: dev -> master -> Checkout£¬¼ì³öÖ÷·ÖÖ§¡£¶Ô·ÖÖ§µÄ²Ù×÷¶¼¿ÉÒÔÔÚÕâ½øÐУ¬±ÈÈçÎÒÃdz£ÓõIJÙ×÷£º
Checkout£º¼ì³öÑ¡ÖзÖÖ§
Checkout As...£º´ÓÑ¡ÖзÖÖ§´´½¨Ð·ÖÖ§
Compare With...£ºµ±Ç°·ÖÖ§ÓëÑ¡ÖзÖÖ§±È½Ï
Merge into Current£ººÏ²¢Ñ¡ÖзÖÖ§µ½µ±Ç°·ÖÖ§
Rename...£ºÖØÃüÃûÑ¡ÖзÖÖ§
Delete£ºÉ¾³ýÑ¡ÖзÖÖ§
6. ½â¾ö³åÍ»
µ±²»Í¬µÄ·ÖÖ§Éϱà¼ÁËͬһ¸öÎļþʱ£¬±Ø¶¨»á²úÉú³åÍ»£¬ÎÒÃÇÔںϲ¢µÄʱºòÐèÒª½â¾ö³åÍ»£¬ÔÚIDEAÀïÃæ½â¾ö³åÍ»ºÜ¼òµ¥£¬ÔÚmasterºÍdev·ÖÖ§ÉÏͬʱÐÞ¸Ä.gitignoreÎļþ£¬È»ºó½«devºÏ²¢µ½Ö÷·ÖÖ§ÉÏ£º

²Ù×÷£º
Accept Yours£º½ÓÊܵ±Ç°·ÖÖ§µÄÐÞ¸Ä
Accept Theirs£º½ÓÊÜÑ¡Ôñ·ÖÖ§µÄÐÞ¸Ä
Merge...£ººÏ²¢²Ù×÷
Ñ¡Ôñ Merge... ²Ù×÷ºó£º

Accept Left ºÍ Accept Right µÄ×÷ÓÃÊÇÑ¡Ôñ½ÓÊÜÄÄÒ»·½µÄÈ«²¿Ð޸ġ£
µã»÷³åÍ»ÇøÓòµÄ << ºÍ >> Íê³ÉºÏ²¢²Ù×÷µã»÷ Apply £¬Õû¸ö½â¾ö³åÍ»µÄ¹ý³Ì½áÊø¡£
7. ÍÆËÍ´úÂë
Ô¶³Ì²Ö¿â²»¹ÜÊÇʹÓÃGithub¡¢Gitlab»¹ÊÇÂëÔÆ£¬²Ù×÷¶¼ÀàËÆ£¬ÔÚÕâÄÃGithub¾ÙÀý¡£
Ìí¼ÓSSH¹«Ô¿
²é¿´Ö®Ç°ÊÇ·ñÉú³É¹ýSSH¹«Ô¿£º
$ cd ~/.ssh/
| ls
# ¹«Ô¿Îļþ: id_rsa.pub |
ûÓеÄ×Ô¼ºÉú³É£¬ÊäÈëÏÂÃæÃüÁȻºóһ·»Ø³µ£º
$ ssh-keygen
-t rsa -b 4096 -C "your_email@example.com"
Generating public/private rsa key pair.
Enter a file in which to save the key (/home/you/.ssh/id_rsa):
[Press enter] |
Éú³Éºó°Ñ¹«Ô¿Îļþid_rsa.pubÀïµÄÄÚÈݸ´ÖÆÏÂÀ´¡£
# ²é¿´¹«Ô¿ÎļþÄÚÈÝ
$ cat ~/.ssh/id_rsa.pub |
×¢²á²¢µÇ¼Github£¬ÔÚÊ×Ò³µã»÷Í·ÏñÏÂÀ²Ëµ¥£¬µã»÷£ºSettings -> SSH and
GPG keys -> New SSH key£¬ÊäÈë Title £¬°ÑÇ°Ãæ¸´ÖƵĹ«Ô¿ÊäÈëµ½ Key
ÊäÈë¿òÖУ¬µã»÷ Add SSH key Íê³É¡£
н¨²¢°ó¶¨Ô¶³Ì²Ö¿â
ÔÚÍøÕ¾ÉÏн¨Ò»¸ö²Ö¿â Repository £¬¸´ÖÆÏÂËüµÄµØÖ·£ºgit@github.com:AiJiangnan/spring-boot.git£¬×¢ÒâÈ·±£ÐÒéÑ¡ÔñSSH¡£
IDEA½øÈëGit²Ù×÷µÄ·½Ê½£º
²Ëµ¥£ºVCS -> Git
ÓÒ»÷ÏîÄ¿ -> Git
ÓÒ»÷´ò¿ªµÄÎļþ -> Git
ÓÒ»÷ÏîÄ¿»òÎļþ·½Ê½½øÈëʱ£¬µ±IDEA´ò¿ª¶à¸ö²Ö¿âʱ¿ÉÒÔÇø·Ö²Ö¿â
ÔÚIDEAÖиøµ±Ç°ÏîÄ¿Ìí¼ÓÔ¶³Ì²Ö¿â£ºGit -> Repository -> Remotes...£¬µã»÷
+ ºÅÌí¼ÓÔ¶³Ì²Ö¿â£¬ÐèÒªÌí¼Ó Name ºÍ URL £¬Ä¬ÈÏÔ¶³Ì²Ö¿âÃû³ÆÎªorigin£¬½«Ç°Ãæ¸´ÖÆÔ¶³Ì²Ö¿âµØÖ·Õ³Ìùµ½
URL À¸Öеã»÷ OK Íê³É²Ù×÷¡£
GitÖ§³ÖµÄÐÒ飺
Local
HTTP
SSH
Git
ÍÆËÍ´úÂë
´ò¿ªÍÆËͲÙ×÷£ºGit -> Repository -> Push... (Ctrl+Shift+K)

×ó²àչʾ½«ÒªÍÆË͵ÄÀúÊ·Ìá½»£¬¿ÉÒÔÐÞ¸ÄÍÆË͵ÄÔ¶³Ì²Ö¿âºÍÔ¶³Ì·ÖÖ§¡£ÓÒ²àչʾÿ´ÎÌá½»Ð޸ĵÄÎļþ£¬¿ÉÒԲ鿴ÿ¸öÎļþµÄDiff¡£ÏÂÃæ
Push Tags ÉèÖÃÊÇ·ñÒªÍÆËͱêÇ©£¬Ñ¡ÔñÍÆËÍÄĸö±êÇ©¡£ÅäÖúúóµã»÷ Push (Ctrl+Enter)
Íê³É²Ù×÷¡£
ÎÒÃÇÔÚºóÃæ´úÂëµÄÐÞ¸ÄÖкͰ汾µÄά»¤Öж¼»áÖØ¸´ÏÂÁеIJÙ×÷£º
Commit£ºÌá½»
Pull£ºÀÈ¡£¨¸üУ©´úÂ룬ÓгåÍ»Çé¿ö
Merge£ººÏ²¢£¬ÓгåÍ»Çé¿ö
Push£ºÍÆËÍ£¬ÓгåÍ»Çé¿ö£¬È·±£PushǰִÐÐPull²»½¨Òé´æÔÚ³åÍ»¡£
Reset£º»Ø¹ö
GitµÄ²Ù×÷Ô¶²»Ö¹Èç´Ë£¬ºóÃæÎÒÃÇ»á»ùÓÚÃüÁîÐÐģʽÉîÈë½²½âGit£¬ÕÆÎÕÁËÃüÁîÐвÙ×÷£¬ÔٻعýÍ·À´Ê¹ÓÃIDEA¾Í¸Ð¾õºÜÇáËÉÁË£¬¶Ô´úÂëµÄÕÆ¿ØÄÜÁ¦½«»á´ó´óÌáÉý¡£
¶þ¡¢Git
GitÊÇÒ»¸ö·Ö²¼Ê½°æ±¾¹ÜÀíÈí¼þ£¬²»ÐèÒª·þÎñ¶ËµÄÖ§³Ö¾ÍÄÜÍê³É¹¤×÷£¬»ùÓÚ²Ö¿âÉè¼ÆË¼Ï룬ÿ´ÎÌá½»µÄ°æ±¾Ö±½Ó¼Ç¼¿ìÕÕ£¬¶ø²»ÊǼǼ²îÒì¡£Git
¸üÏñÊǰÑÊý¾Ý¿´×÷ÊǶÔСÐÍÎļþϵͳµÄÒ»×é¿ìÕÕ¡£Ã¿´ÎÄãÌá½»¸üÐÂ,»òÔÚ Git Öб£´æÏîĿ״̬ʱ£¬ËüÖ÷Òª¶Ôµ±Ê±µÄÈ«²¿ÎļþÖÆ×÷Ò»¸ö¿ìÕÕ²¢±£´æÕâ¸ö¿ìÕÕµÄË÷Òý¡£ÎªÁ˸ßЧ£¬Èç¹ûÎļþûÓÐÐ޸ģ¬Git
²»ÔÙÖØÐ´洢¸ÃÎļþ£¬¶øÊÇÖ»±£ÁôÒ»¸öÁ´½ÓÖ¸Ïò֮ǰ´æ´¢µÄÎļþ¡£
ºóÃæ½²½âÈçºÎÅäÖò¢³õʼ»¯Ò»¸ö²Ö¿â(repository)¡¢¿ªÊ¼»òÍ£Ö¹¸ú×Ù(track)Îļþ¡¢ÔÝ´æ(stage)»òÌá½»(commit)¸ü¸Ä¡£±¾ÕÂÒ²½«ÏòÄãÑÝʾÈçºÎÅäÖÃ
Git À´ºöÂÔÖ¸¶¨µÄÎļþºÍÎļþģʽ¡¢ÈçºÎѸËÙ¶ø¼òµ¥µØ³·Ïú´íÎó²Ù×÷¡¢ÈçºÎä¯ÀÀÄãµÄÏîÄ¿µÄÀúÊ·°æ±¾ÒÔ¼°²»Í¬Ìá½»(commits)¼äµÄ²îÒì¡¢ÈçºÎÏòÄãµÄÔ¶³Ì²Ö¿âÍÆËÍ(push)ÒÔ¼°ÈçºÎ´ÓÄãµÄÔ¶³Ì²Ö¿âÀÈ¡(pull)Îļþ¡£
1. °æ±¾¹ÜÀí
ÔÚ½øÐкóÃæµÄ²Ù×÷£¬ÎÒÃÇÒªÌáǰ×öÒ»Ð©Ç°Ãæ½²µ½µÄÅäÖã¬Èç¹ûÒÑÅäÖã¬ÇëºöÂÔ£º
# ÅäÖÃÓû§
$ git config --global user.name "AiJiangnan"
# ÅäÖÃÓû§ÓÊÏä
$ git config --global user.email "904629998@qq.com"
# ²é¿´ÅäÖÃ
$ git config -l |
1.1 ´´½¨²Ö¿â
1.1.1 ÔÚÏÖÓÐĿ¼Öгõʼ»¯²Ö¿â
½øÈëĿ¼ִÐÐÏÂÃæÃüÁ
Ö´Ðкó»áÔÚĿ¼Ï´´½¨Ò»¸ö.gitµÄ×ÓĿ¼£¬Õâ¸öĿ¼°üº¬ËùÓгõʼ»¯µÄGit²Ö¿âËùÓбØÐëµÄÎļþ¡£
1.1.2 ¿Ë¡ÒÑÓеIJֿâ
ÒÑÓÐµÄ²Ö¿âµØÖ·»òÕßGithubÉϵĵØÖ·£ºgit@github.com:AiJiangnan/spring-boot.git
$ git clone git@github.com:AiJiangnan/spring-boot.git |
ÄãÏë´Ó¹«Ë¾Ô¶³Ì²Ö¿â¿Ë¡ÏîÄ¿»òÕßÏëΪij¸ö¿ªÔ´Ïî¹±Ï××Ô¼ºµÄÒ»·ÝÁ¦£¬¾Í¿ÉÒÔÓôËÃüÁî´´½¨²Ö¿â¡£
1.2 Ìá½»´úÂë
1.2.1 ÎļþµÄÉúÃüÖÜÆÚ
ÔÚ¹¤×÷Ŀ¼ÏÂÎļþµÄ״̬£º
δ¸ú×Ù(untracked)£ºÃ»ÓÐÄÉÈë°æ±¾¿ØÖƵÄÎļþ
ÒѸú×Ù(tracked)£ºÒѾÄÉÈë°æ±¾¿ØÖƵÄÎļþ
δÐÞ¸Ä(unmodified)£ºÃ»ÓÐÐ޸ĵÄÎļþ
ÒÑÐÞ¸Ä(modified)£ºÒѾÐ޸ĵÄÎļþ
ÒÑÔÝ´æ(staged)£ºÒѾ·ÅÈëÔÝ´æÇøµÄÎļþ
ÒѸú×ÙÎļþÔÚÉÏÒ»´Î¿ìÕÕÖÐÓÐËüÃǵļǼ£¬¹¤×÷Ò»¶Îʱ¼äºó£¬ËüÃǵÄ״̬¿ÉÒÔÊÇδÐ޸ġ¢ÒÑÐ޸ĻòÒÑÔݴ档δ¸ú×ÙÎļþ¼È²»´æÔÚÓÚ¿ìÕռǼÖУ¬Ò²Ã»ÓзÅÈëÔÝ´æÇø¡£¿Ë¡·½Ê½´´½¨µÄ²Ö¿â£¬¹¤×÷Ŀ¼ÖÐËùÓÐÎļþ¶¼ÊÇÒѸú×ÙÎļþ£¬²¢´¦ÓÚδÐÞ¸Ä״̬¡£±à¼¹ýijЩÎļþÖ®ºó£¬ÓÉÓÚ×ÔÉÏ´ÎÌá½»Äã¶ÔËüÃÇ×öÁËÐ޸ģ¬Git½«ËüÃDZê¼ÇΪÒÑÐÞ¸ÄÎļþ¡£ÎÒÃÇÖð²½½«ÕâЩÐ޸ĹýµÄÎļþ·ÅÈëÔÝ´æÇø£¬È»ºóÌá½»ËùÓÐÔÝ´æÁ˵ÄÐ޸ģ¬Èç´Ë·´¸´¡£Ê¹ÓÃ
Git ʱÎļþµÄÉúÃüÖÜÆÚÈçÏ£º

1.2.2 ¼ì²éµ±Ç°Îļþ״̬
´´½¨Ò»¸öĿ¼²¢Í¨¹ýÇ°Ãæ½²µÄgit init³õʼ»¯²Ö¿â£¬ÔÚµ±Ç°²Ö¿âϲÙ×÷¡£
# ³õʼ»¯²Ö¿â
$ git init
Òѳõʼ»¯¿ÕµÄ Git ²Ö¿âÓÚ /home/ajn/Code/csdn/git/.git/
# ²é¿´ÄÄЩÎļþ´¦ÓÚʲô״̬
$ git status
λÓÚ·ÖÖ§ master
ÉÐÎÞÌá½»
ÎÞÎļþÒªÌá½»£¨´´½¨/¿½±´Îļþ²¢Ê¹Óà "git add" ½¨Á¢¸ú×Ù£© |
´ÓÉÏÃæÃüÁî·µ»Ø½á¹ûÎÒÃÇÖªµÀµ±Ç°Ã»ÓÐÌá½»£¬´´½¨Ò»¸öREADME.txtÎļþ£º
$ echo 'Hello
world' > README.txt
$ git status
λÓÚ·ÖÖ§ master
ÉÐÎÞÌá½»
δ¸ú×ÙµÄÎļþ:
£¨Ê¹Óà "git add <Îļþ>..." ÒÔ°üº¬ÒªÌá½»µÄÄÚÈÝ£©
README.txt
ÌύΪ¿Õ£¬µ«ÊÇ´æÔÚÉÐδ¸ú×ÙµÄÎļþ£¨Ê¹Óà "git add" ½¨Á¢¸ú×Ù£© |
·µ»Ø½á¹ûΪµ±Ç°Ã»ÓÐÌá½»£¬²¢ÇÒ´æÔÚδ¸ú×ÙµÄÎļþREADME.txt£¬Î´¸ú×ÙµÄÎļþÒâζ×Å Git ÔÚ֮ǰµÄ¿ìÕÕ£¨Ìá½»£©ÖÐûÓÐÕâЩÎļþ£¬Git
²»»á×Ô¶¯½«Ö®ÄÉÈë¸ú×Ù·¶Î§£¬³ý·ÇÄãÊÖ¶¯Ìí¼Ó¸ú×Ù£¬ËùÒÔÄã²»±Øµ£ÐIJ»Ïë±»¸ú×ÙµÄÎļþ°üº¬½øÀ´¡£
1.2.3 ¸ú×ÙÐÂÎļþ
# ¸ú×ÙÐÂÎļþ
$ git add README.txt
$ git status
λÓÚ·ÖÖ§ master
ÉÐÎÞÌá½»
ÒªÌá½»µÄ±ä¸ü£º
£¨Ê¹Óà "git rm --cached <Îļþ>..."
ÒÔÈ¡ÏûÔݴ棩
ÐÂÎļþ£º README.txt |
´Ó·µ»Ø½á¹ûÎÒÃÇ¿ÉÖª£¬¸ÃÎļþÒѸú×Ù£¬²¢ÇÒ´¦ÓÚÒÑÔÝ´æ×´Ì¬¡£´ËʱÌá½»£¬¸ÃÎļþ´Ëʱ´Ë¿ÌµÄ°æ±¾¾Í»á±»±£ÁôÔÚÀúÊ·¼Ç¼ÖС£
git addºóÃæ²ÎÊý¿ÉÒÔÊÇÎļþ»òĿ¼£¬Èç¹ûÊÇĿ¼£¬»áµÝ¹é¸ú×Ù¸ÃĿ¼ÏÂËùÓеÄÎļþ¡£
1.2.4 ÔÝ´æÒÑÐÞ¸ÄÎļþ
Èç¹ûÄãÐÞ¸ÄÁËÒ»¸öÒѸú×ÙµÄÎļþCONTRIBUTING.txt£¬È»ºó²é¿´×´Ì¬£º
$ git status
λÓÚ·ÖÖ§ master
ÒªÌá½»µÄ±ä¸ü£º
£¨Ê¹Óà "git reset HEAD <Îļþ>..." ÒÔÈ¡ÏûÔݴ棩
ÐÂÎļþ£º README.txt
ÉÐδÔÝ´æÒÔ±¸Ìá½»µÄ±ä¸ü£º
£¨Ê¹Óà "git add <Îļþ>..." ¸üÐÂÒªÌá½»µÄÄÚÈÝ£©
£¨Ê¹Óà "git checkout -- <Îļþ>..."
¶ªÆú¹¤×÷ÇøµÄ¸Ä¶¯£©
Ð޸ģº CONTRIBUTING.txt |
´Ó½á¹û¿ÉÖª£¬ËµÃ÷ÒѸú×ÙÎļþµÄÄÚÈÝ·¢ÉúÁ˱仯£¬µ«»¹Ã»Óзŵ½ÔÝ´æÇø¡£ÒªÔÝ´æÕâ´Î¸üУ¬ÐèÒªÔËÐÐgit
addÃüÁî¡£ÕâÊǸö¶à¹¦ÄÜÃüÁ¿ÉÒÔÓÃËü¿ªÊ¼¸ú×ÙÐÂÎļþ£¬»òÕß°ÑÒѸú×ÙµÄÎļþ·Åµ½ÔÝ´æÇø£¬»¹ÄÜÓÃÓںϲ¢Ê±°ÑÓгåÍ»µÄÎļþ±ê¼ÇΪÒѽâ¾ö״̬µÈ¡£½«Õâ¸öÃüÁîÀí½âΪ¡°Ìí¼ÓÄÚÈݵ½ÏÂÒ»´ÎÌá½»ÖС±¶ø²»ÊÇ¡°½«Ò»¸öÎļþÌí¼Óµ½ÏîÄ¿ÖС±Òª¸ü¼ÓºÏÊÊ¡£ÏÖÔÚÈÃÎÒÃÇÔËÐÐgit
add½«CONTRIBUTING.txt·Åµ½ÔÝ´æÇø,È»ºóÔÙ¿´¿´git statusµÄÊä³ö£º
$ git add CONTRIBUTING.txt
$ git status
λÓÚ·ÖÖ§ master
ÒªÌá½»µÄ±ä¸ü£º
£¨Ê¹Óà "git reset HEAD <Îļþ>..." ÒÔÈ¡ÏûÔݴ棩
Ð޸ģº CONTRIBUTING.txt
ÐÂÎļþ£º README.txt |
ÏÖÔÚÁ½¸öÎļþ¶¼ÒÑÔݴ棬Ï´ÎÌύʱ¾Í»áÒ»²¢¼Ç¼µ½²Ö¿â¡£¼ÙÉè´Ëʱ£¬ÄãÏëÒªÔÙÐÞ¸Ä
CONTRIBUTING.txt ÀïµÄÄÚÈÝ£¬ÖØÐ±༱£´æºó£¬×¼±¸ºÃÌá½»¡£ÔÙÔËÐÐ git status
¿´¿´£º
$ vim CONTRIBUTING.txt
$ git status
λÓÚ·ÖÖ§ master
ÒªÌá½»µÄ±ä¸ü£º
£¨Ê¹Óà "git reset HEAD <Îļþ>..." ÒÔÈ¡ÏûÔݴ棩
Ð޸ģº CONTRIBUTING.txt
ÐÂÎļþ£º README.txt
vÉÐδÔÝ´æÒÔ±¸Ìá½»µÄ±ä¸ü£º
£¨Ê¹Óà "git add <Îļþ>..." ¸üÐÂÒªÌá½»µÄÄÚÈÝ£©
£¨Ê¹Óà "git checkout -- <Îļþ>..."
¶ªÆú¹¤×÷ÇøµÄ¸Ä¶¯£©
Ð޸ģº CONTRIBUTING.txts |
ÏÖÔÚCONTRIBUTING.txtÎļþͬʱ³öÏÖÔÚÔÝ´æÇøºÍ·ÇÔÝ´æÇø¡£Êµ¼ÊÉÏGitÖ»²»¹ýÔÝ´æÁËÄãÔËÐÐgit
addÃüÁîʱµÄ°æ±¾£¬Èç¹ûÄãÏÖÔÚÌá½»£¬CONTRIBUTING.txtµÄ°æ±¾ÊÇÄã×îºóÒ»´ÎÔËÐÐgit addÃüÁîʱµÄÄǸö°æ±¾£¬¶ø²»ÊÇÄãÔËÐÐgit
commitʱ£¬ÔÚ¹¤×÷Ŀ¼Öеĵ±Ç°°æ±¾¡£ËùÒÔ£¬ÔËÐÐÁËgit addÖ®ºóÓÖ×÷ÁËÐÞ¶©µÄÎļþ£¬ÐèÒªÖØÐÂÔËÐÐgit
add°Ñ×îÐÂ°æ±¾ÖØÐÂÔÝ´æÆðÀ´£º
$ git add CONTRIBUTING.txt
$ git status
λÓÚ·ÖÖ§ master
ÒªÌá½»µÄ±ä¸ü£º
£¨Ê¹Óà "git reset HEAD <Îļþ>..." ÒÔÈ¡ÏûÔݴ棩
Ð޸ģº CONTRIBUTING.txt
ÐÂÎļþ£º README.txt |
git addʹÓòÎÊý-u¿ÉÒÔÖ»ÔÝ´æÒѸú×ÙµÄÎļþ¡£
1.2.5 ״̬¼òÀÀ
# git status
-s »ò git status --short
$ git status -s
M CONTRIBUTING.txt
A README.txt |
״̬·ûºÅº¬Ò壺
??£ºÎ´¸ú×ÙÎļþ
A£ºÐÂÌí¼Óµ½ÔÝ´æÇøÖеÄÎļþ
M£ºÐ޸ĹýµÄÎļþ
MM£º×ó²àµÄ±íʾ¸ÃÎļþ±»Ð޸IJ¢ÒÑ·ÅÈëÔÝ´æÇø£¬ÓÒ²à±íʾÎļþ±»ÐÞ¸Äû·ÅÈëÔÝ´æÇø
1.2.6 ºöÂÔÎļþ
Ò»°ãÎÒÃÇ×Ü»áÓÐЩÎļþÎÞÐèÄÉÈëGitµÄ¹ÜÀí£¬Ò²²»Ï£ÍûËüÃÇ×ܳöÏÖÔÚδ¸ú×ÙÎļþÁÐ±í¡£Í¨³£¶¼ÊÇЩ×Ô¶¯Éú³ÉµÄÎļþ£¬±ÈÈçÈÕÖ¾Îļþ£¬»òÕß±àÒë¹ý³ÌÖд´½¨µÄÁÙʱÎļþµÈ¡£ÔÚÕâÖÖÇé¿öÏ£¬ÎÒÃÇ¿ÉÒÔ´´½¨Ò»¸öÃûΪ.gitignoreµÄÎļþ£¬ÁгöÒªºöÂÔµÄÎļþģʽ¡£À´¿´Ò»¸öʵ¼ÊµÄÀý×Ó£º
# no .a files
*.a
# but do track lib.a, even though you're ignoring
.a files above
!lib.a
# only ignore the TODO file in the current
directory, not subdir/TODO
/TODO
# ignore all files in the build/ directory
build/
# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt
# ignore all .pdf files in the doc/ directory
doc/**/*.pdf |
Îļþ.gitignoreµÄ¸ñʽ¹æ·¶ÈçÏ£º
ËùÓпÕÐлòÕßÒÔ # ¿ªÍ·µÄÐж¼»á±»ºöÂÔ¡£
¿ÉÒÔʹÓñê×¼µÄglobģʽƥÅä¡£
Æ¥Åäģʽ¿ÉÒÔÒÔ£¨/£©¿ªÍ··ÀÖ¹µÝ¹é¡£
Æ¥Åäģʽ¿ÉÒÔÒÔ£¨/£©½áβָ¶¨Ä¿Â¼¡£
ÒªºöÂÔÖ¸¶¨Ä£Ê½ÒÔÍâµÄÎļþ»òĿ¼£¬¿ÉÒÔÔÚģʽǰ¼ÓÉϾªÌ¾ºÅ£¨!£©È¡·´¡£
ËùνµÄglobģʽÊÇÖ¸shellËùʹÓõļò»¯Á˵ÄÕýÔò±í´ïʽ¡£
ÐǺţ¨*£©Æ¥ÅäÁã¸ö»ò¶à¸öÈÎÒâ×Ö·û£»
[abc]Æ¥ÅäÈκÎÒ»¸öÁÐÔÚ·½À¨ºÅÖеÄ×Ö·û£»
Îʺţ¨?£©Ö»Æ¥ÅäÒ»¸öÈÎÒâ×Ö·û£»
Èç¹ûÔÚ·½À¨ºÅÖÐʹÓö̻®Ïß·Ö¸ôÁ½¸ö×Ö·û£¬±íʾËùÓÐÔÚÕâÁ½¸ö×Ö·û·¶Î§Äڵͼ¿ÉÒÔÆ¥Å䣨±ÈÈç [0-9] ±íʾƥÅäËùÓÐ0µ½9µÄÊý×Ö£©£»
ʹÓÃÁ½¸öÐǺţ¨*) ±íʾƥÅäÈÎÒâÖмäĿ¼£¬±ÈÈça/**/z ¿ÉÒÔÆ¥Åä a/z, a/b/z »ò a/b/c/zµÈ¡£
1.2.7 ²é¿´ÒÑÔÝ´æºÍδÔÝ´æµÄÐÞ¸Ä
¼ÙÈçÔÙ´ÎÐÞ¸ÄREADME.txtÎļþºóÔݴ棬Ȼºó±à¼CONTRIBUTING.txtÎļþºóÏȲ»Ôݴ棬ÔËÐÐstatusÃüÁ»á¿´µ½£º
$ git status
λÓÚ·ÖÖ§ master
ÒªÌá½»µÄ±ä¸ü£º
£¨Ê¹Óà "git reset HEAD <Îļþ>..." ÒÔÈ¡ÏûÔݴ棩
Ð޸ģº README.txt
ÉÐδÔÝ´æÒÔ±¸Ìá½»µÄ±ä¸ü£º
£¨Ê¹Óà "git add <Îļþ>..." ¸üÐÂÒªÌá½»µÄÄÚÈÝ£©
£¨Ê¹Óà "git checkout -- <Îļþ>..."
¶ªÆú¹¤×÷ÇøµÄ¸Ä¶¯£©
Ð޸ģº CONTRIBUTING.txt
# ²é¿´ÉÐδÔÝ´æµÄÎļþ¸üÐÂÁËÄÄЩ²¿·Ö
$ git diff
diff --git a/CONTRIBUTING.txt b/CONTRIBUTING.txt
index afce56f..d4ef1b9 100644
--- a/CONTRIBUTING.txt
+++ b/CONTRIBUTING.txt
@@ -1,3 +1,2 @@
Contributing
Contributing
-Contributing
# ²é¿´ÒÑÔÝ´æµÄ½«ÒªÌí¼Óµ½Ï´ÎÌá½»ÀïµÄÄÚÈÝ
$ git diff --cached
diff --git a/README.txt b/README.txt
index 802992c..57bf5a7 100644
--- a/README.txt
+++ b/README.txt
@@ -1 +1,2 @@
Hello world
+Hello world |
ÎÒÃÇʹÓà git diff À´·ÖÎöÎļþ²îÒì¡£Èç¹ûÄãϲ»¶Í¨¹ýͼÐλ¯µÄ·½Ê½»òÆäËü¸ñʽÊä³ö·½Ê½µÄ»°£¬¿ÉÒÔʹÓÃgit
difftoolÃüÁîÀ´Óà Araxis £¬emerge »ò vimdiff µÈÈí¼þÊä³ö diff ·ÖÎö½á¹û¡£Ê¹ÓÃ
git difftool --tool-help ÃüÁîÀ´¿´ÄãµÄϵͳ֧³ÖÄÄЩ Git Diff ²å¼þ¡£
1.2.8 Ìá½»¸üÐÂ
ÏÖÔÚµÄÔÝ´æÇøÓòÒѾ׼±¸Í×µ±¿ÉÒÔÌá½»ÁË¡£ÔÚ´Ë֮ǰ£¬È·ÈÏ»¹ÓÐʲôÐ޸ĹýµÄ»òн¨µÄÎļþ»¹Ã»ÓÐ
git add ¹ý£¬·ñÔòÌá½»µÄʱºò²»»á¼Ç¼ÕâЩ»¹Ã»ÔÝ´æÆðÀ´µÄ±ä»¯¡£ÕâЩÐ޸ĹýµÄÎļþÖ»±£ÁôÔÚ±¾µØ´ÅÅÌ¡£ËùÒÔ£¬Ã¿´Î×¼±¸Ìύǰ£¬ÏÈÓÃ
git status ¿´Ï£¬ÊDz»ÊǶ¼ÒÑÔÝ´æÆðÀ´ÁË£¬ È»ºóÔÙÔËÐÐÌá½»ÃüÁ
$ git commit
# Please enter the commit message for your changes.
Lines starting
# with '#' will be ignored, and an empty message
aborts the commit.
# On branch master
# Changes to be committed:
#new file: README
#modified: CONTRIBUTING.md
#
~
~
~
".git/COMMIT_EDITMSG" 9L, 283C |
ʹÓÃgit config --global core.editor ÃüÁîÉ趨Äãϲ»¶µÄ±à¼Èí¼þ£¬ÕâÀïÓõÄÊÇvim¡£
ÁíÍ⣬ÄãÒ²¿ÉÒÔÔÚcommitÃüÁîºóÌí¼Ó -m Ñ¡Ï½«Ìá½»ÐÅÏ¢ÓëÃüÁî·ÅÔÚͬһÐУ¬ÈçÏÂËùʾ£º
$ git commit
-m 'update master'
[master 52a10fa] update master
2 files changed, 1 insertion(+), 1 deletion(-) |
1.2.9 Ìø¹ýʹÓÃÔÝ´æÇøÓò
$ git commit
-a -m 'update master' |
1.2.10 ÒÆ³ýÎļþ
$ git rm PROJECTS.md
# È¡Ïû¸ú×ÙÎļþ£¬´Ógit²Ö¿âÖÐÒÆ³ý¶ø²»´ÓÓ²ÅÌÉÏɾ³ý
$ git rm --cached PROJECTS.md |
1.2.11 ÒÆ¶¯Îļþ
$ git mv file_from
file_to |
1.3 ²é¿´ÈÕÖ¾
# ²é¿´ËùÓÐÌá½»ÈÕÖ¾
$ git log
commit 52a10fad34dd38fdf0099e5c52cda526a0c1cd57
(HEAD -> master)
Author: AiJiangnan <904629998@qq.com>
Date: Wed Dec 5 18:48:41 2018 +0800
update master
commit 0907ee43bf485a05492e84bf7a22c4174e2f9df3
Author: AiJiangnan <904629998@qq.com>
Date: Wed Dec 5 18:08:46 2018 +0800
update
commit f3f5b5be459610325085ad0183f330576a0742d8
Author: AiJiangnan <904629998@qq.com>
Date: Wed Dec 5 12:01:41 2018 +0800
add CONTRIBUTING.txt
# ²ÎÊý£º-p ²é¿´Ã¿´ÎÌá½»µÄÄÚÈݲîÒ죬-1 ÏÔʾ×î½ü1´ÎÌá½»µÄÈÕÖ¾
$ git log -p -1
commit 52a10fad34dd38fdf0099e5c52cda526a0c1cd57
(HEAD -> master)
Author: AiJiangnan <904629998@qq.com>
Date: Wed Dec 5 18:48:41 2018 +0800
update master
diff --git a/CONTRIBUTING.txt b/CONTRIBUTING.txt
index afce56f..d4ef1b9 100644
--- a/CONTRIBUTING.txt
+++ b/CONTRIBUTING.txt
@@ -1,3 +1,2 @@
Contributing
Contributing
-Contributing
diff --git a/README.txt b/README.txt
index 802992c..57bf5a7 100644
--- a/README.txt
+++ b/README.txt
@@ -1 +1,2 @@
Hello world
+Hello world
# ²ÎÊý£º--stat ²é¿´Ã¿´ÎÌá½»¼òÂÔµÄͳ¼Æ
$ git log --stat
commit 52a10fad34dd38fdf0099e5c52cda526a0c1cd57
(HEAD -> master)
Author: AiJiangnan <904629998@qq.com>
Date: Wed Dec 5 18:48:41 2018 +0800
update master
CONTRIBUTING.txt | 1 -
README.txt | 1 +
2 files changed, 1 insertion(+), 1 deletion(-)
# ²ÎÊý£º--pretty ¸ñʽ»¯Êä³öÈÕÖ¾ ĬÈϸñʽ£º(onelone,short,full,fuller)
$ git log --pretty=oneline
52a10fad34dd38fdf0099e5c52cda526a0c1cd57 (HEAD
-> master) update master
0907ee43bf485a05492e84bf7a22c4174e2f9df3 update
f3f5b5be459610325085ad0183f330576a0742d8 add
CONTRIBUTING.txt
# ²ÎÊý£º--pretty ¸ñʽ»¯Êä³öÈÕÖ¾ ×Ô¶¨Òå¸ñʽ
$ git log --pretty=format:"%h - %an, %ar
: %s"
52a10fa - AiJiangnan, 2 Ììǰ : update master
0907ee4 - AiJiangnan, 2 Ììǰ : update
f3f5b5b - AiJiangnan, 2 Ììǰ : add CONTRIBUTING.txt |
# ²ÎÊý£º--graph
ʹÓÃ×Ö·ûͼÐλ¯Õ¹Ê¾·ÖÖ§£¬ºÏ²¢ÀúÊ·
$ git log --pretty=format:"%h %s" --graph
* 2d3acf9 ignore errors from SIGCHLD on trap
* 5e3ee11 Merge branch 'master' of git://github.com/dustin/grit
|\
| * 420eac9 Added a method for getting the current
branch.
* | 30e367c timeout code and tests
* | 5a09431 add timeout protection to grit
* | e1193f8 support for heads with slashes in
them
|/
* d6016bc require time for xmlschema
* 11d191e Merge branch 'defunkt' into local |
1.3.1 ÏÞÖÆÊä³ö³¤¶È
# ²ÎÊý£º--since
ÅäÖÃÈÕÖ¾Êä³öµÄÆðʼʱ¼ä
$ git log --since=2.weeks
# ²ÎÊý£º-S ËÑË÷ÐÞ¸ÄÁËÄ³Ð©ÌØ¶¨ÄÚÈݵÄÈÕÖ¾
$ git log -Sfunction_name |
1.4 »Ø¹ö´úÂë
1.4.1 ÖØÖÃÔÀí
¹¤×÷Á÷³Ì

1.4.2 ³·Ïû²Ù×÷
# ǰһ´ÎÌá½»ÖÐ×·¼ÓÐÞ¸Ä
$ git commit -m "update README.txt"
$ git add CONTRIBUTING.txt
$ git commit --amend
# È¡ÏûÔÝ´æµÄÎļþ
$ git add *
$ git status -s
M CONTRIBUTING.txt
M README.txt
$ git reset HEAD CONTRIBUTING.txt
ÖØÖúóÈ¡ÏûÔÝ´æµÄ±ä¸ü£º
MCONTRIBUTING.txt
$ git status -s
M CONTRIBUTING.txt
M README.txt
# ³·Ïû¶ÔÎļþÐÞ¸Ä
$ git checkout -- CONTRIBUTING.txt
$ git status -s
M README.txt |
1.4.3 »Ø¹ö²Ù×÷
# ÒÆ¶¯ HEAD (²ÎÊý£º--soft£¬»Ø¹öµ½commit²Ù×÷ǰ)
$ git reset --soft HEAD~
$ git status -s
M CONTRIBUTING.txt
# ¸üÐÂË÷Òý £¨²ÎÊý£º--mixed£¨Ä¬ÈÏ£©£¬»Ø¹öµ½add²Ù×÷ǰ£©
$ git reset --mixed HEAD~
ÖØÖúóÈ¡ÏûÔÝ´æµÄ±ä¸ü£º
MCONTRIBUTING.txt
$ git status -s
M CONTRIBUTING.txt
# ¸üй¤×÷Ŀ¼ £¨²ÎÊý£º--hard£¬»Ø¹öµ½ÐÞ¸Äǰ£©
$ git reset --hard HEAD~
HEAD ÏÖÔÚλÓÚ 52a10fa update master
$ git status -s
$ git log --oneline
52a10fa (HEAD -> master) update master
0907ee4 update
f3f5b5b add CONTRIBUTING.txt
# »Ø¹ö²¢½«»Ø¹öµÄ²Ù×÷µ±×÷Ò»´ÎÌá½»
$ git revert 0907ee4 |
GitÖÐÈκÎÒÑÌá½»µÄ¶«Î÷¶¼¿ÉÒÔ»Ö¸´£¬È»¶øÄãδÌá½»µÄ¶«Î÷¶ªÊ§ºó¿ÉÄÜÔÙÒ²ÕÒ²»»ØÀ´ÁË¡£»Ø¹öÖж¨Î»°æ±¾¿ÉÒÔÓÃÖ¸ÕëHEAD~»òÕß°æ±¾¹þÏ£Âë0907ee4À´Ö¸¶¨£¬ÀýÈ磺ǰһ¸ö°æ±¾HEAD~£¬Ç°Á½¸ö°æ±¾HEAD~2¡£
1.5 Êý¾Ý»Ö¸´
ɾ³ýÁËÕýÔÚ¹¤×÷µÄ·ÖÖ§
»Ø¹öÁËÄãÏëÒªµÄÌá½»
µ±ÄãÓöµ½ÉÏÃæÁ½ÖÖÇé¿ö£º
# ²é¿´ÈÕÖ¾²¢»Ø¹öµ½Ç°Èý´ÎÌá½»
$ git log --oneline
ac705e4 (HEAD -> master) update
4f9a890 update
52a10fa update master
0907ee4 update
f3f5b5b add CONTRIBUTING.txt
$ git reset --hard 0907ee4
HEAD ÏÖÔÚλÓÚ 0907ee4 update
$ git log --oneline
0907ee4 (HEAD -> master) update
f3f5b5b add CONTRIBUTING.txt
# ²é¿´²Ù×÷ÈÕÖ¾»Ö¸´Êý¾Ý°æ±¾
$ git reflog -5
0907ee4 (HEAD -> master) HEAD@{0}: reset:
moving to 0907ee4
ac705e4 HEAD@{1}: commit: update
4f9a890 HEAD@{2}: reset: moving to 4f9a890
52a10fa HEAD@{3}: reset: moving to 52a10fa
52a10fa HEAD@{4}: checkout: moving from dev
to master
$ git reset --hard ac705e4
HEAD ÏÖÔÚλÓÚ ac705e4 update
$ git log --oneline
ac705e4 (HEAD -> master) update
4f9a890 update
52a10fa update master
0907ee4 update
f3f5b5b add CONTRIBUTING.txt |
|