Git使用

上篇博客说到了Git是什么以及搭建基本的Git环境,这篇就说说其基本使用

提交

上一篇写到了,你有个README.txt需要提交

$ git add README.txt  ## 将需要提交的文件保存到缓存区
$ git commit -m "ADD README"   ## 将缓存区的提交到本地仓库,"ADD README" 是注释信息**
$ git status   ## 查看状态

此时的结果大概是这样的:

我的ubutu系统是中文的,大家如果看到英文的跟这个也是一个意思的

此时我们修改下README.txt,加入新的一行”Day 3”,查看下此时的状态

$ git status

Git使用_第1张图片

显示的是,README.txt已经被修改,但是没有被提交到缓存区更没有提交到本地仓库

现在我们想看看自己到底修改了什么,怎么看?

$ git diff README.txt

Git使用_第2张图片

显示添加了一行”Day3”

此时我们提交:

版本回退

现在咱们再给README.txt修改下,讲”Day3”改为”Day of light”:
很明显,此时的git应该是这样的结果:

提交到版本库:

git commit -m "Alert Day3"

查看历史版本:
git log

结果是:

Git使用_第3张图片

以上显示的就是历史版本信息,通过git commit -m 添加的提示信息此时就会很有用
或者可以换个显示的方式:

git log --pretty=oneline

每一行上黄色字体显示的是版本的ID信息,后面绿色的显示的是你的提示信息,我们之后要版本回退就是根据这些黄色的ID信息

现在我们想回退到上一个版本,可以有两种方法:

使用命令:
git reset --hard HEAD^,即可
HEAD代表最新的版本,HEAD^^表示上个版本的上个版本,依次类推

可以看到此时的版本已经回退到上一个版本(大家可以对比上一张图片),此时查看下README.txt的内容 应该是上个版本的内容了

版本号

OK,现在我们已经回退了,突然发现这个不是我们想要的,我们要修改的是在最新的那个版本上修改,这时我们已经进行了版本回退,该怎么办呢?

git reflog ## 获取修改的历史操作

git reset --hard 版本号 ## 使用版本号进行回退

Git使用_第4张图片

通过reflog得到命令历史,可以得到版本号,之后通过版本号进行回退即可,需要注意的是版本号不一定要写全,像我的例子就是没有写完,git会自动匹配到最接近的

工作区与缓存区(stage)

上面我一直说,git add将文件加入到缓存区,git commit讲其提交到本地仓库,下面就说说工作区与缓存区

工作区:
除了.git不属于工作区,你看到的目录都是工作区

缓存区(stage/index):
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

我们进入.git目录下查看:

Git使用_第5张图片

现在我们明白,使用Git提交文件到版本实际是有两步:

第一步:是使用 git add 把文件添加进去,实际上就是把文件添加到缓存区

第二步:使用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支上

撤销修改

撤销修改使用:

git checkout -- FILENAME

这个命令会见缓存区中的文件和工作区的文件进行对比,返回到缓存时的状态,比如:

(1) 你在工作区的修改没有add到缓存区
毫无疑问,此时checkout的一定是缓存区中的文件,相当于丢弃工作区的内容

(2) 你在工作区的修改已经add到缓存区
之后你再对文件进行修改,不使用add,checkout的结果一定是缓存区中的,相当于丢弃第一次add之后所做的更改

示范:

我们先对README.txt进行修改,增加一行”Check Test”,第一次没有进行add操作:

Git使用_第6张图片

此时使用 git checkout -- README.txt

Git使用_第7张图片

此时的”Check Test”就没了

这时候我们讲修改的进行提交,再次进行修改操作,再次撤销看看结果如何:

Git使用_第8张图片

可以看到所做的修改被撤销

删除文件

假设此时我们新建了个test.txt,然后add到缓存区并提交

$ touch test.txt
$ vi test.txt
$ git add test.txt
$ git commit -m "Add test.txt"

假设我们不小心在工作区删除了test.txt,此时有两种选择:

(1) 希望恢复test.txt

使用命令
git checkout -- test.txt

因为此时缓存区有你的test.txt,结合我们说的checkout是对比缓存区与工作区的,自然就会将缓存区test.txt拉回来

(2) 希望缓存区也删除test.txt

git rm test.txt ## 将缓存区的test.txt也删除

默认情况下,git rm file 会将文件从缓存区和你的硬盘中(工作目录)删除
如果你要在工作目录中留着该文件,可以使用 git rm --cached

Git使用_第9张图片

如果此时你发现test.txt还是要的,需要将它变回来,这个怎么办???

相信大家已经想到,就是版本回退嘛

git reset --hard ID

Git使用_第10张图片

这样的话,大家已经看到test.txt已经回退回来了

移动文件

现在假设你想重命名文件,重命名磁盘上的文件,然后再执行 git add 把新文件添加到缓存区,可以使用下面的命令:

git mv FILENAME NEWFILENAME

Git使用_第11张图片

看看到现在为止的历史操作

Git使用_第12张图片

使用Github

到现在我们只是在本机上玩玩git,并没有涉及到真正的分布式存储,使用github可以创建我们的远程仓库可供别人fork下来修改然后提交给你,或者你自己进行修改

注册github

Github官网,自己注册去吧

创建一个仓库(reposity)

查看HTTP和SSH的仓库地址:

Git使用_第13张图片

图上我标红的就是

由于我使用的是SSH,所以:

安装SSH

sudo apt-get install openssh-server

将本地SSH公钥添加到Github上

<1>生成公钥

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

产生的位置在~/.ssh中,id_dsa.pub就是公钥

Git使用_第14张图片

setting中打开SSH-keys添加ssh key就可以了

Git使用_第15张图片

本地的版本库与远程关联

咱们在开始创建的工作区再创建个文件夹testGit,并在tetsGit文件夹下创建文件README.ttxtest.txt

接下来将远程仓库和本地进行关联:

git remote add origin [email protected]:GavinZhou2014/testgit.git

此时的状态是:

Git使用_第16张图片

表示testGit需要提交

本地添加并提交

将项目添加到本地仓库并进行提交

$ git add testGit
$ git commit -m "Version 1.0 testGit"

Git使用_第17张图片

远程推送

之前我们已经将远程的Github仓库和本地进行关联,现在只需要进行推送就可以了

git push -u origin master

由于远程库是空的,我们第一次推送master分支时,加上-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令

Git使用_第18张图片

之后你再做修改的话,需要进行远程提交直接就是:

git push origin master , 不需要加上-u参数

此时进入咱们的GitHub项目上看看是什么效果:

Git使用_第19张图片

可以看到,成功创建一个远程的GitHub项目

clone远程仓库到本地

咱们现在要克隆一个别人的代码下来,先找到地址,比如:

Git使用_第20张图片

SSH地址明显是:[email protected]:whtsky/WeRoBot.git

使用命令:

git clone URI,就可以clone下来

$ git clone git@github.com:whtsky/WeRoBot.git

就会在当前目录下创建项目名称WeRoBot这个文件夹,里面就是代码

GitHub其它操作

还有很多的操作没有写,比如创建分支等等,有兴趣的可以看看这篇博客HERE

写的很不错,简单易懂,可供参考

你可能感兴趣的:(github,git)