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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
GitÏêϸ½Ì³Ì
 
À´Ô´£º¼òÊé ·¢²¼ÓÚ£º 2017-9-11
  3244  次浏览      31
 

GitʹÓý̳Ì

GitÊÇʲô

GitÊÇÒ»¸ö¿ªÔ´µÄ·Ö²¼Ê½°æ±¾¿ØÖÆÏµÍ³£¬ÓÃÓÚÃô½Ý¸ßЧµØ´¦ÀíÈκλòС»ò´óµÄÏîÄ¿¡£

GitÊÇ Linus Torvalds ΪÁ˰ïÖú¹ÜÀí Linux Äں˿ª·¢¶ø¿ª·¢µÄÒ»¸ö¿ª·ÅÔ´ÂëµÄ°æ±¾¿ØÖÆÈí¼þ¡£

GitÓë³£Óõİ汾¿ØÖƹ¤¾ß CVS, Subversion µÈ²»Í¬£¬Ëü²ÉÓÃÁË·Ö²¼Ê½°æ±¾¿âµÄ·½Ê½£¬²»±Ø·þÎñÆ÷¶ËÈí¼þÖ§³Ö¡£

GitÓëSVNµÄÇø±ð

GIT²»½ö½öÊǸö°æ±¾¿ØÖÆÏµÍ³£¬ËüÒ²ÊǸöÄÚÈݹÜÀíϵͳ(CMS),¹¤×÷¹ÜÀíϵͳµÈ¡£

Èç¹ûÄãÊÇÒ»¸ö¾ßÓÐʹÓÃSVN±³¾°µÄÈË£¬ÄãÐèÒª×öÒ»¶¨µÄ˼Ïëת»»£¬À´ÊÊÓ¦GITÌṩµÄһЩ¸ÅÄîºÍÌØÕ÷¡£

Git Óë SVN Çø±ðµã£º

  1. GITÊÇ·Ö²¼Ê½µÄ£¬SVN²»ÊÇ£ºÕâÊÇGITºÍÆäËü·Ç·Ö²¼Ê½µÄ°æ±¾¿ØÖÆÏµÍ³£¬ÀýÈçSVN£¬CVSµÈ£¬×îºËÐĵÄÇø±ð¡£
  2. GIT°ÑÄÚÈݰ´ÔªÊý¾Ý·½Ê½´æ´¢£¬¶øSVNÊǰ´Îļþ£ºËùÓеÄ×ÊÔ´¿ØÖÆÏµÍ³¶¼ÊǰÑÎļþµÄÔªÐÅÏ¢Òþ²ØÔÚÒ»¸öÀàËÆ.svn,.cvsµÈµÄÎļþ¼ÐÀï¡£
  3. GIT·ÖÖ§ºÍSVNµÄ·ÖÖ§²»Í¬£º·ÖÖ§ÔÚSVNÖÐÒ»µã²»Ìر𣬾ÍÊǰ汾¿âÖеÄÁíÍâµÄÒ»¸öĿ¼¡£
  4. GITûÓÐÒ»¸öÈ«¾ÖµÄ°æ±¾ºÅ£¬¶øSVNÓУºÄ¿Ç°ÎªÖ¹ÕâÊǸúSVNÏà±ÈGITȱÉÙµÄ×î´óµÄÒ»¸öÌØÕ÷¡£
  5. GITµÄÄÚÈÝÍêÕûÐÔÒªÓÅÓÚSVN£ºGITµÄÄÚÈݴ洢ʹÓõÄÊÇSHA-1¹þÏ£Ëã·¨¡£ÕâÄÜÈ·±£´úÂëÄÚÈݵÄÍêÕûÐÔ£¬È·±£ÔÚÓöµ½´ÅÅ̹ÊÕϺÍÍøÂçÎÊÌâʱ½µµÍ¶Ô°æ±¾¿âµÄÆÆ»µ¡£

GitÅäÖÃ git config

Git ÌṩÁËÒ»¸ö½Ð×ö git config µÄ¹¤¾ß£¬×¨ÃÅÓÃÀ´ÅäÖûò¶ÁÈ¡ÏàÓ¦µÄ¹¤×÷»·¾³±äÁ¿¡£

ÕâЩ»·¾³±äÁ¿£¬¾ö¶¨ÁË Git ÔÚ¸÷¸ö»·½ÚµÄ¾ßÌ幤×÷·½Ê½ºÍÐÐΪ¡£ÕâЩ±äÁ¿¿ÉÒÔ´æ·ÅÔÚÒÔÏÂÈý¸ö²»Í¬µÄµØ·½£º

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

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

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

ÔÚ Windows ϵͳÉÏ£¬Git »áÕÒѰÓû§Ö÷Ŀ¼Ï嵀 .gitconfig Îļþ¡£Ö÷Ŀ¼¼´ $HOME ±äÁ¿Ö¸¶¨µÄĿ¼£¬Ò»°ã¶¼ÊÇ C:\Documents and Settings\$USER¡£

´ËÍ⣬Git »¹»á³¢ÊÔÕÒѰ /etc/gitconfig Îļþ£¬Ö»²»¹ý¿´µ±³õ Git ×°ÔÚʲôĿ¼£¬¾ÍÒÔ´Ë×÷Ϊ¸ùĿ¼À´¶¨Î»¡£

1.Óû§ÐÅÏ¢ git config user

ÅäÖøöÈ˵ÄÓû§Ãû³ÆºÍµç×ÓÓʼþµØÖ·£º

$ git config --global user.name "wyndam"
$ git config --global user.email "only.night@qq.com"

Èç¹ûÓÃÁË--globalÑ¡ÏÄÇô¸ü¸ÄµÄÅäÖÃÎļþ¾ÍÊÇλÓÚÄãÓû§Ö÷Ŀ¼ÏµÄÄǸö£¬ÒÔºóÄãËùÓеÄÏîÄ¿¶¼»áĬÈÏʹÓÃÕâÀïÅäÖõÄÓû§ÐÅÏ¢¡£

Èç¹ûÒªÔÚij¸öÌØ¶¨µÄÏîÄ¿ÖÐʹÓÃÆäËûÃû×Ö»òÕßµçÓÊ£¬Ö»ÒªÈ¥µô--globalÑ¡ÏîÖØÐÂÅäÖü´¿É£¬ÐµÄÉ趨±£´æÔÚµ±Ç°ÏîÄ¿µÄ .git/config ÎļþÀï¡£

2.Îı¾±à¼­Æ÷

ÉèÖÃGitĬÈÏʹÓõÄÎı¾±à¼­Æ÷, Ò»°ã¿ÉÄÜ»áÊÇ Vi »òÕß Vim¡£Èç¹ûÄãÓÐÆäËûÆ«ºÃ£¬±ÈÈç Emacs µÄ»°£¬¿ÉÒÔÖØÐÂÉèÖãº

$ git config --global core.editor emacs

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

»¹ÓÐÒ»¸ö±È½Ï³£ÓõÄÊÇ£¬ÔÚ½â¾öºÏ²¢³åͻʱʹÓÃÄÄÖÖ²îÒì·ÖÎö¹¤¾ß¡£±ÈÈçÒª¸ÄÓà vimdiff µÄ»°£º

$ git config --global merge.tool vimdiff

Git ¿ÉÒÔÀí½â kdiff3£¬tkdiff£¬meld£¬xxdiff£¬emerge£¬vimdiff£¬gvimdiff£¬ecmerge£¬ºÍ opendiff µÈºÏ²¢¹¤¾ßµÄÊä³öÐÅÏ¢¡£

µ±È»£¬ÄãÒ²¿ÉÒÔÖ¸¶¨Ê¹ÓÃ×Ô¼º¿ª·¢µÄ¹¤¾ß£¬¾ßÌåÔõô×ö¿ÉÒÔ²ÎÔĺóÃæµÄÕ½ڡ£

4.²é¿´ÅäÖÃÐÅÏ¢ git config --list

Òª¼ì²éÒÑÓеÄÅäÖÃÐÅÏ¢£¬¿ÉÒÔʹÓà git config --list ÃüÁ

$ git config --list
core.symlinks=false
core.autocrlf=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo= E:/Platform/Git/mingw32/ssl/certs/ca-bundle.crt
diff.astextplain.textconv=astextplain
rebase.autosquash=true
filter.lfs.clean=git-lfs clean %f
filter.lfs.smudge=git-lfs smudge %f
filter.lfs.required=true
user.name=Wyndam
user.email=only.night@qq.com
core.editor=subl

