本地文件添加到github
- 第一步生成ssh key
1 | ssh-keygen -t rsa -C "your_email@youremail.com" |
后面的 your_email@youremail.com 改为你在github上注册的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。
成功的话会在当前用户~/下生成.ssh文件夹,如我的目录是C:\Users\xxx\ .ssh,打开id_rsa.pub,复制里面的key(可以把这个公钥文件删除,只保留id_rsa私钥文件)。
回到github上,进入 Account Settings(账户配置),左边选择SSH Keys,Add SSH Key,title随便填,粘贴在你电脑上生成的key。
验证是否成功的方法:
1 | ssh -T git@github.com |
在git bash下输入上面的,如果有看到You've successfully authenticated, but GitHub does not provide shell access 。这就表示已成功连上github。
第二步建立git的仓库,在github上面新建一个repository即可。如果是为了保存资料,是可以新建repository时选择private。这样就不会公开了。创建好了之后,会有以下提示:
新仓库,需要做的事情:
1
2
3
4
5
6
7echo "# hexo" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M master
git remote add origin git@github.com:fang141x/hexo.git
git push -u origin master已有仓库,
1
2
3git remote add origin git@github.com:fang141x/hexo.git
git branch -M master
git push -u origin master第三步建立git的本地仓库。之前有建立好本地仓库就可以跳过这一步了。
1 | cd /E/shell |
- 第四步,上传代码
1 | #配置username和email,github每次commit都会需要这2个参数 |
这样就完成了git上传代码的过程。
有时一些文件不需要同步,我们可以在仓库的目录下创建 .gitignore 文件,把不需要同步的文件名写上去就了。以下表示 不同步assets文件名,但是_posts/assets这个目录需要同步。
1 | $ cat .gitignore |
同步数据
- 从github同步代码到本地
1 | cd /f/ |
首先进入f盘,直接使用git clone就可以了。如上,就会在F:/shell/上面创建一个目录,注意,此目录不能存在。
- 同步远程文件到本地
输入 git remote -v,查看远程仓库:git pull origin master从远端同步数据到本地
1 | $ git remote -v |
本地仓库
本地仓库可以分为工作区和版本库。由 git 维护的三棵”树”组成。
- 第一个是你的 工作目录,它持有实际文件;
- 第二个是 暂存区(Index/stage),它像个缓存区域,临时保存你的改动;
- 最后是 HEAD,它指向你最后一次提交的结果。

你可以提出更改(把它们添加到暂存区),使用如下命令:
1 | git add <filename> |
这是 git 基本工作流程的第一步;使用如下命令以实际提交改动:
1 | git commit -m "代码提交信息" |
现在,你的改动已经提交到了 HEAD,但是还没到你的远端仓库。
分支管理
本地仓库操作
- 建立分支
创建dev分支,然后切换到dev分支,git checkout -b dev相当于2条命令,git branch dev、git checkout dev
1 | [root@home gitstudy]#git checkout -b dev |
git branch命令会列出所有分支,当前分支前面会标一个*号。
- 修改文件且commit
1 | [root@home gitstudy]#echo 'Creating a new branch is quick.' >>test.txt |
- 合并分支:
git merge命令用于合并指定分支到当前分支。
1 | [root@home gitstudy]#git checkout master |
注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。我们可以使用—no-ff来关闭fast forward,这里Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
- 删除分支:合并完成后,就可以放心地删除dev分支了:
1 | [root@home gitstudy]#git branch -d dev |
远程仓库操作
我们也可以直接将分支同步到github上。
- 将新分支发布在github上
1 | $ git push origin dev |
- 将github上的分支同步下来
1 | $ git checkout -b dev origin/dev |
- Git鼓励大量使用分支:
1 | 查看分支:git branch |
解决冲突
如果在合并分支时,在master里面又修改了同一个文件,同时也commit到同步库,这时进行合并就会出现异常了。
1 | #这时合并就会提示有冲突了 |
我们需要手工修改这个文件之后,再次add/commit就可以了。也就是有冲突了,就需要手工解决。
1 | [root@home gitstudy]#git add test.txt |
可以用gitlog --graph命令可以看到分支合并图。
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
git其他常用命令
- git status
1 | [root@home gitstudy]#git status |
Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working directory clean)的。
git diff 查看修改了哪些内容
1
2
3
4
5
6
7
8
9
10[root@home gitstudy]#git diff test.txt
diff --git a/test.txt b/test.txt
index a4c0a67..bb0f9ef 100644
--- a/test.txt
+++ b/test.txt
@@ -1,3 +1,4 @@
Git is a distributed version control system.
Git is free software.
+testgit log查看commit的提交日志
1 | [root@home gitstudy]#git log --pretty=oneline |
- git reset 可以根据commitid来指定回退版本
1 | #此为回退到前一个版本 |
可以指定commit id来需要回退或者到哪个版本下。1
2
3
4
5
6
7
8
9
10[root@home gitstudy]#cat test.txt
Git is a distributed version control system.
Git is free software.
[root@home gitstudy]#
[root@home gitstudy]#git reset --hard 3994ba33b9
HEAD is now at 3994ba3 add dd
[root@home gitstudy]#cat test.txt
Git is a distributed version control system.
Git is free software.
test
- git reflog 用来记录reset的日志
1 | [root@home gitstudy]#git reflog |
- git checkout 其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
1 | [root@home gitstudy]#echo 'checkout' >test.txt |
- git rm 从版本库里面删除文件
1 | #先加一个新文件 |
标签
1 | 命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id; |
总结
管理修改
每次修改,如果不add到暂存区,那就不会加入到commit中
撤销修改
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令
git checkout -- file。场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令
git reset HEAD file,就回到了场景1,第二步按场景1操作。
删除文件,在本地删除了一个文件之后
- 场景1:确实要从版本库中删除该文件,那就用命令g
it rm删掉,并且git commit - 场景2:删错了,因为版本库里还有呢,所以可以使用
git checkout -- file,很轻松地把误删的文件恢复到最新版本
- 场景1:确实要从版本库中删除该文件,那就用命令g
最后引用 https://zhuanlan.zhihu.com/p/94008510 的流程图来结尾:
