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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÈçºÎºÏÀíÀûÓÃGit½øÐÐÍŶÓЭ×÷(Ò»)
 
À´Ô´£ºÖªºõ ·¢²¼ÓÚ£º 2017-8-21
  2265  次浏览      32
 

ǰÑÔ£º

ÕâÀï¼òµ¥½éÉÜÒ»ÏÂGitµÄÀúÊ·¡£

ͬÉú»îÖеÄÐí¶àΰ´óʼþÒ»Ñù£¬Git µ®ÉúÓÚÒ»¸ö¼«¸»·×Õù´ó¾Ù´´ÐµÄÄê´ú¡£Linux Äں˿ªÔ´ÏîÄ¿ÓÐ×ÅΪÊýÖÚ¹ãµÄ²ÎÓëÕß¡£¾ø´ó¶àÊýµÄ Linux ÄÚºËά»¤¹¤×÷¶¼»¨ÔÚÁËÌá½»²¹¶¡ºÍ±£´æ¹éµµµÄ·±ËöÊÂÎñÉÏ£¨1991£­2002Äê¼ä£©¡£µ½ 2002 Ä꣬Õû¸öÏîÄ¿×鿪ʼÆôÓ÷ֲ¼Ê½°æ±¾¿ØÖÆÏµÍ³ BitKeeper À´¹ÜÀíºÍά»¤´úÂë¡£

µ½ÁË 2005 Ä꣬¿ª·¢ BitKeeper µÄÉÌÒµ¹«Ë¾Í¬ Linux Äں˿ªÔ´ÉçÇøµÄºÏ×÷¹ØÏµ½áÊø£¬ËûÃÇÊÕ»ØÁËÃâ·ÑʹÓà BitKeeper µÄȨÁ¦¡£Õâ¾ÍÆÈʹ Linux ¿ªÔ´ÉçÇø£¨ÌرðÊÇ Linux µÄµÞÔìÕß Linus Torvalds £©²»µÃ²»ÎüÈ¡½Ìѵ£¬Ö»Óпª·¢Ò»Ì×ÊôÓÚ×Ô¼ºµÄ°æ±¾¿ØÖÆÏµÍ³²Å²»ÖÁÓÚÖØµ¸¸²ÕÞ¡£ËûÃǶÔеÄÏµÍ³ÖÆ¶©ÁËÈô¸ÉÄ¿±ê£º

  • ËÙ¶È
  • ¼òµ¥µÄÉè¼Æ
  • ¶Ô·ÇÏßÐÔ¿ª·¢Ä£Ê½µÄÇ¿Á¦Ö§³Ö£¨ÔÊÐíÉÏǧ¸ö²¢Ðпª·¢µÄ·ÖÖ§£©
  • ÍêÈ«·Ö²¼Ê½
  • ÓÐÄÜÁ¦¸ßЧ¹ÜÀíÀàËÆ Linux ÄÚºËÒ»ÑùµÄ³¬´ó¹æÄ£ÏîÄ¿£¨ËٶȺÍÊý¾ÝÁ¿£©

×Ôµ®ÉúÓÚ 2005 ÄêÒÔÀ´£¬Git ÈÕÕé³ÉÊìÍêÉÆ£¬Ôڸ߶ÈÒ×ÓõÄͬʱ£¬ÈÔÈ»±£Áô×ųõÆÚÉ趨µÄÄ¿±ê¡£ËüµÄËٶȷɿ죬¼«ÆäÊʺϹÜÀí´óÏîÄ¿£¬Ëü»¹ÓÐ×ÅÁîÈËÄÑÒÔÖÃÐŵķÇÏßÐÔ·ÖÖ§¹ÜÀíϵͳ£¨¼ûµÚÈýÕ£©£¬¿ÉÒÔÓ¦¸¶¸÷ÖÖ¸´ÔÓµÄÏîÄ¿¿ª·¢ÐèÇó¡£

Ò»¡¢GitÆð²½

1¡¢Ö±½Ó¼Ç¼¿ìÕÕ£¬¶ø·Ç²îÒì±È½Ï

Git ºÍÆäËû°æ±¾¿ØÖÆÏµÍ³µÄÖ÷Òª²î±ðÔÚÓÚ£¬Git Ö»¹ØÐÄÎļþÊý¾ÝµÄÕûÌåÊÇ·ñ·¢Éú±ä»¯£¬¶ø´ó¶àÊýÆäËûϵͳÔòÖ»¹ØÐÄÎļþÄÚÈݵľßÌå²îÒì¡£ÕâÀàϵͳ£¨CVS£¬Subversion£¬Perforce£¬Bazaar µÈµÈ£©Ã¿´Î¼Ç¼ÓÐÄÄЩÎļþ×÷Á˸üУ¬ÒÔ¼°¶¼¸üÐÂÁËÄÄЩÐеÄʲôÄÚÈÝ£¬¾ßÌåÈçͼ

