昨天为了把hexo博客放到gitcafe上,由于hexo d命令配置仓库不起作为,hexo g生成项目时很多更新判断是有问题,造成一些配置项无法生效,好的办法是把.deploy和pulic文件夹都删除,重新走一遍,但是本着学习的精神,还是好好地研究了一番git。
对于快速上手git,推荐看廖雪峰大牛的git教程, 写得很易懂,但是有些使用场景也没覆盖到,全面的教程在这里,免费的书哦,但是内容太多,看起来太累。
###一、概念理解 首先需要知道git和svn的区别,git是DVCS(分布式版本控制),svn是VCS(集中式版本控制),具体看这里,总的概括一下,git系统里,本地就是远程服务器的一个镜像,所有git里的分支,本地和远程都各有一份,这个需要明确,push的时候会把本地分支推送到服务器。 每个客户端都有一个服务器端的镜像,这里可以在本地进行一切版本控制的操作,完成后推送到服务器端合并。
还有一个重要的概念是工作区和暂存区,看下图:
我们修改文件是在工作区,就是我们的工作目录,调用git add
命令将其修改加入暂存区,没有进入版本库,当你觉得所有的东西都修改完后,可以调用git commit
提交至本地的版本库,
不管commit有没有成功,暂存区都会被清空
本地的版本库就发生了变化,但是这样其他人也看不到你的修改啊,调用git push
将本地版本库推送至远程版本库,如果没发生冲突,good,其他人就可以调用git pull
获取到你的代码了,如果冲突了,你得先git pull
一下,看看哪儿冲突了,修改冲突后,再来一遍add commit push
。一般来说使用git就是这个流程,可能还会有版本回退,删除等问题。
###二、几种特殊场景处理 下面将一些特殊的应用场景,主要涉及分支方面,假定gitcafe和github是两个远程仓库:
-
当前分支要同时传到两个版本库上,比如你在gitcafe和github上都有项目,需要同时更新。 可以这样:
git push gitcafe master:gicafe-pages
git push github master:master
或者git push github master
git push
将本地的master分支分别合并到了gitcafe上的gitcafe-pages分支和github上的master分支。 -
你发现github上的远程maser分支和本地分支有冲突,而且冲突的地方非常多,无法一个一个修改了,原因可能是服务器上的分支是老分支master,而你是从新分支开发的,现在要废除老分支,可以这样:
git push github :master
用空分支覆盖github上的分支master,相当于删除了master分支。git push github master
将本地master分支上传至github(不指定远程分支名,则合并至同名远程分支)。
###三、版本冲突处理
版本冲突的几个场景,git版本冲突可能会出现在两个地方,git merge
合并分支的时候,git push
远程推送时,解决方法差不多:**
-
git push github master
提交发生冲突时,是本地分支和远程分支的冲突,可以这样git pull github master
, 你将会看到那些文件冲突了,修改完成后,git add .
git commit -m "confict fixed"
git push github master
,完成冲突解决。 -
git merge another
发生冲突时,是在本地两分支冲突,解决办法就是git status
看看哪些文件冲突,修改完成后git add .
git commit -m "confict fixed"
git branch -d another
,修改完冲突another分支已经没用了,不是么?