hexo debug && GitLearn

因为hexo deploy bug得手动更新博客….

所以不得不反过头来复习git …但似乎并没解决问题…

现在解决方法:

  1. hexo g能正常生成页面
  2. 本地有tags更新tag cloud.xml(神奇原因不能自动更新)
  3. https://github.com/renld/renld.github.io => upload new files
  4. 更新index.html atom.xml sitemap.xml search.xml
  5. 手动从public拖入tags, 2016, achieves, page 四个文件夹
    • 这里想要快一点的话就直接走进那个文件夹更新某个文件…

git learn from Liaoxuefeng git-cheatsheet.pdf

集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。

分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

版本库又名仓库,英文名repository,你可以简单理解成一个目录

1
2
3
4
5
$ mkdir learngit
$ cd learngit
$ pwd
$ git init
$ ls -ah

Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的,前面我们举的例子只是为了演示,如果要真正使用版本控制系统,就要以纯文本方式编写文件。

add & change

1
2
$ git add readme.txt # 放到工作区
$ git commit -m "wrote a readme file" # 放到暂存区

为什么Git添加文件需要addcommit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件

1
2
3
4
5
6
7
8
9
$ git status #当前提交状况(有无改动)
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified: readme.md

no changes added to commit (use "git add" and/or "git commit -a")
1
2
3
4
5
6
7
8
9
10
11
$ git diff (后面可以加文件名)
diff --git a/readme.md b/readme.md
index d8036c1..a20531f 100644
--- a/readme.md
+++ b/readme.md
@@ -1,2 +1,3 @@
-Git is a version control system.
+Git is a distributed version control system.
+
Git is free software.
\ No newline at end of file

版本<= =>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ git log
commit 9ff8bb698d56d50a5d8db561391854e4f85f3265
Author: Renld <leidar100@gmail.com>
Date: Wed Aug 17 10:30:34 2016 +0800

update

commit e174d0bbb2adac29d41bf9dca93d64d1b04e74b8
Author: Renld <leidar100@gmail.com>
Date: Wed Aug 17 10:26:51 2016 +0800

wrote readme
or
$ git log --pretty=oneline
9ff8bb698d56d50a5d8db561391854e4f85f3265 update
e174d0bbb2adac29d41bf9dca93d64d1b04e74b8 wrote readme

上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

1
2
$ git reset --hard HEAD^
HEAD is now at e174d0b wrote readme

版本前进(得找到commit时候的id)

1
2
3
4
5
6
7
8
$ git reflog
9ff8bb6 HEAD@{0}: reset: moving to 9ff8bb6
e174d0b HEAD@{1}: reset: moving to HEAD^
9ff8bb6 HEAD@{2}: commit: update
e174d0b HEAD@{3}: commit (initial): wrote readme

$ git reset --hard 9ff8bb6
HEAD is now at 9ff8bb6 update

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。

1
2
3
$ git checkout -- readme.md # 工作区返回最近一次修改

$ git reset HEAD readme.txt # 把暂存区的修改撤销掉

SSH

要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git

关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

添加ssh key

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严格来说不是指向提交,而是指向mastermaster才是指向提交的

1
2
3
4
$ git checkout -b dev 
# git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
# $ git branch dev
# $ git checkout dev
1
2
3
4
5
6
 $ git branch
* dev
master
do something...
$ git merge dev
$ git branch -d dev

冲突

1
git log --graph --pretty=oneline --abbrev-commit

Tag

1
2
3
4
5
6
7
8
9
10
11
12
 git tag
git show v0.9


git tag v1.0
git tag v0.9 6224937

git tag -d v0.1
git push origin :refs/tags/v0.9

git push origin v1.0
git push origin --tags
文章目录
  1. 1. add & change
  2. 2. 版本<= =>
  3. 3. SSH
    1. 3.1. clone
    2. 3.2. 分支
      1. 3.2.1. 冲突
    3. 3.3. Tag