#gitskills前言 ##工具
- MarkDownPad
- 在线MarkDown1
- 在线MarkDown2
- 在线MarkDown3
- 78款MarkDown工具
- 各种文档之间转换
- https://choir.io/player/beachmonks/github
- http://www.oschina.net/news/50322/markdown-editors-and-tools
#windows安装Git客户端:
Git本来是在linux下开发的,后来又支持了windows版本。
Windows下要使用很多Linux/Unix的工具时,需要Cygwin这样的模拟环境,Git也一样。Cygwin的安装和配置都比较复杂,就不建议你折腾了。不过,有高人已经把模拟环境和Git都打包好了,名叫msysgit,只需要下载一个单独的exe安装程序,其他什么也不用装,绝对好用。msysgit是Windows版的Git,从http://msysgit.github.io/下载,然后按默认选项安装即可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
- Git Bash 乱码解决方法,bash窗口输入: git config --global i18n.commitencoding utf-8
- Git Gui 乱码解决方法,bash窗口输入: git config --global gui.encoding utf-8
###另外github官方的客户端也很棒http://windows.github.com/
github官方教程:http://try.github.io/levels/1/challenges/1
#使用Git(参考雪峰童鞋的)
##自报家门
安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
注意:git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
##初始化git仓库
初始化一个Git仓库,新建一个仓库目录,使用git init命令。
添加文件到Git仓库,分两步:
第一步,使用命令git add ,注意,可反复多次使用,添加多个文件;
第二步,使用命令git commit -m "",完成。
##查看git实时状态
要随时掌握工作区的状态,使用git status命令。
如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
##版本穿越
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
情况一,修改了工作区的文件,添加了很多内容,还没有git add,想撤销修改,如下:】
撤销刚刚工作区的修改,git checkout -- file命令中的“--”很重要,没有“--”,就变成了“创建一个新分支”的命令
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
【情况二,修改了工作区的文件,已经git add,想撤销这次已经发生的git add,如下:】
git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区]
【情况三,现在,假设你不但改错了东西,还从暂存区提交到了版本库,怎么办呢?还记得版本回退一节吗?可以回退到上一个版本。
不过,这是有条件的,就是你还没有把自己的本地版本库推送到远程。还记得Git是分布式版本控制系统吗?我们后面会讲到远程版本库,一旦你把“stupid boss”提交推送到远程版本库,你就真的惨了…… 】
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
##删除和恢复版本
命令git rm用于删除一个文件,从版本库中被删除了,这个没法恢复,
另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:git >
checkout -- file。 如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,
你会丢失最近一次提交后你修改的内容。
##本地git仓库关联上github公开仓库
本地git仓库关联github上公开的仓库:
在本地git仓库根目录下执行: git remote add origin git@github.com:cinowu/hellogit.git
添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库
第一次推送本地仓库内容到远程github仓库:
git push -u origin master
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样 从现在起,只要本地作了提交,就可以通过命令: git push origin master
要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
或者git remote add origin https://github.com/cinowu/gitskills.git
关联后,使用命令git push -u origin master第一次推送master分支的所有内容; 此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
##下载github公开仓库到本地
从远程github仓库中拷贝到本地git仓库:
git clone https://github.com/cinowu/gitskills.git
或者git clone git@github.com:cinowu/gitskills.git
使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。 Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
【警告】不要使用https:开头的仓库地址,不仅慢,还会导致一系列问题,只需要将 git@github.com:cinowu/gitskills.git 这个中的用户名cinowu换成github用户名,gitskills换成github仓库名即可。
##git分支
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch name
切换分支:git checkout name
创建+切换分支:git checkout -b name
合并某分支到当前分支:git merge name
合并完之后可以删除分支,但是一般分支不建议删除:git branch -d name
##解决冲突
当Git无法自动合并分支时,就必须首先解决冲突,手动在master上修改。解决冲突后,再提交,合并完成。
用git log --graph命令可以看到分支合并图。
git log --graph --pretty=oneline --abbrev-commit
##合并文件
git merge --no-ff -m "merge with no-ff" dev
请注意--no-ff参数,表示禁用“Fast forward”: 合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
##分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理: 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活; 那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本; 你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
#BTW 友情附赠国外网友制作的Git Cheat Sheet,建议打印出来备用:Git Cheat Sheet
也可以在googlecode上创建git协议的publis repository
参见我用cino.wu账户在googlecode上创建的git协议的项目https://code.google.com/p/cino-learn-svn/
https://code.google.com/p/cino-learn-svn/source/checkout
创建google code project入口:https://code.google.com/intl/zh-HK/
#PS
创建在github上的站点,定制自己的域名:http://pages.github.com/
我的已经建好了http://cinowu.github.io
参考怎样创建好看的站点界面和项目:http://www.worldhello.net/gotgithub/03-project-hosting/050-homepage.html
作者:@岁月静好--似水流年
2014-01-15 星期三 10:45:21