ÓÐʱºò»á¿´µ½Öظ´µÄ±äÁ¿Ãû£¬ÄǾÍ˵Ã÷ËüÃÇÀ´×Ô²»Í¬µÄÅäÖÃÎļþ£¨±ÈÈç /etc/gitconfig ºÍ ~/.gitconfig£©£¬²»¹ý×îÖÕ Git ʵ¼Ê²ÉÓõÄÊÇ×îºóÒ»¸ö¡£

ÕâЩÅäÖÃÎÒÃÇÒ²¿ÉÒÔÔÚ ~/.gitconfig »ò /etc/gitconfig ¿´µ½£¬ÈçÏÂËùʾ£º

[filter "lfs"]
clean = git-lfs clean %f
smudge = git-lfs smudge %f
required = true
[user]
name = Wyndam
email = only.night@qq.com
[core]
editor = subl

Ò²¿ÉÒÔÖ±½Ó²éÔÄij¸ö»·¾³±äÁ¿µÄÉ趨£¬Ö»Òª°ÑÌØ¶¨µÄÃû×Ö¸úÔÚºóÃæ¼´¿É£¬ÏñÕâÑù£º

$ git config user.email
only.night@qq.com

Git¹¤×÷Á÷³Ì

±¾Õ½ÚÎÒÃǽ«Îª´ó¼Ò½éÉÜ Git µÄ¹¤×÷Á÷³Ì¡£

Ò»°ã¹¤×÷Á÷³ÌÈçÏ£º

  1. ¿Ë¡ Git ×ÊÔ´×÷Ϊ¹¤×÷Ŀ¼¡£
  2. ÔÚ¿Ë¡µÄ×ÊÔ´ÉÏÌí¼Ó»òÐÞ¸ÄÎļþ¡£
  3. Èç¹ûÆäËûÈËÐÞ¸ÄÁË£¬Äã¿ÉÒÔ¸üÐÂ×ÊÔ´¡£
  4. ÔÚÌύǰ²é¿´Ð޸ġ£
  5. Ìá½»Ð޸ġ£
  6. ÔÚÐÞ¸ÄÍê³Éºó£¬Èç¹û·¢ÏÖ´íÎ󣬿ÉÒÔ³·»ØÌá½»²¢ÔÙ´ÎÐ޸IJ¢Ìá½»¡£

ÏÂͼչʾÁË Git µÄ¹¤×÷Á÷³Ì£º

gitÁ÷³Ìͼ

Git ¹¤×÷Çø¡¢ÔÝ´æÇøºÍ°æ±¾¿â

»ù±¾¸ÅÄî

ÎÒÃÇÏÈÀ´Àí½âÏÂGit ¹¤×÷Çø¡¢ÔÝ´æÇøºÍ°æ±¾¿â¸ÅÄî

  • ¹¤×÷Çø£º¾ÍÊÇÄãÏîÄ¿µÄĿ¼£¨¿É¼ûĿ¼£©¡£
  • »º´æÇø£ºÓ¢ÎĽÐstage, »òindex¡£Ò»°ã´æ·ÅÔÚ"gitĿ¼"ϵÄindexÎļþ£¨.git/index£©ÖУ¬ËùÒÔÎÒÃǰÑÔÝ´æÇøÓÐʱҲ½Ð×÷Ë÷Òý£¨index£©¡£
  • °æ±¾¿â£º¹¤×÷ÇøÓÐÒ»¸öÒþ²ØÄ¿Â¼.git£¬Õâ¸ö²»Ë㹤×÷Çø£¬¶øÊÇGitµÄ°æ±¾¿â¡£

ÏÂÃæÕâ¸öͼչʾÁ˹¤×÷Çø¡¢°æ±¾¿âÖеÄÔÝ´æÇøºÍ°æ±¾¿âÖ®¼äµÄ¹ØÏµ£º

¹¤×÷Çø¼ä

Git ´´½¨²Ö¿â

±¾Õ½ÚÎÒÃǽ«Îª´ó¼Ò½éÉÜÈçºÎ´´½¨Ò»¸ö Git ²Ö¿â¡£

Äã¿ÉÒÔʹÓÃÒ»¸öÒѾ­´æÔÚµÄĿ¼×÷ΪGit²Ö¿â¡£

н¨±¾µØ²Ö¿â git init

Git ʹÓà git init ÃüÁîÀ´³õʼ»¯Ò»¸ö Git ²Ö¿â£¬Git µÄºÜ¶àÃüÁî¶¼ÐèÒªÔÚ Git µÄ²Ö¿âÖÐÔËÐУ¬ËùÒÔ git init ÊÇʹÓà Git µÄµÚÒ»¸öÃüÁî¡£

ÔÚÖ´ÐÐÍê³É git init ÃüÁîºó£¬Git ²Ö¿â»áÉú³ÉÒ»¸ö .git Ŀ¼£¬¸ÃĿ¼°üº¬ÁË×ÊÔ´µÄËùÓÐÔªÊý¾Ý£¬ÆäËûµÄÏîĿĿ¼±£³Ö²»±ä£¨²»Ïñ SVN »áÔÚÿ¸ö×ÓĿ¼Éú³É .svn Ŀ¼£¬Git Ö»ÔÚ²Ö¿âµÄ¸ùĿ¼Éú³É .git Ŀ¼£©¡£

ʹÓ÷½·¨

ʹÓõ±Ç°Ä¿Â¼×÷ΪGit²Ö¿â£¬ÎÒÃÇÖ»ÐèʹËü³õʼ»¯¡£

$ git init

¸ÃÃüÁîÖ´ÐÐÍêºó»áÔÚµ±Ç°Ä¿Â¼Éú³ÉÒ»¸ö .git Ŀ¼¡£

ʹÓÃÎÒÃÇÖ¸¶¨Ä¿Â¼×÷ΪGit²Ö¿â¡£

$ git init newrepo

³õʼ»¯ºó£¬»áÔÚ newrepo Ŀ¼Ï»á³öÏÖÒ»¸öÃûΪ .git µÄĿ¼£¬ËùÓÐ Git ÐèÒªµÄÊý¾ÝºÍ×ÊÔ´¶¼´æ·ÅÔÚÕâ¸öĿ¼ÖС£

Èç¹ûµ±Ç°Ä¿Â¼ÏÂÓм¸¸öÎļþÏëÒªÄÉÈë°æ±¾¿ØÖÆ£¬ÐèÒªÏÈÓà git add ÃüÁî¸æËß Git ¿ªÊ¼¶ÔÕâЩÎļþ½øÐиú×Ù£¬È»ºóÌá½»£º

$ git add *.java
$ git add README.md
$ git commit -m "inital commit"

ÒÔÉÏÃüÁĿ¼ÏÂÒÔ .java ½áβ¼° README.md ÎļþÌá½»µ½²Ö¿âÖС£

¸´ÖÆÔ¶³Ì²Ö¿â git clone

ÎÒÃÇʹÓà git clone ´ÓÏÖÓÐ Git ²Ö¿âÖп½±´ÏîÄ¿£¨ÀàËÆ svn checkout£©¡£

¿Ë¡²Ö¿âµÄÃüÁî¸ñʽΪ£º

$ git clone <repo>

Èç¹ûÎÒÃÇÐèÒª¿Ë¡µ½Ö¸¶¨µÄĿ¼£¬¿ÉÒÔʹÓÃÒÔÏÂÃüÁî¸ñʽ£º

$ git clone <repo> <directory>

²ÎÊý˵Ã÷£º

  • repo:Git ²Ö¿â¡£
  • directory:±¾µØÄ¿Â¼¡£

±ÈÈ磬Ҫ¿Ë¡ Ruby ÓïÑ﵀ Git ´úÂë²Ö¿â Grit£¬¿ÉÒÔÓÃÏÂÃæµÄÃüÁ

$ git clone git://github.com/schacon/grit.git

Ö´ÐиÃÃüÁîºó£¬»áÔÚµ±Ç°Ä¿Â¼Ï´´½¨Ò»¸öÃûΪgritµÄĿ¼£¬ÆäÖаüº¬Ò»¸ö .git µÄĿ¼£¬ÓÃÓÚ±£´æÏÂÔØÏÂÀ´µÄËùÓа汾¼Ç¼¡£

Èç¹ûÒª×Ô¼º¶¨ÒåҪн¨µÄÏîĿĿ¼Ãû³Æ£¬¿ÉÒÔÔÚÉÏÃæµÄÃüÁîĩβָ¶¨ÐµÄÃû×Ö£º

$ git clone git://github.com/schacon/grit.git mygrit

Git»ù±¾²Ù×÷