Git ²¢²»±£´æÕâЩǰºó±ä»¯µÄ²îÒìÊý¾Ý¡£Êµ¼ÊÉÏ£¬Git ¸üÏñÊǰѱ仯µÄÎļþ×÷¿ìÕպ󣬼ǼÔÚÒ»¸ö΢Ð͵ÄÎļþϵͳÖС£Ã¿´ÎÌá½»¸üÐÂʱ£¬Ëü»á×ÝÀÀÒ»±éËùÓÐÎļþµÄÖ¸ÎÆÐÅÏ¢²¢¶ÔÎļþ×÷Ò»¿ìÕÕ£¬È»ºó±£´æÒ»¸öÖ¸ÏòÕâ´Î¿ìÕÕµÄË÷Òý¡£ÎªÌá¸ßÐÔÄÜ£¬ÈôÎļþûÓб仯£¬Git ²»»áÔٴα£´æ£¬¶øÖ»¶ÔÉϴα£´æµÄ¿ìÕÕ×÷Ò»Á´½Ó¡£Git µÄ¹¤×÷·½Ê½¾ÍÏñͼËùʾ

2¡¢ÔËÐÐGitǰµÄÅäÖÃ

ÕâÀïÈç¹û»¹ÓÐС»ï°éÃÇûÓа²×°ºÃGit£¬Çë×ÔÐÐÈ¥°²×°Ò»ÏÂÏÈŶ£¨Git - Downloads£©¡£

Git ÌṩÁËÒ»¸ö½Ð×ö git config µÄ¹¤¾ß£¬×¨ÃÅÓÃÀ´ÅäÖûò¶ÁÈ¡ÏàÓ¦µÄ¹¤×÷»·¾³±äÁ¿¡£¶øÕýÊÇÓÉÕâЩ»·¾³±äÁ¿£¬¾ö¶¨ÁË Git ÔÚ¸÷¸ö»·½ÚµÄ¾ßÌ幤×÷·½Ê½ºÍÐÐΪ¡£ÕâЩ±äÁ¿¿ÉÒÔ´æ·ÅÔÚÒÔÏÂÈý¸ö²»Í¬µÄµØ·½£º

/etc/gitconfig Îļþ£ºÏµÍ³ÖжÔËùÓÐÓû§¶¼ÆÕ±éÊÊÓõÄÅäÖá£ÈôʹÓà git config ʱÓà --system Ñ¡Ï¶ÁдµÄ¾ÍÊÇÕâ¸öÎļþ¡£

~/.gitconfig Îļþ£ºÓû§Ä¿Â¼ÏµÄÅäÖÃÎļþÖ»ÊÊÓÃÓÚ¸ÃÓû§¡£ÈôʹÓà git config ʱÓà --global Ñ¡Ï¶ÁдµÄ¾ÍÊÇÕâ¸öÎļþ¡£

µ±Ç°ÏîÄ¿µÄ git Ŀ¼ÖеÄÅäÖÃÎļþ£¨Ò²¾ÍÊǹ¤×÷Ŀ¼ÖÐµÄ .git/config Îļþ£©£ºÕâÀïµÄÅäÖýö½öÕë¶Ôµ±Ç°ÏîÄ¿ÓÐЧ¡£Ã¿Ò»¸ö¼¶±ðµÄÅäÖö¼»á¸²¸ÇÉϲãµÄÏàͬÅäÖã¬ËùÒÔ .git/config ÀïµÄÅäÖûḲ¸Ç /etc/gitconfig ÖеÄͬÃû±äÁ¿¡£

a. Óû§ÐÅÏ¢ÅäÖÃ

µÚÒ»¸öÒªÅäÖõÄÊÇÄã¸öÈ˵ÄÓû§Ãû³ÆºÍµç×ÓÓʼþµØÖ·¡£ÕâÁ½ÌõÅäÖúÜÖØÒª£¬Ã¿´Î Git Ìύʱ¶¼»áÒýÓÃÕâÁ½ÌõÐÅÏ¢£¬ËµÃ÷ÊÇË­Ìá½»Á˸üУ¬ËùÒÔ»áËæ¸üÐÂÄÚÈÝÒ»Æð±»ÓÀ¾ÃÄÉÈëÀúÊ·¼Ç¼

git config --global user.name "qiangdada"
git config --global user.email qiangdada@example.com

