本文是继续我的上一篇:Git学习手册1,链接如下:
Git学习手册1
我们已经学会了修改文件,现在如果继续修改,修改完毕之后想要查看历史记录,可以使用git log
命令
git log命令显示从最近到最远的显示日志,我们可以看到最近三次提交
最近的一次是,增加内容为333333.
上一次是添加内容222222
第一次默认是 111111.
如果嫌上面显示的信息太多的话,我们可以使用命令 git log –pretty=oneline
演示如下:
现在我想使用版本回退操作,我想把当前的版本回退到上一个版本,要使用什么命令呢?可以使用如下2种命令,
那么如果要回退到上上个版本只需把HEAD^ 改成 HEAD^^ 以此类推。那如果要回退到前100个版本的话,使用上面的方法肯定不方便,我们可以使用下面的简便命令操作:git reset --hard HEAD~100
即可。
现在,我想回退到最新的版本,该怎么做呢?
我们可以通过版本号回退,使用命令方法如下:
git reset --hard 版本号
问题又来了,不知道版本号,该怎么办呢?
别着急,可以通过如下命令即可获取到版本号:
git reflog
同时,这里需要提到一个概念:
(划重点了)
什么是工作区?与暂存区有什么区别?
工作区:就是你在电脑上看到的目录,比如目录下testgit里的文件(.git隐藏目录版本库除外)。或者以后需要再新建的目录文件等等都属于工作区范畴。
版本库(Repository):工作区有一个隐藏目录.git,这个不属于工作区,这是版本库。其中版本库里面存了很多东西,其中最重要的就是stage(暂存区),还有Git为我们自动创建了第一个分支master,以及指向master的一个指针HEAD。
我们前面说过使用Git提交文件到版本库有两步:
第一步:是使用 git add
把文件添加进去,实际上就是把文件添加到暂存区。
第二步:使用git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支上。
现在,如果我发现最后修改的文件有错误,所以,必须要恢复到以前的版本,我们可以有以下几种方式:
第一:如果我知道要删掉那些内容的话,直接手动更改去掉那些需要的文件,然后add添加到暂存区,最后commit掉。
第二:我可以按以前的方法直接恢复到上一个版本。使用 git reset --hard HEAD^
除此之外,还能怎么办?
可以直接使用撤销命令!
先使用git status
查看当前状态
可以发现,Git会告诉你,git checkout -- file
可以丢弃工作区的修改
(注意:git checkout – readme.txt 中的 – 很重要,如果没有 – 的话,那么命令变成创建分支了。)
例如:git checkout --readme.txt
意思就是,把readme.txt文件在工作区做的修改全部撤销
在这里有两种情况:
一般情况下,可以直接在文件目录中把文件删了,或者使用如上rm命令:
rm 文件名
例如:
rm readme.txt
如果我想彻底从版本库中删掉了此文件的话,可以再执行commit命令,提交掉,就彻底删除了,这时候,再想要在版本库中恢复文件,是不可能的了。
谨记:一旦commit,有些操作不可逆。
那么没有commit之前,如果我想在版本库中恢复此文件如何操作呢?
可以使用如下命令
git checkout -- 文件名
千万不要把 --
写成了-
,两个杠之间没有空格。
例如:git checkout -- readme.txt
,就可以恢复回来了。
在了解这些之前,你得先有一个GitHub的账号才行,如果没有的话,先注册GitHub账号
GitHub官方网站
打开之后是这样的
如果有的话,直接点击Sign in
没有的话,稳住别慌,接着看下面
点击Sign up
输入完成之后点击Select a plan,选择免费版本,然后发送邮箱验证信息
登录你刚才使用的邮箱账号,会有一封来自于GitHub的验证邮件,如果没有的话,稍微等待一会,或者可以去邮箱的垃圾箱看看是不是被误删了。
点击验证之后,,就可以使用了。
下面我们继续我们的Git。
由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以需要一点设置:
第一步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果有的话,直接跳过此如下命令,如果没有的话,打开命令行,输入如下命令:
ssh-keygen -t rsa –C “[email protected]”, 由于我本地此前运行过一次,所以本地有,如下所示:
id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
第二步:登录GitHub,打开” settings”中的SSH Keys页面,然后点击“Add SSH Key”,填上任意title,在Key文本框里黏贴id_rsa.pub文件的内容。
之后,你就能看到已经添加的key了
如何添加远程库?
我们已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且希望这两个仓库进行远程同步,这样GitHub的仓库可以作为备份,又可以其他人通过该仓库来协作。
首先,登录GitHub上,然后在右上角找到“new repository”创建一个新的仓库。如下:
在GitHub上,这个是空的。
GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。
现在,我们根据GitHub的提示,在本地的testgit仓库下运行命令:
git remote add origin 自己的网址
在这里查看
例如我的是:https://github.com/cjw7177/testgit.git
本地库的内容推送到远程,使用 git push命令,实际上是把当前分支master推送到远程。
git push -u origin master
由于远程库是空的,我们第一次推送master分支时,加上了 –u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样了
后面第二次,第三次等等,提交都可以直接使用命令
git push origin master
把本地master分支的最新修改推送到GitHub上了,现在你就拥有了真正的分布式版本库了。
为什么要从远程克隆?
假如远程库有新的内容了,我们就可以从远程克隆到本地来
首先,找到你需要clone的库,例如,我自己的
https://github.com/cjw7177/Banker-s_Algorithm
使用命令git clone克隆一个本地库。
git clone https://github.com/cjw7177/Banker-s_Algorithm
克隆之后,本地就有了Banker-s_Algorithm这个项目
在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。
首先,我们来创建dev分支,然后切换到dev分支上。如下操作:
git checkout 命令加上 –b参数表示创建并切换,相当于如下2条命令
git branch dev
git checkout dev
git branch查看分支,会列出所有的分支,当前分支前面会添加一个星号。然后我们在dev分支上继续做demo。
我们可以把dev分支上的内容合并到分支master上了,可以在master分支上,使用如下命令 git merge dev
git merge
命令用于合并指定分支到当前分支上,合并后,再查看文件的内容,其实和dev分支最新提交的是完全一样的。
注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。
合并完成后,我们可以接着删除dev分支了
总结创建与合并分支命令如下
查看分支:git branch
创建分支:git branch name
切换分支:git checkout name
创建+切换分支:git checkout –b name
合并某分支到当前分支:git merge name
删除分支:git branch –d name
前面说到,Git一般使用“Fast forward”合并分支。在这种模式下,删除分支后,会丢掉分支信息,我们可以使用带参数 –no-ff来禁用”Fast forward”模式。
git merge –no-ff -m "······注释~·····" dev
分支策略:首先master主分支应该是非常稳定的,也就是用来发布新版本,一般情况下不允许在上面干活,干活一般情况下在新建的dev分支上干活,干完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。
Git入门的知识差不多就这些,当然,还有其它比如各种分支:bug分支,以及多人协作的推送分支、抓取分支等,以后有机会再给大家写。