Git µÄ¹¤×÷¾ÍÊÇ´´½¨ºÍ±£´æÄãÏîÄ¿µÄ¿ìÕÕ¼°ÓëÖ®ºóµÄ¿ìÕÕ½øÐжԱȡ£±¾Õ½«¶ÔÓйش´½¨ÓëÌá½»ÄãµÄÏîÄ¿¿ìÕÕµÄÃüÁî×÷½éÉÜ¡£

»ñÈ¡Óë´´½¨ÏîÄ¿ÃüÁî

git init

Óà git init ÔÚĿ¼Öд´½¨Ð嵀 Git ²Ö¿â¡£ Äã¿ÉÒÔÔÚÈκÎʱºò¡¢ÈκÎĿ¼ÖÐÕâô×ö£¬ÍêÈ«ÊDZ¾µØ»¯µÄ¡£

ÔÚĿ¼ÖÐÖ´ÐÐ git init£¬¾Í¿ÉÒÔ´´½¨Ò»¸ö Git ²Ö¿âÁË¡£±ÈÈçÎÒÃÇ´´½¨ runoob ÏîÄ¿£º

$ mkdir wyndam
$ cd wyndam/
$ git init
Initialized empty Git repository in C:/Users/lion/Desktop/wyndam/.git/
# ÔÚ ×ÀÃæ/wyndam/ Ŀ¼³õʼ»¯¿Õ Git ²Ö¿âÍê±Ï¡£

ÏÖÔÚÄã¿ÉÒÔ¿´µ½ÔÚÄãµÄÏîÄ¿ÖÐÉú³ÉÁË .git Õâ¸ö×ÓĿ¼¡£ Õâ¾ÍÊÇÄãµÄ Git ²Ö¿âÁË£¬ËùÓÐÓйØÄãµÄ´ËÏîÄ¿µÄ¿ìÕÕÊý¾Ý¶¼´æ·ÅÔÚÕâÀï¡£

$ ls -a
. .. .git

git clone

ʹÓà git clone ¿½±´Ò»¸ö Git ²Ö¿âµ½±¾µØ£¬ÈÃ×Ô¼ºÄܹ»²é¿´¸ÃÏîÄ¿£¬»òÕß½øÐÐÐ޸ġ£

Èç¹ûÄãÐèÒªÓëËûÈ˺Ï×÷Ò»¸öÏîÄ¿£¬»òÕßÏëÒª¸´ÖÆÒ»¸öÏîÄ¿£¬¿´¿´´úÂ룬Äã¾Í¿ÉÒÔ¿Ë¡ÄǸöÏîÄ¿¡£ Ö´ÐÐÃüÁ

$ git clone [url]

[url] ΪÄãÏëÒª¸´ÖƵÄÏîÄ¿gitµØÖ·£¬¾Í¿ÉÒÔÁË¡£

ÀýÈçÎÒÃǿˡ Github ÉϵÄÏîÄ¿£º

$ git clone https://www.github.com/onlynight/Proxy.git
Cloning into 'Proxy'...
remote: Counting objects: 50, done.
remote: Compressing objects: 100% (28/28), done.
remote: Total 50 (delta 13), reused 47 (delta 10), pack-reused 0
Unpacking objects: 100% (50/50), done.
Checking connectivity... done.

¿Ë¡Íê³Éºó£¬ÔÚµ±Ç°Ä¿Â¼Ï»áÉú³ÉÒ»¸ö simplegit Ŀ¼£º

$ cd Proxy/
$ ls -a
. .. .git .idea Proxy.iml README.md images src

ĬÈÏÇé¿öÏ£¬Git »á°´ÕÕÄãÌṩµÄ URL ËùָʾµÄÏîÄ¿µÄÃû³Æ´´½¨ÄãµÄ±¾µØÏîĿĿ¼¡£ ͨ³£¾ÍÊǸà URL ×îºóÒ»¸ö / Ö®ºóµÄÏîÄ¿Ãû³Æ¡£Èç¹ûÄãÏëÒªÒ»¸ö²»Ò»ÑùµÄÃû×Ö£¬ Äã¿ÉÒÔÔÚ¸ÃÃüÁîºó¼ÓÉÏÄãÏëÒªµÄÃû³Æ¡£

»ù±¾¿ìÕÕ

Git µÄ¹¤×÷¾ÍÊÇ´´½¨ºÍ±£´æÄãµÄÏîÄ¿µÄ¿ìÕÕ¼°ÓëÖ®ºóµÄ¿ìÕÕ½øÐжԱȡ£±¾Õ½«¶ÔÓйش´½¨ÓëÌá½»ÄãµÄÏîÄ¿µÄ¿ìÕÕµÄÃüÁî×÷½éÉÜ¡£

Ìí¼ÓÎļþµ½»º´æ git add

git add ÃüÁî¿É½«¸ÃÎļþÌí¼Óµ½»º´æ£¬ÈçÎÒÃÇÌí¼ÓÒÔÏÂÁ½¸öÎļþ£º

$ touch README.md
$ touch HelloWorld.java
$ ls
HelloWorld.java README.md
$ git status -s
?? HelloWorld.java
?? README.md

git status ÃüÁîÓÃÓڲ鿴ÏîÄ¿µÄµ±Ç°×´Ì¬¡£

½ÓÏÂÀ´ÎÒÃÇÖ´ÐÐ git add ÃüÁîÀ´Ìí¼ÓÎļþ£º

$ git add README.md HelloWorld.java

ÏÖÔÚÎÒÃÇÔÙÖ´ÐÐ git status£¬¾Í¿ÉÒÔ¿´µ½ÕâÁ½¸öÎļþÒѾ­¼ÓÉÏÈ¥ÁË¡£

$ git status -s
A HelloWorld.java
A README.md

ÐÂÏîÄ¿ÖУ¬Ìí¼ÓËùÓÐÎļþºÜÆÕ±é£¬ÎÒÃÇ¿ÉÒÔʹÓà git add . ÃüÁîÀ´Ìí¼Óµ±Ç°ÏîÄ¿µÄËùÓÐÎļþ¡£

ÏÖÔÚÎÒÃÇÐÞ¸Ä README Îļþ£º

$ vim README
#README.md
This is readme markdown file.
$ git status -s
A HelloWorld.java
AM README.md

"AM" ״̬µÄÒâ˼ÊÇ£¬Õâ¸öÎļþÔÚÎÒÃǽ«ËüÌí¼Óµ½»º´æÖ®ºóÓÖÓи͝¡£¸Ä¶¯ºóÎÒÃÇÔÚÖ´ÐÐ git add ÃüÁÆäÌí¼Óµ½»º´æÖУº

$ git add .
$ git status -s
A HelloWorld.java
A README.md

µ±ÄãÒª½«ÄãµÄÐ޸İüº¬ÔÚ¼´½«Ìá½»µÄ¿ìÕÕÀïµÄʱºò£¬ÐèÒªÖ´ÐÐ git add¡£

²é¿´×´Ì¬ git status

git status ÒԲ鿴ÔÚÄãÉÏ´ÎÌá½»Ö®ºóÊÇ·ñÓÐÐ޸ġ£

ÎÒÑÝʾ¸ÃÃüÁîµÄʱºò¼ÓÁË -s ²ÎÊý£¬ÒÔ»ñµÃ¼ò¶ÌµÄ½á¹ûÊä³ö¡£Èç¹ûû¼Ó¸Ã²ÎÊý»áÏêϸÊä³öÄÚÈÝ£º

$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: HelloWorld.java
new file: README.md

¶Ô±È¸Ä¶¯ git diff

Ö´ÐÐ git diff À´²é¿´Ö´ÐÐ git status µÄ½á¹ûµÄÏêϸÐÅÏ¢¡£

git diff ÃüÁîÏÔʾÒÑдÈ뻺´æÓëÒÑÐ޸ĵ«ÉÐδдÈ뻺´æµÄ¸Ä¶¯µÄÇø±ð¡£git diff ÓÐÁ½¸öÖ÷ÒªµÄÓ¦Óó¡¾°¡£

  • ÉÐ믧´æµÄ¸Ä¶¯£ºgit diff
  • ²é¿´ÒÑ»º´æµÄ¸Ä¶¯£º git diff --cached
  • ²é¿´ÒÑ»º´æµÄÓë믧´æµÄËùÓи͝£ºgit diff HEAD
  • ÏÔʾժҪ¶ø·ÇÕû¸ö diff£ºgit diff --stat

ÔÚ HelloWorld.java ÎļþÖÐÊäÈëÒÔÏÂÄÚÈÝ£º

public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}