Èç¹ûÓÃÁË --global Ñ¡ÏÄÇô¸ü¸ÄµÄÅäÖÃÎļþ¾ÍÊÇλÓÚÄãÓû§Ö÷Ŀ¼ÏµÄÄǸö£¬ÒÔºóÄãËùÓеÄÏîÄ¿¶¼»áĬÈÏʹÓÃÕâÀïÅäÖõÄÓû§ÐÅÏ¢¡£Èç¹ûÒªÔÚij¸öÌØ¶¨µÄÏîÄ¿ÖÐʹÓÃÆäËûÃû×Ö»òÕßµçÓÊ£¬Ö»ÒªÈ¥µô --global Ñ¡ÏîÖØÐÂÅäÖü´¿É£¬ÐµÄÉ趨±£´æÔÚµ±Ç°ÏîÄ¿µÄ .git/config ÎļþÀï¡£

b. ²îÒì·ÖÎö¹¤¾ß

Git ¿ÉÒÔÀí½â kdiff3£¬tkdiff£¬meld£¬xxdiff£¬emerge£¬vimdiff£¬gvimdiff£¬ecmerge£¬ºÍ opendiff µÈºÏ²¢¹¤¾ßµÄÊä³öÐÅÏ¢£¬ÕâÀÈç¹û˵ÔÚ½â¾öºÏ²¢³åͻʱʹÓõÄÊÇvimdiff²îÒì·ÖÎö¹¤¾ß¡£¸ÄÓÃÃüÁîÈçÏÂ

git config --global merge.tool vimdiff

c. ²é¿´ÅäÖÃÐÅÏ¢

git config --list
#user.name=qiangdada
#user.email=qiangdada@tencent.com
#color.status=auto
#color.branch=auto
#color.interactive=auto
#color.diff=auto
#...

ÕâÀï»á¿´µ½Öظ´µÄ±äÁ¿Ãû£¬ÄǾÍ˵Ã÷ËüÃÇÀ´×Ô²»Í¬µÄÅäÖÃÎļþ£¨±ÈÈç /etc/gitconfig ºÍ ~/.gitconfig£©£¬²»¹ý×îÖÕ Git ʵ¼Ê²ÉÓõÄÊÇ×îºóÒ»¸ö¡£Ò²¿ÉÒÔÖ±½Ó²éÔÄij¸ö»·¾³±äÁ¿µÄÉ趨£¬Ö»Òª°ÑÌØ¶¨µÄÃû×Ö¸úÔÚºóÃæ¼´¿É£¬ÏñÕâÑù

git config user.name
#qiangdada

d. »ñÈ¡°ïÖú

ÏëÁ˽â Git µÄ¸÷ʽ¹¤¾ß¸ÃÔõôÓ㬿ÉÒÔÔĶÁËüÃǵÄʹÓðïÖú£¬·½·¨ÓÐÈý

# ·½·¨1
git help
#·½·¨¶þ
git --help
#·½·¨Èý
man git

±ÈÈ磬Ҫѧϰ config ÃüÁî¿ÉÒÔÔõôÓã¬ÔËÐÐ

git help config

¶þ¡¢Git»ù´¡

1¡¢È¡µÃÏîÄ¿µÄGit²Ö¿â

ÓÐÁ½ÖÖÈ¡µÃ Git ÏîÄ¿²Ö¿âµÄ·½·¨¡£µÚÒ»ÖÖÊÇÔÚÏÖ´æµÄĿ¼Ï£¬Í¨¹ýµ¼ÈëËùÓÐÎļþÀ´´´½¨Ð嵀 Git ²Ö¿â¡£µÚ¶þÖÖÊÇ´ÓÒÑÓÐµÄ Git ²Ö¿â¿Ë¡³öÒ»¸öеľµÏñ²Ö¿âÀ´

a. ´Ó¹¤×÷Ŀ¼Öгõʼ»¯Ð²ֿâ

Òª¶ÔÏÖÓеÄij¸öÏîÄ¿¿ªÊ¼Óà Git ¹ÜÀí£¬Ö»Ðèµ½´ËÏîÄ¿ËùÔÚµÄĿ¼£¬Ö´ÐÐ

git init

³õʼ»¯ºó£¬ÔÚµ±Ç°Ä¿Â¼Ï»á³öÏÖÒ»¸öÃûΪ .git µÄĿ¼£¬ËùÓÐ Git ÐèÒªµÄÊý¾ÝºÍ×ÊÔ´¶¼´æ·ÅÔÚÕâ¸öĿ¼ÖС£Èç¹ûµ±Ç°Ä¿Â¼ÏÂÓм¸¸öÎļþÏëÒªÄÉÈë°æ±¾¿ØÖÆ£¬ÐèÒªÏÈÓà git add ÃüÁî¸æËß Git ¿ªÊ¼¶ÔÕâЩÎļþ½øÐиú×Ù£¬È»ºóÌá½»

