Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Git¸ßЧʵ¼ù
 
×÷Õߣº°¬½­ÄÏ
  1931  次浏览      27
 2020-2-10
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª´ÓÏîĿ˵Æð£¬½éÉÜÁ˽²½âÈçºÎÅäÖò¢³õʼ»¯Ò»¸ö²Ö¿â¡¢¿ªÊ¼»òÍ£Ö¹¸ú×ÙÎļþ¡¢ÔÝ´æ»òÌá½»¸ü¸ÄµÈ£¬Ï£Íû¶ÔÄúÄÜÓÐËù°ïÖú¡£
±¾ÎÄÀ´×Ô΢ÐŹ«ÖÚºÅ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 init

Ö´Ðкó»áÔÚĿ¼Ï´´½¨Ò»¸ö.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

 

 
   
1931 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

ÿÈÕ¹¹½¨½â¾ö·½°¸
ÈçºÎÖÆ¶¨ÓÐЧµÄÅäÖùÜÀíÁ÷³Ì
ÅäÖùÜÀíÖ÷Òª»î¶¯¼°ÊµÏÖ·½·¨
¹¹½¨¹ÜÀíÈëÃÅ
Ïà¹ØÎĵµ

ÅäÖùÜÀíÁ÷³Ì
ÅäÖùÜÀí°×ƤÊé
CM09_CÅäÖùÜÀí±ê×¼
ʹÓÃSVN½øÐа汾¿ØÖÆ
Ïà¹Ø¿Î³Ì

ÅäÖùÜÀíʵ¼ù
ÅäÖùÜÀí·½·¨¡¢¹¤¾ßÓëÓ¦ÓÃ
¶à²ã´Î¼¯³ÉÅäÖùÜÀí
²úÆ··¢²¼¹ÜÀí