$ git status -s
AM HelloWorld.java
A README.md
$ git diff
diff --git a/HelloWorld.java b/HelloWorld.java
index e69de29..68271e5 100644
--- a/HelloWorld.java
+++ b/HelloWorld.java
@@ -0,0 +1,7 @@
+public class HelloWorld {
+
+ public static void main(String[] args) {
+ System.out.println("Hello World!");
+ }
+
+}

git status ÏÔʾÄãÉÏ´ÎÌá½»¸üкóµÄ¸ü¸Ä»òÕßдÈ뻺´æµÄ¸Ä¶¯£¬ ¶ø git diff Ò»ÐÐÒ»ÐеØÏÔʾÕâЩ¸Ä¶¯¾ßÌåÊÇɶ¡£

½ÓÏÂÀ´ÎÒÃÇÀ´²é¿´Ï git diff --cached µÄÖ´ÐÐЧ¹û£º

$ git add HelloWorld.java
$ git status -s
A HelloWorld.java
A README.md
$ git diff --cached
diff --git a/HelloWorld.java b/HelloWorld.java
new file mode 100644
index 0000000..68271e5
--- /dev/null
+++ b/HelloWorld.java
@@ -0,0 +1,7 @@
+public class HelloWorld {
+
+ public static void main(String[] args) {
+ System.out.println("Hello World!");
+ }
+
+}
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..8123762
--- /dev/null
+++ b/README.md
@@ -0,0 +1,3 @@
+#README.md
+
+This is readme markdown file.

Ìá½»´úÂëµ½±¾µØ²Ö¿â git commit

ʹÓà git add ÃüÁÏëÒª¿ìÕÕµÄÄÚÈÝдÈ뻺´æÇø£¬ ¶øÖ´ÐÐ git commit ½«»º´æÇøÄÚÈÝÌí¼Óµ½²Ö¿âÖС£

Git ΪÄãµÄÿһ¸öÌá½»¶¼¼Ç¼ÄãµÄÃû×ÖÓëµç×ÓÓÊÏ䵨ַ£¬ËùÒÔµÚÒ»²½ÐèÒªÅäÖÃÓû§ÃûºÍÓÊÏ䵨ַ¡£

$ git config --golbal user.name 'wyndam'
$ git config --golbal user.email 'only.night@qq.com'

½ÓÏÂÀ´ÎÒÃÇдÈ뻺´æ£¬²¢Ìá½»¶Ô hello.php µÄËùÓи͝¡£ÔÚÊ׸öÀý×ÓÖУ¬ÎÒÃÇʹÓà -m Ñ¡ÏîÒÔÔÚÃüÁîÐÐÖÐÌṩÌá½»×¢ÊÍ¡£

$ git add README.md
$ git add HelloWorld.java
$ git status -s
A HelloWorld.java
A README.md
$ git commit -m 'inital commit'
[master (root-commit) fdd5c53] inital commit
2 files changed, 10 insertions(+)
create mode 100644 HelloWorld.java
create mode 100644 README.md

ÏÖÔÚÎÒÃÇÒѾ­¼Ç¼ÁË¿ìÕÕ¡£Èç¹ûÎÒÃÇÔÙÖ´ÐÐ git status:

$ git status
On branch master
nothing to commit, working directory clean

ÒÔÉÏÊä³ö˵Ã÷ÎÒÃÇÔÚ×î½üÒ»´ÎÌá½»Ö®ºó£¬Ã»ÓÐ×öÈκθ͝£¬ÊÇÒ»¸ö"working directory clean£º¸É¾»µÄ¹¤×÷Ŀ¼"¡£

Èç¹ûÄãûÓÐÉèÖà -m Ñ¡ÏGit »á³¢ÊÔΪÄã´ò¿ªÒ»¸ö±à¼­Æ÷ÒÔÌîдÌá½»ÐÅÏ¢¡£ Èç¹û Git ÔÚÄã¶ÔËüµÄÅäÖÃÖÐÕÒ²»µ½Ïà¹ØÐÅÏ¢£¬Ä¬ÈÏ»á´ò¿ª 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)
#
# modified: HelloWorld.java
#
~
~
".git/COMMIT_EDITMSG" 9L, 257C

Èç¹ûÄã¾õµÃ git add Ìá½»»º´æµÄÁ÷³ÌÌ«¹ý·±Ëö£¬Git Ò²ÔÊÐíÄãÓà -a Ñ¡ÏîÌø¹ýÕâÒ»²½¡£ÃüÁî¸ñʽÈçÏ£º

$ git commit -a

ÎÒÃÇÏÈÐÞ¸Ä HelloWorld.java ÎļþΪÒÔÏÂÄÚÈÝ£º

public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!!!");
}
}

ÔÙÖ´ÐÐÒÔÏÂÃüÁ

$ git commit -am "ÐÞ¸ÄHelloWorld.javaÎļþ"
[master c2c167c] ÐÞ¸ÄHelloWorld.javaÎļþ
1 file changed, 1 insertion(+), 1 deletion(-)

´Ó»º´æÖÐÒÆ³ýÎļþ git reset HEAD

git reset HEAD ÃüÁîÓÃÓÚÈ¡ÏûÒÑ»º´æµÄÄÚÈÝ¡£

ÎÒÃÇÏȸ͝Îļþ README Îļþ£¬ÄÚÈÝÈçÏ£º

#README.md
##This is readme markdown file

HelloWorld.java ÎļþÐÞ¸ÄΪ£º

public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}

ÏÖÔÚÁ½¸öÎļþÐ޸ĺ󣬶¼Ìá½»µ½ÁË»º´æÇø£¬ÎÒÃÇÏÖÔÚҪȡÏûÆäÖÐÒ»¸öµÄ»º´æ£¬²Ù×÷ÈçÏ£º

$ git status -s
M HelloWorld.java
M README.md
$ git add .
$ git status -s
M HelloWorld.java
M README.md
$ git reset HEAD -- HelloWorld.java
Unstaged changes after reset:
M HelloWorld.java
$ git status -s
M HelloWorld.java
M README.md

ÏÖÔÚÄãÖ´ÐÐ git commit£¬Ö»»á½« README.md ÎļþµÄ¸Ä¶¯Ìá½»£¬¶ø HelloWorld.java ÊÇûÓеġ£

$ git commit -m "ÐÞ¸Ä"
[master ad5f6fe] ÐÞ¸Ä
1 file changed, 1 insertion(+), 1 deletion(-)
$ git status -s
M HelloWorld.java

¿ÉÒÔ¿´µ½ HelloWorld.java ÎļþµÄÐ޸IJ¢ÎªÌá½»¡£

ÕâʱÎÒÃÇ¿ÉÒÔʹÓÃÒÔÏÂÃüÁ HelloWorld.java µÄÐÞ¸ÄÌá½»£º

$ git commit -am "ÐÞ¸Ä HelloWorld.java Îļþ"
[master a055c08] ÐÞ¸Ä HelloWorld.java Îļþ
1 file changed, 1 insertion(+), 1 deletion(-)
$ git status
On branch master
nothing to commit, working directory clean

¼ò¶øÑÔÖ®£¬Ö´ÐÐ git reset HEAD ÒÔÈ¡Ïû֮ǰ git add Ìí¼Ó£¬µ«²»Ï£Íû°üº¬ÔÚÏÂÒ»Ìá½»¿ìÕÕÖеĻº´æ¡£

´Ó»º´æÒÔ¼°¹¤×÷Ŀ¼ɾ³ýÎļþ git rm

git rm »á½«ÌõÄ¿´Ó»º´æÇøÖÐÒÆ³ý¡£ÕâÓë git reset HEAD ½«ÌõĿȡÏû»º´æÊÇÓÐÇø±ðµÄ¡£ "È¡Ïû»º´æ"µÄÒâ˼¾ÍÊǽ«»º´æÇø»Ö¸´ÎªÎÒÃÇ×ö³öÐÞ¸Ä֮ǰµÄÑù×Ó¡£

ĬÈÏÇé¿öÏ£¬git rm file »á½«Îļþ´Ó»º´æÇøºÍÄãµÄÓ²ÅÌÖУ¨¹¤×÷Ŀ¼£©É¾³ý¡£

Èç¹ûÄãÒªÔÚ¹¤×÷Ŀ¼ÖÐÁôןÃÎļþ£¬¿ÉÒÔʹÓà git rm --cached£º

ÈçÎÒÃÇɾ³ý hello.phpÎļþ£º

$ git rm HelloWorld.java
rm 'HelloWorld.java'
$ ls
README.md

²»´Ó¹¤×÷ÇøÖÐɾ³ýÎļþ£º

$ git rm README.md --cached
rm 'README.md'
$ ls
README.md

Ð޸Ļº´æÖÐÎļþÃû git mv