# step 1
git add *.c
# step 2
git add README
# step 3
git commit -m 'initial project version'

b. ´ÓÏÖÓвֿâ¿Ë¡

Èç¹ûÏë¶Ôij¸ö¿ªÔ´ÏîÄ¿³öÒ»·ÝÁ¦£¬¿ÉÒÔÏȰѸÃÏîÄ¿µÄ Git ²Ö¿â¸´ÖÆÒ»·Ý³öÀ´£¬Õâ¾ÍÐèÒªÓõ½ git clone ÃüÁî¡£Èç¹ûÄãÊìϤÆäËûµÄ VCS ±ÈÈç Subversion£¬Äã¿ÉÄÜÒѾ­×¢Òâµ½ÕâÀïʹÓõÄÊÇ clone ¶ø²»ÊÇ checkout¡£ÕâÊǸö·Ç³£ÖØÒªµÄ²î±ð£¬Git ÊÕÈ¡µÄÊÇÏîÄ¿ÀúÊ·µÄËùÓÐÊý¾Ý£¨Ã¿Ò»¸öÎļþµÄÿһ¸ö°æ±¾£©£¬·þÎñÆ÷ÉÏÓеÄÊý¾Ý¿Ë¡֮ºó±¾µØÒ²¶¼ÓÐÁË¡£Êµ¼ÊÉÏ£¬¼´±ã·þÎñÆ÷µÄ´ÅÅÌ·¢Éú¹ÊÕÏ£¬ÓÃÈκÎÒ»¸ö¿Ë¡³öÀ´µÄ¿Í»§¶Ë¶¼¿ÉÒÔÖØ½¨·þÎñÆ÷ÉϵIJֿ⣬»Øµ½µ±³õ¿Ë¡ʱµÄ״̬

git clone [url]
# Èç git clone https://github.com/xuqiang521/data-visualization.git

2¡¢¼Ç¼ÿ´Î¸üе½²Ö¿â

ÏÈÉÏÒ»ÕÅÎļþµÄ״̬±ä»¯ÖÜÆÚµÄͼʾ

a. ¼ì²éµ±Ç°Îļþ״̬

git status

b. ¸ú×ÙÐÂÎļþ

ʹÓÃÃüÁî git add ¿ªÊ¼¸ú×ÙÒ»¸öÐÂÎļþREADME¡£ÔËÐÐ

# step 1
git add README
# step 2
git status
# ´ËʱÎļþÊôÓÚÔÝ´æ×´Ì¬
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
# new file: README

¼ÙÉèÔÚÕâ֮ǰÎÒ¾ÍÒѾ­¸ú×Ù¹ýÒ»¸öÎļþ½Ð benchmarks.rb£¬È»ºóÔÙ´ÎÔËÐÐ status ÃüÁ»á¿´µ½ÕâÑùµÄ״̬±¨¸æ

git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: README
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
#
# modified: benchmarks.rb

Îļþ benchmarks.rb ³öÏÖÔÚ ¡°Changes not staged for commit¡± ÕâÐÐÏÂÃæ£¬ËµÃ÷ÒѸú×ÙÎļþµÄÄÚÈÝ·¢ÉúÁ˱仯£¬µ«»¹Ã»Óзŵ½ÔÝ´æÇø¡£ÒªÔÝ´æÕâ´Î¸üУ¬ÐèÒªÔËÐÐ git add ÃüÁî¡£ÏÖÔÚÈÃÎÒÃÇÔËÐÐ git add ½« benchmarks.rb ·Åµ½ÔÝ´æÇø£¬È»ºóÔÙ¿´¿´ git status µÄÊä³ö

# step 1
git add benchmarks.rb
# step 2
git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: README
# modified: benchmarks.rb

ÏÖÔÚÁ½¸öÎļþ¶¼ÒÑÔݴ棬Ï´ÎÌύʱ¾Í»áÒ»²¢¼Ç¼µ½²Ö¿â¡£¼ÙÉè´Ëʱ£¬ÄãÏëÒªÔÚ benchmarks.rb ÀïÔÙ¼ÓÌõ×¢ÊÍ£¬ÖØÐ±༭´æÅ̺ó£¬×¼±¸ºÃÌá½»¡£²»¹ýÇÒÂý£¬ÔÙÔËÐÐ git status ¿´¿´

git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: README
# modified: benchmarks.rb
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
#
# modified: benchmarks.rb

