因为hexo deploy bug得手动更新博客….
所以不得不反过头来复习git …但似乎并没解决问题…
现在解决方法:
- hexo g能正常生成页面
- 本地有tags更新tag cloud.xml(神奇原因不能自动更新)
- https://github.com/renld/renld.github.io => upload new files
- 更新index.html atom.xml sitemap.xml search.xml
- 手动从public拖入tags, 2016, achieves, page 四个文件夹
- 这里想要快一点的话就直接走进那个文件夹更新某个文件…
git learn from Liaoxuefeng git-cheatsheet.pdf
集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
版本库又名仓库,英文名repository,你可以简单理解成一个目录
1 | $ mkdir learngit |
Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的,前面我们举的例子只是为了演示,如果要真正使用版本控制系统,就要以纯文本方式编写文件。
add & change
1 | $ git add readme.txt # 放到工作区 |
为什么Git添加文件需要add
,commit
一共两步呢?因为commit
可以一次提交很多文件,所以你可以多次add
不同的文件
1 | $ git status #当前提交状况(有无改动) |
1 | $ git diff (后面可以加文件名) |
版本<= =>
1 | $ git log |
上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
1 | $ git reset --hard HEAD^ |
版本前进(得找到commit时候的id)
1 | $ git reflog |
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file
,就回到了场景1,第二步按场景1操作。
1 | $ git checkout -- readme.md # 工作区返回最近一次修改 |
SSH
要关联一个远程库,使用命令
git remote add origin git@server-name:path/repo-name.git
;关联后,使用命令
git push -u origin master
第一次推送master分支的所有内容;此后,每次本地提交后,只要有必要,就可以使用命令
git push origin master
推送最新修改;
github增加一个learngit仓库后
1 | $ git remote add origin git@github.com:renld/learngit.git |
添加后,远程库的名字就是origin
,这是Git默认的叫法,也可以改成别的,但是origin
这个名字一看就知道是远程库。
1 | $ git push -u origin master |
把本地库的内容推送到远程,用git push
命令,实际上是把当前分支master
推送到远程。
由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。
1 | $ git push origin master # 这样就可以把本地masterpush |
clone
GitHub给出的地址不止一个,还可以用https://github.com/michaelliao/gitskills.git
这样的地址。实际上,Git支持多种协议,默认的git://
使用ssh,但也可以使用https
等其他协议。
使用https
除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh
协议而只能用https
。
分支
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout
\
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
HEAD
严格来说不是指向提交,而是指向master
,master
才是指向提交的
1 | $ git checkout -b dev |
1 | $ git branch |
冲突
1 | git log --graph --pretty=oneline --abbrev-commit |
Tag
1 | git tag |