git mv ÃüÁî×öµÃËùÓÐÊÂÇé¾ÍÊÇ git rm --cached ÃüÁîµÄ²Ù×÷£¬ ÖØÃüÃû´ÅÅÌÉϵÄÎļþ£¬È»ºóÔÙÖ´ÐÐ git add °ÑÐÂÎļþÌí¼Óµ½»º´æÇø¡£

ÎÒÃÇÏȰѸÕÒÆ³ýµÄ README Ìí¼Ó»ØÀ´£º

$ git add README.md

È»ºó¶ÔÆäÖØÃû:

$ git mv README.md README
$ ls
README

Git·ÖÖ§¹ÜÀí

¼¸ºõÿһÖÖ°æ±¾¿ØÖÆÏµÍ³¶¼ÒÔijÖÖÐÎʽ֧³Ö·ÖÖ§¡£Ê¹Ó÷ÖÖ§Òâζ×ÅÄã¿ÉÒÔ´Ó¿ª·¢Ö÷ÏßÉÏ·ÖÀ뿪À´£¬È»ºóÔÚ²»Ó°ÏìÖ÷ÏßµÄͬʱ¼ÌÐø¹¤×÷¡£

ÓÐÈ衄 Git µÄ·ÖÖ§Ä£ÐͳÆÎª"±ØÉ±¼¼ÌØÐÔ"£¬¶øÕýÊÇÒòΪËü£¬½« Git ´Ó°æ±¾¿ØÖÆÏµÍ³¼Ò×åÀïÇø·Ö³öÀ´¡£

´´½¨·ÖÖ§ÃüÁ

git branch [branch name]

Çл»·ÖÖ§ÃüÁî:

git checkout [branch name]

µ±ÄãÇл»·ÖÖ§µÄʱºò£¬Git »áÓø÷ÖÖ§µÄ×îºóÌá½»µÄ¿ìÕÕÌæ»»ÄãµÄ¹¤×÷Ŀ¼µÄÄÚÈÝ£¬ ËùÒÔ¶à¸ö·ÖÖ§²»ÐèÒª¶à¸öĿ¼¡£

ºÏ²¢·ÖÖ§ÃüÁî:

git merge

Äã¿ÉÒÔ¶à´ÎºÏ²¢µ½Í³Ò»·ÖÖ§£¬ Ò²¿ÉÒÔÑ¡ÔñÔںϲ¢Ö®ºóÖ±½Óɾ³ý±»²¢ÈëµÄ·ÖÖ§¡£

Git·ÖÖ§¹ÜÀí

Áгö·ÖÖ§ git branch

Áгö·ÖÖ§»ù±¾ÃüÁ

git branch

ûÓвÎÊýʱ£¬git branch »áÁгöÄãÔÚ±¾µØµÄ·ÖÖ§¡£

$ git branch
* master

´ËÀýµÄÒâ˼¾ÍÊÇ£¬ÎÒÃÇÓÐÒ»¸ö½Ð×ö"master"µÄ·ÖÖ§£¬²¢ÇҸ÷ÖÖ§Êǵ±Ç°·ÖÖ§¡£

µ±ÄãÖ´ÐÐ git init µÄʱºò£¬È±Ê¡Çé¿öÏ Git ¾Í»áΪÄã´´½¨"master"·ÖÖ§¡£

Èç¹ûÎÒÃÇÒªÊÖ¶¯´´½¨Ò»¸ö·ÖÖ§£¬²¢Çл»¹ýÈ¥¡£Ö´ÐÐ git branch (branchname) ¼´¿É¡£

$ git branch testing
$ git branch
* master
testing

ÏÖÔÚÎÒÃÇ¿ÉÒÔ¿´µ½£¬ÓÐÁËÒ»¸öзÖÖ§ testing¡£

µ±ÄãÒÔ´Ë·½Ê½ÔÚÉÏ´ÎÌá½»¸üÐÂÖ®ºó´´½¨ÁËзÖÖ§£¬Èç¹ûºóÀ´ÓÖÓиüÐÂÌá½»£¬ È»ºóÓÖÇл»µ½ÁË"testing"·ÖÖ§£¬Git ½«»¹Ô­ÄãµÄ¹¤×÷Ŀ¼µ½Äã´´½¨·Ö֧ʱºòµÄÑù×Ó

½ÓÏÂÀ´ÎÒÃǽ«ÑÝʾÈçºÎÇл»·ÖÖ§£¬ÎÒÃÇÓà git checkout (branch) Çл»µ½ÎÒÃÇÒªÐ޸ĵķÖÖ§¡£

$ ls
README
$ echo 'w3cschool.cc' > test.txt
$ git add .
$ git commit -m 'add test.txt'
[master 048598f] add test.txt
2 files changed, 1 insertion(+), 3 deletions(-)
delete mode 100644 hello.php
create mode 100644 test.txt
$ ls
README test.txt
$ git checkout testing
Switched to branch 'testing'
$ ls
README.md HelloWorld.java

µ±ÎÒÃÇÇл»µ½"testing"·ÖÖ§µÄʱºò£¬ÎÒÃÇÌí¼ÓµÄÐÂÎļþtest.txt±»ÒƳýÁË, Ô­À´±»É¾³ýµÄÎļþhello.phpÎļþÓÖ³öÏÖÁË¡£Çл»»Ø"master"·ÖÖ§µÄʱºò£¬ËüÃÇÓÐÖØÐ³öÏÖÁË¡£

$ git checkout master
Switched to branch 'master'
$ ls
README test.txt

Ê×ÏÈÎÒÃÇÔÚmaster·ÖÖ§ÖÐÔÚÌí¼ÓÒ»¸öÐÂÎļþtest2.txt:

$ touch test2.txt
$ git add test2.txt
$ git commit -m 'add test2.txt'
$ ls
README test.txt test2.txt

ÎÒÃÇÒ²¿ÉÒÔʹÓà git checkout -b (branchname) ÃüÁîÀ´´´½¨Ð·ÖÖ§²¢Á¢¼´Çл»µ½¸Ã·ÖÖ§Ï£¬´Ó¶øÔڸ÷ÖÖ§ÖвÙ×÷¡£

$ git checkout -b newtest
Switched to a new branch 'newtest'
$ git rm test2.txt
rm 'test2.txt'
$ ls
README test.txt
$ git commit -am 'removed test2.txt'
[newtest 556f0a0] removed test2.txt
1 file changed, 1 deletion(-)
delete mode 100644 test2.txt
$ git checkout master
Switched to branch 'master'
$ ls
README test.txt test2.txt

ÈçÄãËù¼û£¬ÎÒÃÇ´´½¨ÁËÒ»¸ö·ÖÖ§£¬Ôڸ÷ÖÖ§µÄÉÏÏÂÎÄÖÐÒÆ³ýÁËһЩÎļþ£¬È»ºóÇл»»ØÎÒÃǵÄÖ÷·ÖÖ§£¬ÄÇЩÎļþÓÖ»ØÀ´ÁË¡£

ʹÓ÷ÖÖ§½«¹¤×÷ÇзֿªÀ´£¬´Ó¶øÈÃÎÒÃÇÄܹ»ÔÚ²»Í¬ÉÏÏÂÎÄÖÐ×öÊ£¬²¢À´»ØÇл»¡£

ɾ³ý·ÖÖ§ git branch -d

ɾ³ý·ÖÖ§ÃüÁ

git branch -d [branch name]

ÀýÈçÎÒÃÇҪɾ³ý"testing"·ÖÖ§£º

$ git branch
* master
newtest
testing
$ git branch -D testing
Deleted branch testing (was 84b13b9).
$ git branch
* master
newtest

·ÖÖ§ºÏ²¢ git merge

Ò»µ©Ä³·ÖÖ§ÓÐÁ˶ÀÁ¢ÄÚÈÝ£¬ÄãÖÕ¾¿»áÏ£Íû½«ËüºÏ²¢»Øµ½ÄãµÄÖ÷·ÖÖ§¡£ Äã¿ÉÒÔʹÓÃÒÔÏÂÃüÁÈκηÖÖ§ºÏ²¢µ½µ±Ç°·ÖÖ§ÖÐÈ¥£º

git merge

$ git branch
* master
newtest
$ ls
README test.txt test2.txt
$ git merge newtest
Updating a055c08..202199d
Fast-forward
HelloWorld.java | 7 -------
README.md => README | 0
test.txt | 1 +
3 files changed, 1 insertion(+), 7 deletions(-)
delete mode 100644 HelloWorld.java
rename README.md => README (100%)
create mode 100644 test.txt
$ ls
README test.txt