ºÜÃ÷ÏÔ£¬benchmarks.rb Îļþ³öÏÖÁËÁ½´Î£¡Ò»´ÎËãδÔݴ棬һ´ÎËãÒÑÔݴ棬ÕâÔõô¿ÉÄÜÄØ£¿ºÃ°É£¬Êµ¼ÊÉÏ Git Ö»²»¹ýÔÝ´æÁËÄãÔËÐÐ git addÃüÁîʱµÄ°æ±¾£¬Èç¹ûÏÖÔÚÌá½»£¬ÄÇôÌá½»µÄÊÇÌí¼Ó×¢ÊÍǰµÄ°æ±¾£¬¶ø·Çµ±Ç°¹¤×÷Ŀ¼Öеİ汾¡£ËùÒÔ£¬ÔËÐÐÁË git add Ö®ºóÓÖ×÷ÁËÐÞ¶©µÄÎļþ£¬ÐèÒªÖØÐÂÔËÐÐ git add °Ñ×îÐÂ°æ±¾ÖØÐÂÔÝ´æÆðÀ´

# step 1
git add benchmarks.rb
# step 2
git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: README
# modified: benchmarks.rb

c. ºöÂÔijЩÎļþ

Ò»°ãÎÒÃÇ×Ü»áÓÐЩÎļþÎÞÐèÄÉÈë Git µÄ¹ÜÀí£¬Ò²²»Ï£ÍûËüÃÇ×ܳöÏÖÔÚδ¸ú×ÙÎļþÁÐ±í¡£Í¨³£¶¼ÊÇЩ×Ô¶¯Éú³ÉµÄÎļþ£¬±ÈÈçÈÕÖ¾Îļþ£¬»òÕß±àÒë¹ý³ÌÖд´½¨µÄÁÙʱÎļþµÈ¡£ÎÒÃÇ¿ÉÒÔ´´½¨Ò»¸öÃûΪ .gitignore µÄÎļþ£¬ÁгöÒªºöÂÔµÄÎļþģʽ¡£À´¿´Ò»¸öʵ¼ÊµÄÀý×Ó

cat .gitignore
#¸æËß Git ºöÂÔËùÓÐÒÔ .o »ò .a ½áβµÄÎļþ¡£Ò»°ãÕâÀà¶ÔÏóÎļþºÍ´æµµÎļþ¶¼ÊDZàÒë¹ý³ÌÖгöÏֵģ¬ÎÒÃÇÓò»×Ÿú×ÙËüÃǵİ汾
*.[oa]
#¸æËß Git ºöÂÔËùÓÐÒÔ²¨ÀË·û£¨~£©½áβµÄÎļþ£¬Ðí¶àÎı¾±à¼­Èí¼þ£¨±ÈÈç Emacs£©¶¼ÓÃÕâÑùµÄÎļþÃû±£´æ¸±±¾
*~
#´ËÍ⣬Äã¿ÉÄÜ»¹ÐèÒªºöÂÔ log£¬tmp »òÕß pid Ŀ¼£¬ÒÔ¼°×Ô¶¯Éú³ÉµÄÎĵµµÈµÈ¡£
#񻄿³ÉÒ»¿ªÊ¼¾ÍÉèÖúà .gitignore ÎļþµÄϰ¹ß£¬ÒÔÃ⽫À´ÎóÌá½»ÕâÀàÎÞÓõÄÎļþ

Îļþ .gitignore µÄ¸ñʽ¹æ·¶ÈçÏ£º

ËùÓпÕÐлòÕßÒÔ×¢ÊÍ·ûºÅ ££ ¿ªÍ·µÄÐж¼»á±» Git ºöÂÔ¡£

¿ÉÒÔʹÓñê×¼µÄ glob ģʽƥÅä¡£

Æ¥Åäģʽ×îºó¸ú·´Ð±¸Ü£¨/£©ËµÃ÷ÒªºöÂÔµÄÊÇĿ¼¡£

ÒªºöÂÔÖ¸¶¨Ä£Ê½ÒÔÍâµÄÎļþ»òĿ¼£¬¿ÉÒÔÔÚģʽǰ¼ÓÉϾªÌ¾ºÅ£¨!£©È¡·´¡£

ËùνµÄ glob ģʽÊÇÖ¸ shell ËùʹÓõļò»¯Á˵ÄÕýÔò±í´ïʽ¡£ÐǺţ¨*£©Æ¥ÅäÁã¸ö»ò¶à¸öÈÎÒâ×Ö·û£»[abc] Æ¥ÅäÈκÎÒ»¸öÁÐÔÚ·½À¨ºÅÖеÄ×Ö·û£¨Õâ¸öÀý×ÓҪôƥÅäÒ»¸ö a£¬ÒªÃ´Æ¥ÅäÒ»¸ö b£¬ÒªÃ´Æ¥ÅäÒ»¸ö c£©£»Îʺţ¨?£©Ö»Æ¥ÅäÒ»¸öÈÎÒâ×Ö·û£»Èç¹ûÔÚ·½À¨ºÅÖÐʹÓö̻®Ïß·Ö¸ôÁ½¸ö×Ö·û£¬±íʾËùÓÐÔÚÕâÁ½¸ö×Ö·û·¶Î§Äڵͼ¿ÉÒÔÆ¥Å䣨±ÈÈç [0-9] ±íʾƥÅäËùÓÐ 0 µ½ 9 µÄÊý×Ö£©¡£

