GitʹÓý̳Ì
GitÊÇʲô
GitÊÇÒ»¸ö¿ªÔ´µÄ·Ö²¼Ê½°æ±¾¿ØÖÆÏµÍ³£¬ÓÃÓÚÃô½Ý¸ßЧµØ´¦ÀíÈκλòС»ò´óµÄÏîÄ¿¡£
GitÊÇ Linus Torvalds ΪÁ˰ïÖú¹ÜÀí Linux Äں˿ª·¢¶ø¿ª·¢µÄÒ»¸ö¿ª·ÅÔ´ÂëµÄ°æ±¾¿ØÖÆÈí¼þ¡£
GitÓë³£Óõİ汾¿ØÖƹ¤¾ß CVS, Subversion µÈ²»Í¬£¬Ëü²ÉÓÃÁË·Ö²¼Ê½°æ±¾¿âµÄ·½Ê½£¬²»±Ø·þÎñÆ÷¶ËÈí¼þÖ§³Ö¡£
GitÓëSVNµÄÇø±ð
GIT²»½ö½öÊǸö°æ±¾¿ØÖÆÏµÍ³£¬ËüÒ²ÊǸöÄÚÈݹÜÀíϵͳ(CMS),¹¤×÷¹ÜÀíϵͳµÈ¡£
Èç¹ûÄãÊÇÒ»¸ö¾ßÓÐʹÓÃSVN±³¾°µÄÈË£¬ÄãÐèÒª×öÒ»¶¨µÄ˼Ïëת»»£¬À´ÊÊÓ¦GITÌṩµÄһЩ¸ÅÄîºÍÌØÕ÷¡£
Git Óë SVN Çø±ðµã£º
- GITÊÇ·Ö²¼Ê½µÄ£¬SVN²»ÊÇ£ºÕâÊÇGITºÍÆäËü·Ç·Ö²¼Ê½µÄ°æ±¾¿ØÖÆÏµÍ³£¬ÀýÈçSVN£¬CVSµÈ£¬×îºËÐĵÄÇø±ð¡£
- GIT°ÑÄÚÈݰ´ÔªÊý¾Ý·½Ê½´æ´¢£¬¶øSVNÊǰ´Îļþ£ºËùÓеÄ×ÊÔ´¿ØÖÆÏµÍ³¶¼ÊǰÑÎļþµÄÔªÐÅÏ¢Òþ²ØÔÚÒ»¸öÀàËÆ.svn,.cvsµÈµÄÎļþ¼ÐÀï¡£
- GIT·ÖÖ§ºÍSVNµÄ·ÖÖ§²»Í¬£º·ÖÖ§ÔÚSVNÖÐÒ»µã²»Ìر𣬾ÍÊǰ汾¿âÖеÄÁíÍâµÄÒ»¸öĿ¼¡£
- GITûÓÐÒ»¸öÈ«¾ÖµÄ°æ±¾ºÅ£¬¶øSVNÓУºÄ¿Ç°ÎªÖ¹ÕâÊǸúSVNÏà±ÈGITȱÉÙµÄ×î´óµÄÒ»¸öÌØÕ÷¡£
- 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 µÄ¹¤×÷Á÷³Ì¡£
Ò»°ã¹¤×÷Á÷³ÌÈçÏ£º
- ¿Ë¡ Git ×ÊÔ´×÷Ϊ¹¤×÷Ŀ¼¡£
- ÔÚ¿Ë¡µÄ×ÊÔ´ÉÏÌí¼Ó»òÐÞ¸ÄÎļþ¡£
- Èç¹ûÆäËûÈËÐÞ¸ÄÁË£¬Äã¿ÉÒÔ¸üÐÂ×ÊÔ´¡£
- ÔÚÌύǰ²é¿´Ð޸ġ£
- Ìá½»Ð޸ġ£
- ÔÚÐÞ¸ÄÍê³Éºó£¬Èç¹û·¢ÏÖ´íÎ󣬿ÉÒÔ³·»ØÌá½»²¢ÔÙ´ÎÐ޸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 Ŀ¼¡£
ʹÓÃÎÒÃÇÖ¸¶¨Ä¿Â¼×÷ΪGit²Ö¿â¡£
³õʼ»¯ºó£¬»áÔÚ 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> <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 ²Ö¿âÁË£¬ËùÓÐÓйØÄãµÄ´ËÏîÄ¿µÄ¿ìÕÕÊý¾Ý¶¼´æ·ÅÔÚÕâÀï¡£
git clone
ʹÓà git clone ¿½±´Ò»¸ö Git ²Ö¿âµ½±¾µØ£¬ÈÃ×Ô¼ºÄܹ»²é¿´¸ÃÏîÄ¿£¬»òÕß½øÐÐÐ޸ġ£
Èç¹ûÄãÐèÒªÓëËûÈ˺Ï×÷Ò»¸öÏîÄ¿£¬»òÕßÏëÒª¸´ÖÆÒ»¸öÏîÄ¿£¬¿´¿´´úÂ룬Äã¾Í¿ÉÒÔ¿Ë¡ÄǸöÏîÄ¿¡£ Ö´ÐÐÃüÁ
[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 Ñ¡ÏîÌø¹ýÕâÒ»²½¡£ÃüÁî¸ñʽÈçÏ£º
ÎÒÃÇÏÈÐÞ¸Ä 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 mv README.md README
$ ls
README |
Git·ÖÖ§¹ÜÀí
¼¸ºõÿһÖÖ°æ±¾¿ØÖÆÏµÍ³¶¼ÒÔijÖÖÐÎʽ֧³Ö·ÖÖ§¡£Ê¹Ó÷ÖÖ§Òâζ×ÅÄã¿ÉÒÔ´Ó¿ª·¢Ö÷ÏßÉÏ·ÖÀ뿪À´£¬È»ºóÔÚ²»Ó°ÏìÖ÷ÏßµÄͬʱ¼ÌÐø¹¤×÷¡£
ÓÐÈ衄 Git µÄ·ÖÖ§Ä£ÐͳÆÎª"±ØÉ±¼¼ÌØÐÔ"£¬¶øÕýÊÇÒòΪËü£¬½« Git ´Ó°æ±¾¿ØÖÆÏµÍ³¼Ò×åÀïÇø·Ö³öÀ´¡£
´´½¨·ÖÖ§ÃüÁ
Çл»·ÖÖ§ÃüÁî:
git checkout [branch name] |
µ±ÄãÇл»·ÖÖ§µÄʱºò£¬Git »áÓø÷ÖÖ§µÄ×îºóÌá½»µÄ¿ìÕÕÌæ»»ÄãµÄ¹¤×÷Ŀ¼µÄÄÚÈÝ£¬ ËùÒÔ¶à¸ö·ÖÖ§²»ÐèÒª¶à¸öĿ¼¡£
ºÏ²¢·ÖÖ§ÃüÁî:
Äã¿ÉÒÔ¶à´ÎºÏ²¢µ½Í³Ò»·ÖÖ§£¬ Ò²¿ÉÒÔÑ¡ÔñÔںϲ¢Ö®ºóÖ±½Óɾ³ý±»²¢ÈëµÄ·ÖÖ§¡£
Git·ÖÖ§¹ÜÀí
Áгö·ÖÖ§ git branch
Áгö·ÖÖ§»ù±¾ÃüÁ
ûÓвÎÊýʱ£¬git branch »áÁгöÄãÔÚ±¾µØµÄ·ÖÖ§¡£
´ËÀýµÄÒâ˼¾ÍÊÇ£¬ÎÒÃÇÓÐÒ»¸ö½Ð×ö"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 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 ÃüÁîʱ£¬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 -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
origin
$ git remote -v |
Ö´ÐÐʱ¼ÓÉÏ -v ²ÎÊý£¬Ä㻹¿ÉÒÔ¿´µ½Ã¿¸ö±ðÃûµÄʵ¼ÊÁ´½ÓµØÖ·¡£
ÌáȡԶ³Ì²Ö¿â
Git ÓÐÁ½¸öÃüÁîÓÃÀ´ÌáȡԶ³Ì²Ö¿âµÄ¸üС£
1. ´ÓÔ¶³Ì²Ö¿âÏÂÔØÐ·ÖÖ§ÓëÊý¾Ý£º git fetch
¸ÃÃüÁîÖ´ÐÐÍêºóÐèÒªÖ´ÐÐgit merge Ô¶³Ì·ÖÖ§µ½ÄãËùÔڵķÖÖ§¡£
2. ´ÓÔ¶¶Ë²Ö¿âÌáÈ¡Êý¾Ý²¢³¢ÊԺϲ¢µ½µ±Ç°·ÖÖ§£º 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 -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) | |