ÒÔÉÏʵÀýÖÐÎÒÃǽ« newtest ·ÖÖ§ºÏ²¢µ½Ö÷·ÖÖ§È¥£¬test2.txt Îļþ±»É¾³ý¡£

ºÏ²¢³åÍ»

ºÏ²¢²¢²»½ö½öÊǼòµ¥µÄÎļþÌí¼Ó¡¢ÒƳýµÄ²Ù×÷£¬Git Ò²»áºÏ²¢Ð޸ġ£

$ git branch
* master
newtest
$ cat test.txt
w3cschool.cc

Ê×ÏÈ£¬ÎÒÃÇ´´½¨Ò»¸ö½Ð×ö"change_site"µÄ·ÖÖ§£¬Çл»¹ýÈ¥£¬ÎÒÃǽ«ÄÚÈݸÄΪ www.w3cschool.cc ¡£

$ git checkout -b change_site
Switched to a new branch 'change_site'
$ vim test.txt
$ head -1 test.txt
www.w3cschool.cc
$ git commit -am 'changed the site'
[change_site d7e7346] changed the site
1 file changed, 1 insertion(+), 1 deletion(-)

½«Ð޸ĵÄÄÚÈÝÌá½»µ½ "change_site" ·ÖÖ§ÖС£ ÏÖÔÚ£¬¼ÙÈçÇл»»Ø "master" ·ÖÖ§ÎÒÃÇ¿ÉÒÔ¿´ÄÚÈݻָ´µ½ÎÒÃÇÐÞ¸ÄǰµÄ£¬ÎÒÃÇÔÙ´ÎÐÞ¸Ätest.txtÎļþ¡£

$ git checkout master
Switched to branch 'master'
$ head -1 test.txt
w3cschool.cc
$ vim test.txt
$ cat test.txt
w3cschool.cc
ÐÂÔö¼ÓÒ»ÐÐ
$ git diff
diff --git a/test.txt b/test.txt
index 704cce7..f84c2a4 100644
--- a/test.txt
+++ b/test.txt
@@ -1 +1,2 @@
w3cschool.cc
+ÐÂÔö¼ÓÒ»ÐÐ
$ git commit -am 'ÐÂÔö¼ÓÒ»ÐÐ'
[master 14b4dca] ÐÂÔö¼ÓÒ»ÐÐ
1 file changed, 1 insertion(+)

ÏÖÔÚÕâЩ¸Ä±äÒѾ­¼Ç¼µ½ÎÒµÄ "master" ·ÖÖ§ÁË¡£½ÓÏÂÀ´ÎÒÃǽ« "change_site" ·ÖÖ§ºÏ²¢¹ýÀ´¡£

$ git merge change_site
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.
$ cat test.txt
<<<<<<< HEAD
w3cschool.cc
ÐÂÔö¼ÓÒ»ÐÐ
=======
www.w3cschool.cc
>>>>>>> change_site

ÎÒÃǽ«Ç°Ò»¸ö·ÖÖ§ºÏ²¢µ½ "master" ·ÖÖ§£¬Ò»¸öºÏ²¢³åÍ»¾Í³öÏÖÁË£¬½ÓÏÂÀ´ÎÒÃÇÐèÒªÊÖ¶¯È¥ÐÞ¸ÄËü¡£

$ vim test.txt
$ cat test.txt
www.w3cschool.cc
ÐÂÔö¼ÓÒ»ÐÐ
$ git diff
diff --cc test.txt
index f84c2a4,bccb7c2..0000000
--- a/test.txt
+++ b/test.txt
@@@ -1,2 -1,1 +1,2 @@@
- w3cschool.cc
+ www.w3cschool.cc
+ÐÂÔö¼ÓÒ»ÐÐ

ÔÚ Git ÖУ¬ÎÒÃÇ¿ÉÒÔÓà git add Òª¸æËß Git Îļþ³åÍ»ÒѾ­½â¾ö

$ git status -s
UU test.txt
$ git add test.txt
$ git status -s
M test.txt
$ git commit
[master 88afe0e] Merge branch 'change_site'

Git ²é¿´Ìá½»ÀúÊ· git log

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

Õë¶ÔÎÒÃÇǰһÕ½ڵIJÙ×÷£¬Ê¹Óà git log ÃüÁîÁгöÀúÊ·Ìá½»¼Ç¼ÈçÏ£º

$ git log
commit 2b5970dc2a936649791afc8cedb6dbaee46d2176
Merge: e2714c9 d17a0a0
Author: Wyndam <only.night@qq.com>
Date: Thu Oct 20 17:00:57 2016 +0800
Merge branch 'change_site'
commit e2714c9ecf376efefc8d149ac219a6e98c80790b
Author: Wyndam <only.night@qq.com>
Date: Thu Oct 20 16:58:09 2016 +0800
ÐÂÔö¼ÓÒ»ÐÐ
commit d17a0a0065e1e1d1c1078cfabf18f2c8491f0b7c
Author: Wyndam <only.night@qq.com>
Date: Thu Oct 20 16:54:13 2016 +0800
change the site
commit 202199d023f307e74229e46ee90fc351d2e6d4f6
Author: Wyndam <only.night@qq.com>
Date: Thu Oct 20 15:50:55 2016 +0800
add test.txt file
commit a055c0816bc94a9abe21ffe4a4014851943ea139
Author: Wyndam <only.night@qq.com>
Date: Thu Oct 20 15:35:50 2016 +0800
ÐÞ¸Ä HelloWorld.java Îļþ
commit ad5f6fe0474c52c464e94cd41faf45e705445847
Author: Wyndam <only.night@qq.com>
Date: Thu Oct 20 15:34:16 2016 +0800
ÐÞ¸Ä
commit c2c167c36533768be8fc91e4cb3ba0b7d328a074
Author: Wyndam <only.night@qq.com>
Date: Thu Oct 20 15:24:41 2016 +0800
ÐÞ¸ÄHelloWorld.javaÎļþ
commit f9393bf0e7f701248b56c97827a9d101e74b3952
Author: Wyndam <only.night@qq.com>
Date: Thu Oct 20 15:21:02 2016 +0800
third commit
``
commit 316fafcf38bb2eb600f4226345ea09a4e37d9ec4
Author: Wyndam <only.night@qq.com>
Date: Thu Oct 20 15:18:58 2016 +0800
second commit
commit fdd5c53457270c10a163a0cf3fcfd9027e6e1ecb
Author: Wyndam <only.night@qq.com>
Date: Thu Oct 20 15:10:43 2016 +0800
inital commit

ÎÒÃÇ¿ÉÒÔÓà --oneline Ñ¡ÏîÀ´²é¿´ÀúÊ·¼Ç¼µÄ¼ò½àµÄ°æ±¾¡£

$ git log --oneline
2b5970d Merge branch 'change_site'
e2714c9 ÐÂÔö¼ÓÒ»ÐÐ
d17a0a0 change the site
202199d add test.txt file
a055c08 ÐÞ¸Ä HelloWorld.java Îļþ
ad5f6fe ÐÞ¸Ä
c2c167c ÐÞ¸ÄHelloWorld.javaÎļþ
f9393bf third commit ``
316fafc second commit
fdd5c53 inital commit

Õâ¸æËßÎÒÃǵÄÊÇ£¬´ËÏîÄ¿µÄ¿ª·¢ÀúÊ·¡£

ÎÒÃÇ»¹¿ÉÒÔÓà --graph Ñ¡Ï²é¿´ÀúÊ·ÖÐʲôʱºò³öÏÖÁË·ÖÖ§¡¢ºÏ²¢¡£ÒÔÏÂΪÏàͬµÄÃüÁ¿ªÆôÁËÍØÆËͼѡÏ

$ git log --oneline --graph
* 2b5970d Merge branch 'change_site'
|\
| * d17a0a0 change the site
* | e2714c9 ÐÂÔö¼ÓÒ»ÐÐ
|/
* 202199d add test.txt file
* a055c08 ÐÞ¸Ä HelloWorld.java Îļþ
* ad5f6fe ÐÞ¸Ä
* c2c167c ÐÞ¸ÄHelloWorld.javaÎļþ
* f9393bf third commit ``
* 316fafc second commit
* fdd5c53 inital commit

ÏÖÔÚÎÒÃÇ¿ÉÒÔ¸üÇå³þÃ÷Á˵ؿ´µ½ºÎʱ¹¤×÷·Ö²æ¡¢ÓÖºÎʱ¹é²¢¡£

ÄãÒ²¿ÉÒÔÓà '--reverse'²ÎÊýÀ´ÄæÏòÏÔʾËùÓÐÈÕÖ¾¡£