ÎÒÃÇÔÙ¿´Ò»¸ö .gitignore ÎļþµÄÀý×Ó

# ´ËΪעÊÍ ¨C ½«±» Git ºöÂÔ
# ºöÂÔËùÓÐ .a ½áβµÄÎļþ
*.a
# µ« lib.a ³ýÍâ
!lib.a
# ½ö½öºöÂÔÏîÄ¿¸ùĿ¼Ï嵀 TODO Îļþ£¬²»°üÀ¨ subdir/TODO
/TODO
# ºöÂÔ build/ Ŀ¼ÏµÄËùÓÐÎļþ
build/
# »áºöÂÔ doc/notes.txt µ«²»°üÀ¨ doc/server/arch.txt
doc/*.txt

d. ²é¿´ÒÑÔÝ´æºÍδÔÝ´æµÄ¸üÐÂ

ʵ¼ÊÉÏ git status µÄÏÔʾ±È½Ï¼òµ¥£¬½ö½öÊÇÁгöÁËÐ޸ĹýµÄÎļþ£¬¼ÙÈçÔÙ´ÎÐÞ¸Ä README ÎļþºóÔݴ棬Ȼºó±à¼­ benchmarks.rb ÎļþºóÏȱðÔݴ棬ÔËÐÐ status ÃüÁ»á¿´µ½

git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: README
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
#
# modified: benchmarks.rb

Èç¹ûÕâ¸öʱºòÎÒÐèÒª²é¿´ÉÐδÔÝ´æµÄÎļþ¸üÐÂÁËÄÄЩ²¿·Ö£¬ÄÇô²»·Á²»¼Ó²ÎÊýÖ±½ÓÊäÈë git diff

git diff

´ËÃüÁî±È½ÏµÄÊǹ¤×÷Ŀ¼Öе±Ç°ÎļþºÍÔÝ´æÇøÓò¿ìÕÕÖ®¼äµÄ²îÒ죬Ҳ¾ÍÊÇÐÞ¸ÄÖ®ºó»¹Ã»ÓÐÔÝ´æÆðÀ´µÄ±ä»¯ÄÚÈÝ¡£

ÈôÒª¿´ÒѾ­ÔÝ´æÆðÀ´µÄÎļþºÍÉÏ´ÎÌύʱµÄ¿ìÕÕÖ®¼äµÄ²îÒ죬¿ÉÒÔÓà git diff --cached ÃüÁî¡£

git diff --cached

e. Ìá½»¸üÐÂ

ÏÖÔÚµÄÔÝ´æÇøÓòÒѾ­×¼±¸Í×µ±¿ÉÒÔÌá½»ÁË¡£ÔÚ´Ë֮ǰ£¬ÇëÒ»¶¨ÒªÈ·ÈÏ»¹ÓÐʲôÐ޸ĹýµÄ»òн¨µÄÎļþ»¹Ã»ÓÐ git add ¹ý£¬·ñÔòÌá½»µÄʱºò²»»á¼Ç¼ÕâЩ»¹Ã»ÔÝ´æÆðÀ´µÄ±ä»¯¡£ËùÒÔ£¬Ã¿´Î×¼±¸Ìύǰ£¬ÏÈÓà git status ¿´Ï£¬ÊDz»ÊǶ¼ÒÑÔÝ´æÆðÀ´ÁË£¬È»ºóÔÙÔËÐÐÌá½»ÃüÁî git commit

git commit

ÕâÖÖ·½Ê½»áÆô¶¯Îı¾±à¼­Æ÷ÒÔ±ãÊäÈë±¾´ÎÌá½»µÄ˵Ã÷£¬±à¼­Æ÷»áÏÔʾÀàËÆÏÂÃæµÄÎı¾ÐÅÏ¢£¨±¾ÀýÑ¡Óà Vim µÄÆÁÏÔ·½Ê½Õ¹Ê¾£©

# 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:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: README
# modified: benchmarks.rb
~
~
~
".git/COMMIT_EDITMSG" 10L, 283C

ÁíÍâÒ²¿ÉÒÔÓà -m ²ÎÊýºó¸úÌύ˵Ã÷µÄ·½Ê½£¬ÔÚÒ»ÐÐÃüÁîÖÐÌá½»¸üÐÂ

git commit -m "up"

Èç¹ûÎÒÃÇÐèÒªÌø¹ýʹÓÃÔÝ´æÇøÓò£¬²»Óõ£ÐÄ¡£Git ÌṩÁËÒ»¸öÌø¹ýʹÓÃÔÝ´æÇøÓòµÄ·½Ê½£¬Ö»ÒªÔÚÌá½»µÄʱºò£¬¸ø git commit ¼ÓÉÏ -a Ñ¡ÏGit ¾Í»á×Ô¶¯°ÑËùÓÐÒѾ­¸ú×Ù¹ýµÄÎļþÔÝ´æÆðÀ´Ò»²¢Ìá½»£¬´Ó¶øÌø¹ý git add ²½Öè

# step 1
git status
# On branch master
#
# Changes not staged for commit:
#
# modified: benchmarks.rb
#
# step 2
git commit -a -m 'up'
#[master 83e38c7] added new benchmarks
#1 files changed, 5 insertions(+), 0 deletions(-)

f. ÒÆ³ýÎļþ

Òª´Ó Git ÖÐÒÆ³ýij¸öÎļþ£¬¾Í±ØÐëÒª´ÓÒѸú×ÙÎļþÇåµ¥ÖÐÒÆ³ý£¨È·ÇеØËµ£¬ÊÇ´ÓÔÝ´æÇøÓòÒÆ³ý£©£¬È»ºóÌá½»¡£¿ÉÒÔÓà git rm ÃüÁîÍê³É´ËÏ×÷£¬²¢Á¬´ø´Ó¹¤×÷Ŀ¼ÖÐɾ³ýÖ¸¶¨µÄÎļþ£¬ÕâÑùÒÔºó¾Í²»»á³öÏÖÔÚδ¸ú×ÙÎļþÇåµ¥ÖÐÁË¡£

Èç¹ûÖ»ÊǼòµ¥µØ´Ó¹¤×÷Ŀ¼ÖÐÊÖ¹¤É¾³ýÎļþ£¬ÔËÐÐ git status ʱ¾Í»áÔÚ ¡°Changes not staged for commit¡± ²¿·Ö£¨Ò²¾ÍÊÇδÔÝ´æÇåµ¥£©¿´µ½

# step 1
rm benchmarks.rb
# step 2
git status
# On branch master
#
# Changes not staged for commit:
# (use "git add/rm <file>..." to update what will be committed)
#
# deleted: benchmarks.rb

È»ºóÔÙÔËÐÐ git rm ¼Ç¼´Ë´ÎÒÆ³ýÎļþµÄ²Ù×÷£º

# step 1
git rm benchmarks.rb
# step 2
git status
# On branch master
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: benchmarks.rb

ÕâÑù×îºóÌá½»µÄʱºò£¬¸ÃÎļþ¾Í²»ÔÙÄÉÈë°æ±¾¹ÜÀíÁË¡£Èç¹ûɾ³ý֮ǰÐ޸Ĺý²¢ÇÒÒѾ­·Åµ½ÔÝ´æÇøÓòµÄ»°£¬Ôò±ØÐëÒªÓÃÇ¿ÖÆÉ¾³ýÑ¡Ïî -f£¨force µÄÊ××Öĸ£©£¬ÒÔ·ÀÎóɾ³ýÎļþºó¶ªÊ§Ð޸ĵÄÄÚÈÝ¡£

ÁíÍâÒ»ÖÖÇé¿öÊÇ£¬ÎÒÃÇÏë°ÑÎļþ´Ó Git ²Ö¿âÖÐɾ³ý£¨Ò༴´ÓÔÝ´æÇøÓòÒÆ³ý£©£¬µ«ÈÔȻϣÍû±£ÁôÔÚµ±Ç°¹¤×÷Ŀ¼ÖС£»»¾ä»°Ëµ£¬½öÊÇ´Ó¸ú×ÙÇåµ¥ÖÐɾ³ý¡£±ÈÈçһЩ´óÐÍÈÕÖ¾Îļþ»òÕßÒ»¶Ñ .a ±àÒëÎļþ£¬²»Ð¡ÐÄÄÉÈë²Ö¿âºó£¬ÒªÒƳý¸ú×Ùµ«²»É¾³ýÎļþ£¬ÒÔ±ãÉÔºóÔÚ .gitignore ÎļþÖв¹ÉÏ£¬Óà --cached Ñ¡Ïî¼´¿É

git rm --cached readme.txt

3¡¢²é¿´Ìá½»ÀúÊ·

ÔÚÌá½»ÁËÈô¸É¸üÐÂÖ®ºó£¬ÓÖ»òÕ߿ˡÁËij¸öÏîÄ¿£¬Ïë»Ø¹ËÏÂÌá½»ÀúÊ·£¬¿ÉÒÔʹÓà git log ÃüÁî²é¿´¡£

git log

ĬÈϲ»ÓÃÈκβÎÊýµÄ»°£¬git log »á°´Ìύʱ¼äÁгöËùÓеĸüУ¬×î½üµÄ¸üÐÂÅÅÔÚ×îÉÏÃæ¡£

git log ÃüÁîÖ§³ÖµÄÑ¡Ïî¾ßÌåÈçÏÂËùʾ

#Ñ¡Ïî ˵Ã÷
-p °´²¹¶¡¸ñʽÏÔʾÿ¸ö¸üÐÂÖ®¼äµÄ²îÒì¡£
--stat ÏÔʾÿ´Î¸üеÄÎļþÐÞ¸Äͳ¼ÆÐÅÏ¢¡£
--shortstat Ö»ÏÔʾ --stat ÖÐ×îºóµÄÐÐÊýÐÞ¸ÄÌí¼ÓÒÆ³ýͳ¼Æ¡£
--name-only ½öÔÚÌá½»ÐÅÏ¢ºóÏÔʾÒÑÐ޸ĵÄÎļþÇåµ¥¡£
--name-status ÏÔʾÐÂÔö¡¢Ð޸ġ¢É¾³ýµÄÎļþÇåµ¥¡£
--abbrev-commit ½öÏÔʾ SHA-1 µÄǰ¼¸¸ö×Ö·û£¬¶ø·ÇËùÓÐµÄ 40 ¸ö×Ö·û¡£
--relative-date ʹÓý϶̵ÄÏà¶Ôʱ¼äÏÔʾ£¨±ÈÈ磬¡°2 weeks ago¡±£©¡£
--graph ÏÔʾ ASCII ͼÐαíʾµÄ·ÖÖ§ºÏ²¢ÀúÊ·¡£
--pretty ʹÓÃÆäËû¸ñʽÏÔʾÀúÊ·Ìá½»ÐÅÏ¢¡£¿ÉÓõÄÑ¡Ïî°üÀ¨ oneline£¬short£¬full£¬fuller ºÍ format£¨ºó¸úÖ¸¶¨¸ñʽ£©¡£
-(n) ½öÏÔʾ×î½üµÄ n ÌõÌá½»
--since, --after ½öÏÔʾָ¶¨Ê±¼äÖ®ºóµÄÌá½»¡£
--until, --before ½öÏÔʾָ¶¨Ê±¼ä֮ǰµÄÌá½»¡£
--author ½öÏÔʾָ¶¨×÷ÕßÏà¹ØµÄÌá½»¡£
--committer ½öÏÔʾָ¶¨Ìá½»ÕßÏà¹ØµÄÌá½»¡£

4¡¢³·Ïú²Ù×÷

ÓÐʱºòÎÒÃÇÌá½»ÍêÁ˲ŷ¢ÏÖ©µôÁ˼¸¸öÎļþûÓмӣ¬»òÕßÌá½»ÐÅϢд´íÁË¡£ÏëÒª³·Ïû¸Õ²ÅµÄÌá½»²Ù×÷£¬¿ÉÒÔʹÓà --amend Ñ¡ÏîÖØÐÂÌá½»£º

git commit --amend

Èç¹û¸Õ²ÅÌύʱÍüÁËÔÝ´æÄ³Ð©Ð޸ģ¬¿ÉÒÔÏȲ¹ÉÏÔÝ´æ²Ù×÷£¬È»ºóÔÙÔËÐÐ --amend Ìá½»£º

# step 1
git commit -m 'initial commit'
# step 2
git add forgotten_file
# step 3
git commit --amend

ÉÏÃæµÄÈýÌõÃüÁî×îÖÕÖ»ÊDzúÉúÒ»¸öÌá½»£¬µÚ¶þ¸öÌá½»ÃüÁîÐÞÕýÁ˵ÚÒ»¸öµÄÌá½»ÄÚÈÝ¡£

ÕâÆª²©¿ÍÏÈдµ½ÕâÀºóÆÚÎÒ»áÔÙдÉÏһƪ×÷ΪºóÐø²¹ÉÏ£¬ºóÐøÖÐÏêϸ½éÉÜGit·ÖÖ§ÒÔ¼°Ô¶³Ì²Ö¿âµÄ²Ù×÷¡£Ï£Íû¿ÉÒÔ°ïÖúµ½´ó¼Ò£¬Ò²Ï£Íû´ó¼Ò¿ÉÒÔÖ§³ÖÒ»ÏÂÎÒ£¬´ó¼ÒµÄÖ§³Ö½«ÊÇÎÒд×÷×î´óµÄ¶¯Á¦(*^__^*) £¡

   
2265 ´Îä¯ÀÀ       32
Ïà¹ØÎÄÕÂ

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

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

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