git简介
Linus一直痛恨的CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢?
集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。必须要联网才能工作,如果中央服务器坏了,就没法用了。
分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,比如 A B修改了文件后,互相把修改记录推送到对方的电脑上就行了。但有可能A B两台机器无法直接通信,所以实际中我们还是会有一个中央服务器,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。 注意 git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
git的必须要先建一个本地仓库/分支,用来映射远程的仓库/分支。 首先: 初始化一个本地仓库 git init 如果有远程仓库,克隆远程仓库 git clone
$ git clone git@github.com:michaelliao/gitskills.git
git branch -vv 可以查看当前的本地分支的映射关系 origin 理解为远程仓库在本地的标签或者别名,便于使用罢了 master 默认远程仓库主分支
git remote add [shortname] [url]
如:git remote add origin git://github.com/CnPeng/test.git ,这样,就可以用字符串 origin来代指远程仓库。 git中默认就是用origin代指远程仓库
git remote命令是用来将本地仓库跟远程仓库建立连接的。在本地仓库目录执行,将会把本地目录跟这个远程仓库绑定映射关系。同时以后可以使用origin别名来代指远程仓库。
git remote add origin git@github.com:imki911/myProject.git
###git clone方式 推荐使用https方式. 在git中clone项目有两种方式:HTTPS和SSH,它们的区别如下: HTTPS:不管是谁,拿到url随便clone,但是在push的时候需要验证用户名和密码; SSH:clone的项目你必须是拥有者或者管理员,而且需要在clone前添加SSH Key。SSH 在push的时候,是不需要输入用户名的,如果配置SSH key的时候设置了密码,则需要输入密码的,否则直接是不需要输入密码的。
在git中使用SSH Key的步骤: 先使用以下命令生成 SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
后面的 your_email@youremail.com 改为你在 Github 上注册的邮箱
把id_rsa.pub 或 id_dsa.pub 文件,将公共的SSH 放到远程仓库上
git命令
参考 www.cnblogs.com/pony1223/p/…
创建本地分支 git branch <分支名> //克隆一个分支代码 git clone -b 分支名 仓库地址
从当前分支切换到‘dev’分支: git checkout dev 建立并切换新分支: git checkout -b 'dev' 查看当前详细分支信息(可看到当前分支与对应的远程追踪分支) git branch -vv 查看当前远程仓库信息 git remote -vv 查看本地分支状态 git branch 查看git本地change文件 git status
Git push(提交前,先pull更新)
git push origin master 提交 (origin 远程仓库别名 master分支名)
如果直接写git push,是push当前分支到当前分支的追踪关系分支。
git add 文件
git commit -m message
git pull origin master 更新 (origin 远程仓库别名 master分支名) pull 命令则是相当于将 fetch 和 merge 这两个命令放在一起执行了
git status 查看本地仓库分支状态
提交文件需要先commit 再push
####关于版本提交和回退 git reset ,git revert(可以单个文件) 1.使用 git checkout 撤销本地修改 即放弃对本地已修改但尚未提交的文件的修改,还原其到未修改前的状态。 已 add/ commit 的文件不适用个方法。 2.git reset 以回退到任意已经提交过的版本。已 add / commit 但未 push 的文件也适用。 git reset是将当前版本标记还原成历史版本了,head指针直接指向了历史版本。
git revert是将当前版本内容还原成历史版本了,head指针还是直接指向最新版本。
如果要返回上次的版本
git reset --hard HEAD^
如果是前一次的版本
git reset --hard HEAD^^
如果要非常靠前,其中n是回退的提交次数。
git reset --hard HEAD~n
回退到具体的版本号
git reset --hard 2332432
回退到具体的版本号
git revert 2332432
场景如下,你正在开发需求1时,突然线上发现了一个bug,需要立即修复。需求1的代码因为不完善,也没经过测试,所以你希望针对需求1所做的修改先暂时隐藏,这样就可以使用 stash功能了。

VCS-->git -->stash
这个时候针对需求1做的修改都会隐藏掉。现在假设你处理bug完毕。需要继续开发需求,现在需要unstash
VCS-->git-->Unstash,选中你刚刚的stash,选中Pop stash。点击pop stash即可。如下图:
但是我这里遇到个问题,屏幕右下角有如下提示:
点击View them,把localChanges文件全部还原成git上一样的,最终本地无修改记录。 然后重新unstash,ok。
####解除版本控制 git rm --cached fileName 删除暂存区,版本控制上该文件也被删除,本地工作区不会删除文件,文件版本控制解除。
git rm fileName 删除暂存区,版本控制上该文件也被删除,同时本地也删除了。
拉取仓库下单个文件
比如:拉取test目录下的app文件夹
$ mkdir test
$ cd test
$ git init
$ git remote add -f origin https://github.com/Rozbo/puck.git
$ git config core.sparsecheckout true #开启Sparse Checkout模式
$ echo "app" >> .git/info/sparse-checkout #设置仅拉取app这个文件夹
$ git pull origin master
忽略提交
在目录下新建.gitignore文件,在里面配置忽略规则即可。已经加了版本控制的文件不生效。需要先清版本缓存控制。