$ git log --oneline --reverse
fdd5c53 inital commit
316fafc second commit
f9393bf third commit ``
c2c167c ÐÞ¸ÄHelloWorld.javaÎļþ
ad5f6fe ÐÞ¸Ä
a055c08 ÐÞ¸Ä HelloWorld.java Îļþ
202199d add test.txt file
d17a0a0 change the site
e2714c9 ÐÂÔö¼ÓÒ»ÐÐ
2b5970d Merge branch 'change_site'

Èç¹ûÖ»Ïë²éÕÒÖ¸¶¨Óû§µÄÌá½»ÈÕÖ¾¿ÉÒÔʹÓÃÃüÁgit log --author , ÀýÈ磬±È·½ËµÎÒÃÇÒªÕÒ Git Ô´ÂëÖÐ Linus Ìá½»µÄ²¿·Ö£º

$ git log --author=Linus --oneline -5
81b50f3 Move 'builtin-*' into a 'builtin/' subdirectory
3bb7256 make "index-pack" a built-in
377d027 make "git pack-redundant" a built-in
b532581 make "git unpack-file" a built-in
112dd51 make "mktag" a built-in

Èç¹ûÄãÒªÖ¸¶¨ÈÕÆÚ£¬¿ÉÒÔÖ´Ðм¸¸öÑ¡Ï--since ºÍ --before£¬µ«ÊÇÄãÒ²¿ÉÒÔÓà --until ºÍ --after¡£

ÀýÈ磬Èç¹ûÎÒÒª¿´ Git ÏîÄ¿ÖÐÈýÖÜǰÇÒÔÚËÄÔÂÊ®°ËÈÕÖ®ºóµÄËùÓÐÌá½»£¬ÎÒ¿ÉÒÔÖ´ÐÐÕâ¸ö£¨ÎÒ»¹ÓÃÁË --no-merges Ñ¡ÏîÒÔÒþ²ØºÏ²¢Ìá½»£©£º

$ git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges
5469e2d Git 1.7.1-rc2
d43427d Documentation/remote-helpers: Fix typos and improve language
272a36b Fixup: Second argument may be any arbitrary string
b6c8d2d Documentation/remote-helpers: Add invocation section
5ce4f4e Documentation/urls: Rewrite to accomodate transport::address
00b84e9 Documentation/remote-helpers: Rewrite description
03aa87e Documentation: Describe other situations where -z affects git diff
77bc694 rebase-interactive: silence warning when no commits rewritten
636db2c t3301: add tests to use --format="%N"

Git ±êÇ© git tag

Èç¹ûÄã´ïµ½Ò»¸öÖØÒªµÄ½×¶Î£¬²¢Ï£ÍûÓÀÔ¶¼ÇסÄǸöÌØ±ðµÄÌá½»¿ìÕÕ£¬Äã¿ÉÒÔʹÓà git tag ¸øËü´òÉϱêÇ©¡£

±ÈÈç˵£¬ÎÒÃÇÏëΪÎÒÃÇµÄ w3cschoolcc ÏîÄ¿·¢²¼Ò»¸ö"1.0"°æ±¾¡£ ÎÒÃÇ¿ÉÒÔÓà git tag -a v1.0 ÃüÁî¸ø×îÐÂÒ»´ÎÌá½»´òÉÏ£¨HEAD£©"v1.0"µÄ±êÇ©¡£

-a Ñ¡ÏîÒâΪ"´´½¨Ò»¸ö´ø×¢½âµÄ±êÇ©"¡£ ²»Óà -a Ñ¡ÏîÒ²¿ÉÒÔÖ´Ðе쬵«Ëü²»»á¼Ç¼Õâ±êÇ©ÊÇɶʱºò´òµÄ£¬Ë­´òµÄ£¬Ò²²»»áÈÃÄãÌí¼Ó¸ö±êÇ©µÄ×¢½â¡£ ÎÒÍÆ¼öÒ»Ö±´´½¨´ø×¢½âµÄ±êÇ©¡£

$ git tag -a v1.0

µ±ÄãÖ´ÐÐ git tag -a ÃüÁîʱ£¬Git »á´ò¿ªÄãµÄ±à¼­Æ÷£¬ÈÃÄãдһ¾ä±êǩע½â£¬¾ÍÏñÄã¸øÌύдע½âÒ»Ñù¡£

ÏÖÔÚ£¬×¢Òâµ±ÎÒÃÇÖ´ÐÐ git log --decorate ʱ£¬ÎÒÃÇ¿ÉÒÔ¿´µ½ÎÒÃǵıêÇ©ÁË£º

$ git log --oneline --graph --decorate
* 2b5970d (HEAD -> master, tag: v1.0) Merge branch 'change_site'
|\
| * d17a0a0 (change_site) change the site
* | e2714c9 ÐÂÔö¼ÓÒ»ÐÐ
|/
* 202199d (newtest) add test.txt file
* a055c08 ÐÞ¸Ä HelloWorld.java Îļþ
* ad5f6fe ÐÞ¸Ä
* c2c167c ÐÞ¸ÄHelloWorld.javaÎļþ
* f9393bf third commit ``
* 316fafc second commit
* fdd5c53 inital commit

Èç¹ûÎÒÃÇÍüÁ˸øÄ³¸öÌá½»´ò±êÇ©£¬ÓÖ½«Ëü·¢²¼ÁË£¬ÎÒÃÇ¿ÉÒÔ¸øËü×·¼Ó±êÇ©¡£

ÀýÈ磬¼ÙÉèÎÒÃÇ·¢²¼ÁËÌá½» 85fc7e7(ÉÏÃæÊµÀý×îºóÒ»ÐÐ)£¬µ«ÊÇÄÇʱºòÍüÁ˸øËü´ò±êÇ©¡£ ÎÒÃÇÏÖÔÚÒ²¿ÉÒÔ£º

$ git tag -a v0.9 a055c08
$ git log --oneline --graph --decorate
* 2b5970d (HEAD -> master, tag: v1.0) Merge branch 'change_site'
|\
| * d17a0a0 (change_site) change the site
* | e2714c9 ÐÂÔö¼ÓÒ»ÐÐ
|/
* 202199d (newtest) add test.txt file
* a055c08 (tag: v0.9) ÐÞ¸Ä HelloWorld.java Îļþ
* ad5f6fe ÐÞ¸Ä
* c2c167c ÐÞ¸ÄHelloWorld.javaÎļþ
* f9393bf third commit ``
* 316fafc second commit
* fdd5c53 inital commit

Èç¹ûÎÒÃÇÒª²é¿´ËùÓбêÇ©¿ÉÒÔʹÓÃÒÔÏÂÃüÁ

$ git tag
v0.9
v1.0

Ö¸¶¨±êÇ©ÐÅÏ¢ÃüÁ

git tag -a <tagname> -m "w3cschool.cc±êÇ©"

PGPÇ©Ãû±êÇ©ÃüÁ

git tag -s <tagname> -m "w3cschool.cc±êÇ©"

Git Ô¶³Ì²Ö¿â

Git ²¢²»Ïñ SVN ÄÇÑùÓиöÖÐÐÄ·þÎñÆ÷¡£

ĿǰÎÒÃÇʹÓõ½µÄ Git ÃüÁî¶¼ÊÇÔÚ±¾µØÖ´ÐУ¬Èç¹ûÄãÏëͨ¹ý Git ·ÖÏíÄãµÄ´úÂë»òÕßÓëÆäËû¿ª·¢ÈËÔ±ºÏ×÷¡£ Äã¾ÍÐèÒª½«Êý¾Ý·Åµ½Ò»Ì¨ÆäËû¿ª·¢ÈËÔ±Äܹ»Á¬½ÓµÄ·þÎñÆ÷ÉÏ¡£

Ìí¼ÓÔ¶³Ì¿â git remote add

ÒªÌí¼ÓÒ»¸öеÄÔ¶³Ì²Ö¿â£¬¿ÉÒÔÖ¸¶¨Ò»¸ö¼òµ¥µÄÃû×Ö£¬ÒԱ㽫À´ÒýÓÃ,ÃüÁî¸ñʽÈçÏ£º

git remote add [shortname] [url]

±¾ÀýÒÔGithubΪÀý×÷ΪԶ³Ì²Ö¿â£¬Èç¹ûÄãûÓÐGithub¿ÉÒÔÔÚ¹ÙÍøhttps://github.com/×¢²á¡£

ÓÉÓÚÄãµÄ±¾µØGit²Ö¿âºÍGitHub²Ö¿âÖ®¼äµÄ´«ÊäÊÇͨ¹ýSSH¼ÓÃܵģ¬ËùÒÔÎÒÃÇÐèÒªÅäÖÃÑéÖ¤ÐÅÏ¢£º

