简明释义
Git
Git 是一个版本控制工具,是一个可以安装在你自己机器上的软件。
git 的用途,就是对一个文件夹中的所有数据信息做跟踪,通过记录版本的形式来对内容的变化做记录。
github
Git 的魅力在于开源文化,2008 年 github 的诞生把开源协作的理念更好的进行了推广,因为 Github 让 Git 变得更为易用。
Github 首先是一个公司,Github网站是他们的产品,提供 Git 仓库的托管服务,但是更重要的,它是世界上最大的开源软件分享协作平台。
安装及初始化
安装
Windows上安装Git
msysgit是Windows版的Git。
下载地址。
然后按默认选项安装即可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
安装完成后,还需要最后一步设置,在命令行输入:
$ git config –global user.name “Your Name”
$ git config –global user.email “email@example.com”
git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
创建版本库
版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
如何创建版本库?
- 在电脑磁盘里的任意位置,创建一个空目录
方法1:直接在磁盘任意位置,右键-新建文件夹;
方法2:在git命令行里创建。
关于创建文件常用命令(Unix Linux命令):
- cd :切换目录命令
– cd .. : 切换到上一级目录。
如当前目录为e盘下的code目录,使用命令”cd ..”,会切换到e盘。
– cd e: : 切换盘符。
如当前在e盘,需要切换到c盘,使用命令”cd c:”即可。
– cd / : 切换到根目录。
– cd 目录名:切换到具体目录。
如当前在e盘,需要切换到e盘下的code目录,使用命令”cd code”即可。
如果当前在其他目录或根目录,需要切换到e盘下的code目录,使用命令”cd e:code”即可。 - pwd : 显示当前所在目录
- dir : 显示当前目录下的所有文件
- mkdir : 创建目录。
如当前在e盘下,需要在e盘下创建一个新目录”code1”,使用命令”mkdir code1
“即可;
如果要在其他盘下创建目录,先使用cd命令定位到目标盘,然后再使用mkdir命令。
- 通过
git init
命名把这个目录变成Git可以管理的仓库。
创建完目录后,在磁盘中找到该目录,右键–Git Bash Here
即可定位到当前目录,或是通过上面的Linux命令来定位到目标目录。
在命令行输入命令”git init”,即成功创建Git仓库。
这时在当前目录下,会多出一个.git目录(如果没有,说明被隐藏了,需要在”工具-文件夹选项-查看”里设置隐藏属性为显示所有文件)。这个目录是Git来跟踪管理版本库的。
远程仓库
配置SSH Key
目的:本地Git仓库与GitHub网站仓库之间实现同步传输及存储。
步骤:
- 需要注册一个GitHub账号。(注册地址)[https://github.com].
设置SSH Key.(本地Git仓库和GitHub仓库之间的传输是通过SSH加密的)
打开Git Bash,创建SSH Key.
输入命令:$ ssh-keygen -t rsa -c “youremail@examle.com”
将邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可。
成功的话,会在用户主目录(我的是在”C:\Documents and Settings\Administrator”)里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件。(这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。)登录GitHub网站,打开”我的账号/Account settings”—“personal settings”—“SSH keys”,点击”New SSH key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。
打开Git Bash,输入命令以下命令检测是否成功连接本机与GitHub。
ssh -T git@github.com
在遇到提示的情况下,输入”yes”即可。
添加远程库
- 登录GitHub,点击右上角的”+”号—“New repository”,创建新的Git仓库。
- 把本地仓库的内容推送到GitHub仓库。
① 打开GitHub上新建的repository仓库,找到HTTPS/SSH地址并复制地址,如”https://github.com/xifengxx/demo.git"是我的一个仓库https地址。
② 本地仓库下运行命令$ git remote add origin https://github.com/xifengxx/demo.git
添加后,远程仓库的名字就是origin(这是Git默认叫法,可以将origin改成其他的名字)
③ 继续运行命令
$ git push -u origin master
把本地仓库内容推送到远程,用git push命令。实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样。
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改:
$ git push origin master
④ 推送时,会弹出需要输入github账号及密码框,输入即可。 - 注意事项
在第二步②时,输入命令”$ git remote add origin https://github.com/xifengxx/demo.git"时,可能会报错。
错误信息:”fatal: remote origin already exists.……”
原因:远程仓库已经存在内容,与本地仓库推送内容冲突。
解决方法:
1、先输入”$ git remote rm origin”命令,删除远程仓库内容。
2、再输入”$ git remote add origin https://github.com/xifengxx/demo.git“ 就不会报错了!
上述方法针对第一次将本地仓库推送到远程仓库时遇到这个问题的解决方法。
如果不想删除远程仓库内容,可以使用下面的方法,将本地仓库内容和远程仓库内容合并。
解决方法:
1、先输入”$ git pull origin master”命令,将远程仓库内容pull到本地仓库。
2、再输入”$ git push origin master”命令,即可。
从远程库克隆
- 登录GitHub,创建一个新的仓库,例如我的一个仓库,名字叫demo
- 找到新仓库的HTTPS/SSH地址并复制地址,如”git@github.com:xifengxx/demo.git”或”https://github.com/xifengxx/demo.git“
- 使用命令git clone克隆一个本地库
$ git clone git@github.com:xifengxx/demo.git
也可以使用命令:
$ git clone https://github.com/xifengxx/demo.git
Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。
使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。
Git基础操作
将文件添加到版本库
使用命令:
- git add:将文件添加到仓库。
命令:$ git add 文件名 或者 $ git add .
将某个文件复制到当前目录,然后再使用这个命令。后一个是将所有文件添加到仓库。 - git commit:将文件提交到仓库。
命令:$ git commit -m “xxx”
git commit命令,-m后有一个空格,然后””中填写提交说明,可以输入任意内容,方便以后查找。
如:$ git commit -m “首次提交”
备注:commit命令可以一次提交很多文件;git add+文件名为添加一个文件,如果添加很多文件,使用命令”git add .”. - 注意事项
将文件提交到仓库时,如果使用命令”git commit -a”时,会自动弹出系统默认的编辑器界面,在其中根据提示输入信息即可。
关键是如何退出默认编辑器界面并重新返回到Git bash界面。
方法:
① 按ESC键,确定退出编辑模式。
② 然后输入”:wq”,即可返回Git界面。
Git常用命令:
1、git init
初始化一个git项目
在初始化的项目中有一个.git文件,可以被称为“附属于该仓库的工作树”。文件的操作都在工作树中进行,然后记录到仓库中去。
touch README.md
: 添加一个 README.md (可选)用于描述项目
忽略某些文件:
在提交代码之前,我们需要将某些文件排除在外,比如由 npm 产生的 node_modules 文件夹,这是开发环境下用到的,可以通过 npm install 在新环境下安装依赖。所以理应不纳入版本管理,还有缓存之类的都应该排除掉。
那么我们就创建一个名为 .gitignore 的文件,内容就如下:
.DS_Store
node_modules
.sass-cache
上面只是一个大致的内容,实际开发的时候你得根据自己的需求去忽略某些文件。
2、git status
查看状态
只要对git的工作树或者仓库操作,git status的现实结果就会发生变化。
3、git add
向暂存区中添加文件
暂存区属于仓库的范畴
假如只是在工作区操作文件,并不会在被计入git仓库的版本管理对象中。用status查看状态时只会出现在Untracked files里,而git add操作后,文件就进入了暂存区即仓库。
4、git commit
保存仓库的历史记录1
$ git commit -m "xxx" // "xxx"为提交说明,可以输入任意内容,方便以后查找。
5、git log
查看提交的记录,也是保存过的仓库的记录。1
2$ git log
$ git log graph //以图表形式查看分支
6、git diff
查看更改前后的差别
git diff 可以查看工作树、暂存区、最新提交之间的差异。1
git diff HEAD //比较工作树和最新提交之间的差别。
7、git branch
显示分支一览表
显示当前的仓库的所有分支。并且当前分支带有星号标志。1
git branch -a //这个命令查看当前分支的相关信息,添加`-a`参数可以同时显示本地仓库和远程仓库的分支情况。
8、git checkout
切换分支1
2
3$ git checkout feature-A //切换到feature-A分支
$ git branch feature-A //创建feature-A分支
$ git checkout -b feature-A //创建并切换到分支。
9、git merge
合并分支1
git merge --no-ff 分支 //在记录中记录本此合并
10、git reset —hard xxx
让仓库的HEAD、暂存区、和当前工作树回溯到指定版本
回溯之后查看log日志只能看到当前状态之前的日志,就看不到回溯之前的那些日志,如果回溯错了,想回到回溯之前的状态该怎么办?
只用git reflog操作就能看到包括回溯之前的所有状态,然后再配合git reset –hard命令回溯回去就好了。
11、git rebase -i HEAD~2(num)
如果觉得两次提交的内容和信息台贴近无需分成两次,就可以使用这个命令两xx条最近的HEAD合并成一条提交。
执行后回出现编辑框1
2
3
4
5
6pick 7aadfd "add feature"
pick 4tw436 "dsxxxx"
>>>>>>修改成
pick 7aadfd "add feature"
fixup 4tw436 "dsxxxx"
// 意味着将第二条修改加到第一条去
12、git remote add origin git@github.com:xifengxx/demo.git
将远程仓库链接到本地仓库,并且将远程仓库名字设置成origin,’git@github.com:xifengxx/demo.git’ 为远程仓库具体地址。
13、git push -u origin master
-u origin master 参数 表示首次将origin的master分支设置成本地master分支的upstream,这样以后pull时可以直接获取。这样之后,将本地master分支推送到远程仓库,只需使用git push origin master
即可。
git push origin feature-C
将本地分支feature-c推送到远程仓库
14、git clone git@github.com:xifengxx/demo.git
clone 操作默认克隆远程仓库的master分支,并不包含其他分支。
15、git pull origin feature-D
从远端的featur-D分支拉取最新的数据.
利用Github Page 搭建网页Demo
适用场景:
写了一些网页demo,想上传到网上查看效果,并做展示用途。不同于用Github搭建的个人博客。
方法:Github Page部署。
步骤:
- 注册Github账号.
- 下载安装git.
msysgit是Windows版的Git。(下载地址)[http://msysgit.github.io/]。 - 登录Github,新建一个repository项目(这里使用project做项目名字)。
- 在新建的项目里,点击”Settings”设置”Launch automatic page generator”,按步骤设置即可。
设置完成后,这个repository项目的展示地址变为:
http://xifengxx.github.io/project
‘xifengxx’为我注册Github的账号名,project为repository项目名。
可以通过上面的网址来访问项目。 电脑里选定一个文件夹(这里是Git)放置Github上的项目project。
右键——“git bash here”,调出git命令界面,输入以下命令将project项目克隆到本地文件夹下。$ git clone https://github.com/xifengxx/project.git
这时本地Git文件夹下会多出一个文件夹Project。本地新建分支。
输入以下命令,在本地新建一个gh-pages分支并切换到gh-pages分支,这个分支是远程分支origin/gh-pages的镜像。$ cd project/
$ git checkout -b gh-pages origin/gh-pages
这时本地文件夹project里多出的文件,来自github上的gh-pages分支中的文件。
[注意:经测试,第五步将项目克隆岛本地文件夹下project下后,里面即有gh-pages分支中的文件,同时本地已经自动创建了一个gh-pages分支,因此,不需要再新建分支并切换分支操作了。]执行以下命令,删除原有的gh-pages文件,并提交(commit)本次修改。
$ git rm -rf .
$ git add .
$ git commit -m “delete all files”
这时project里的文件都删除了。将自己的网页Demo文件复制粘贴到project文件夹里。
将本地gh-pages中的网页文件同步到远程库的gh-pages中。
输入以下命令:$ git add .
$ git commit -m “My design Demo”
$ git push origin gh-pages
输入第三行命令时,会有弹出框提示输入Github账号和密码,输入后等待片刻,当命令行提示”$”符号时,说明已经完成。
- 浏览器输入网址访问:
http://xifengxx.github.io/project/index.html
或 http://xifengxx.github.io/project
此处的index.html为网页Demo中的文件。