ʹÓÃÒÔÏÂÃüÁîÉú³ÉSSH Key£º

$ ssh-keygen -t rsa -C "youremail@example.com"

ºóÃæµÄyour_email@youremail.com¸ÄΪÄãÔÚgithubÉÏ×¢²áµÄÓÊÏ䣬֮ºó»áÒªÇóÈ·ÈÏ·¾¶ºÍÊäÈëÃÜÂ룬ÎÒÃÇÕâʹÓÃĬÈϵÄһ·»Ø³µ¾ÍÐС£³É¹¦µÄ»°»áÔÚ~/ÏÂÉú³É.sshÎļþ¼Ð£¬½øÈ¥£¬´ò¿ªid_rsa.pub£¬¸´ÖÆÀïÃæµÄkey¡£

»Øµ½githubÉÏ£¬½øÈë Account Settings£¨ÕË»§ÅäÖã©£¬×ó±ßÑ¡ÔñSSH Keys£¬Add SSH Key,titleËæ±ãÌճÌùÔÚÄãµçÄÔÉÏÉú³ÉµÄkey¡£

Github SSHÉèÖÃ

ΪÁËÑéÖ¤ÊÇ·ñ³É¹¦£¬ÊäÈëÒÔÏÂÃüÁ

$ ssh -T git@github.com
Hi onlynight! You've successfully authenticated, but GitHub does not provide shell access.

Êä³öÒÔÉϽá¹ûÖ¤Ã÷ÒѾ­ÕýÈ·ÅäÖÃÃÜÔ¿¡£

Ö®ºóµÇ¼ºóµã»÷" New repository " ÈçÏÂͼËùʾ£º

н¨Ô¶³Ì²Ö¿â1

Ö®ºóÔÚÔÚRepository name ÌîÈë GitAdd(Ô¶³Ì²Ö¿âÃû) £¬descriptionÖÐÌîдÃèÊö"git add test"£¬ÆäËû±£³ÖĬÈÏÉèÖ㬵ã»÷"Create repository"°´Å¥£¬¾Í³É¹¦µØ´´½¨ÁËÒ»¸öеÄGit²Ö¿â£º

н¨Ô¶³Ì²Ö¿â2

´´½¨³É¹¦ºó£¬ÏÔʾÈçÏÂÐÅÏ¢£º

н¨Ô¶³Ì²Ö¿âÍê³É

ÒÔÉÏÐÅÏ¢¸æËßÎÒÃÇ¿ÉÒÔ´ÓÕâ¸ö²Ö¿â¿Ë¡³öеIJֿ⣬Ҳ¿ÉÒ԰ѱ¾µØ²Ö¿âµÄÄÚÈÝÍÆË͵½GitHub²Ö¿â¡£

ÏÖÔÚ£¬ÎÒÃǸù¾ÝGitHubµÄÌáʾ£¬ÔÚ±¾µØµÄ²Ö¿âÏÂÔËÐÐÃüÁ

$ ls
README test.txt
$ git remote add origin git@github.com:onlynight/GitAdd.git
$ git push -u origin master
Counting objects: 26, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (20/20), done.
Writing objects: 100% (26/26), 2.44 KiB | 0 bytes/s, done.
Total 26 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), done.
To git@github.com:onlynight/GitAdd.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.

²é¿´µ±Ç°µÄÔ¶³Ì¿â git remote

Òª²é¿´µ±Ç°ÅäÖÃÓÐÄÄЩԶ³Ì²Ö¿â£¬¿ÉÒÔÓÃÃüÁ

git remote

$ git remote
origin
$ git remote -v

Ö´ÐÐʱ¼ÓÉÏ -v ²ÎÊý£¬Ä㻹¿ÉÒÔ¿´µ½Ã¿¸ö±ðÃûµÄʵ¼ÊÁ´½ÓµØÖ·¡£

ÌáȡԶ³Ì²Ö¿â

Git ÓÐÁ½¸öÃüÁîÓÃÀ´ÌáȡԶ³Ì²Ö¿âµÄ¸üС£

1. ´ÓÔ¶³Ì²Ö¿âÏÂÔØÐ·ÖÖ§ÓëÊý¾Ý£º git fetch

git fetch

¸ÃÃüÁîÖ´ÐÐÍêºóÐèÒªÖ´ÐÐgit merge Ô¶³Ì·ÖÖ§µ½ÄãËùÔڵķÖÖ§¡£

2. ´ÓÔ¶¶Ë²Ö¿âÌáÈ¡Êý¾Ý²¢³¢ÊԺϲ¢µ½µ±Ç°·ÖÖ§£º git pull

git pull

¸ÃÃüÁî¾ÍÊÇÔÚÖ´ÐÐ git fetch Ö®ºó½ô½Ó×ÅÖ´ÐÐ git merge Ô¶³Ì·ÖÖ§µ½ÄãËùÔÚµÄÈÎÒâ·ÖÖ§¡£

¼ÙÉèÄãÅäÖúÃÁËÒ»¸öÔ¶³Ì²Ö¿â£¬²¢ÇÒÄãÏëÒªÌáÈ¡¸üеÄÊý¾Ý£¬Äã¿ÉÒÔÊ×ÏÈÖ´ÐÐ git fetch [alias] ¸æËß Git È¥»ñÈ¡ËüÓÐÄãûÓеÄÊý¾Ý£¬È»ºóÄã¿ÉÒÔÖ´ÐÐ git merge [alias]/[branch] ÒÔ½«·þÎñÆ÷ÉϵÄÈκθüУ¨¼ÙÉèÓÐÈËÕâʱºòÍÆË͵½·þÎñÆ÷ÁË£©ºÏ²¢µ½ÄãµÄµ±Ç°·ÖÖ§¡£

½ÓÏÂÀ´ÎÒÃÇÔÚ Github Éϵã»÷"test.txt" ²¢ÔÚÏßÐÞ¸ÄËü¡£Ö®ºóÎÒÃÇÔÚ±¾µØ¸üÐÂÐ޸ġ£

$ git fetch origin
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From github.com:onlynight/GitAdd
774112b..37be49b master -> origin/master

ÒÔÉÏÐÅÏ¢"774112b..37be49b master -> origin/master" ˵Ã÷ master ·ÖÖ§Òѱ»¸üУ¬ÎÒÃÇ¿ÉÒÔʹÓÃÒÔÏÂÃüÁ¸üÐÂͬ²½µ½±¾µØ£º

$ git merge origin/master
Updating 774112b..37be49b
Fast-forward
test.txt | 1 +
1 file changed, 1 insertion(+)

ÍÆË͵½Ô¶³Ì²Ö¿â git push

ÍÆËÍÄãµÄзÖÖ§ÓëÊý¾Ýµ½Ä³¸öÔ¶¶Ë²Ö¿âÃüÁî:

git push [alias] [branch]

ÒÔÉÏÃüÁÄãµÄ [branch] ·ÖÖ§ÍÆËͳÉΪ [alias] Ô¶³Ì²Ö¿âÉ쵀 [branch] ·ÖÖ§£¬ÊµÀýÈçÏ¡£

$ git push origin master
Everything up-to-date

ɾ³ýÔ¶³Ì·ÖÖ§ git push <alias> :<branch name>

×¢Ò⣺Èç¹ûҪɾ³ýÔ¶³Ì·Ö֧ͬÑùÒ²ÊÇʹÓÃpushÃüÁÔÚ·Ö֧ǰ¼ÓÉÏ":"±íʾɾ³ýÔ¶³Ì·ÖÖ§£¬´úÂëÈçÏ£º

$ git push origin :<branch name>

ɾ³ý±¾µØ²Ö¿âµÄÔ¶³Ì²Ö¿âÁ´½Ó git remote rm

ɾ³ýÔ¶³Ì²Ö¿âÄã¿ÉÒÔʹÓÃÃüÁ

git remote rm [alias]

$ git remote -v
origin git@github.com:onlynight/GitAdd.git (fetch)
origin git@github.com:onlynight/GitAdd.git (push)
$ git remote -v
origin git@github.com:onlynight/GitAdd.git (fetch)
origin git@github.com:onlynight/GitAdd.git (push)
origin2 git@github.com:onlnynight/GitAdd.git (fetch)
origin2 git@github.com:onlnynight/GitAdd.git (push)
$ git remote rm origin2
$ git remote -v
origin git@github.com:onlynight/GitAdd.git (fetch)
origin git@github.com:onlynight/GitAdd.git (push)
   
3244 ´Îä¯ÀÀ       31
Ïà¹ØÎÄÕÂ

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

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

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