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

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

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

$ git diff README.txt

显示添加了一行”Day3”

此时我们提交:

版本回退

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

提交到版本库:

git commit -m "Alert Day3"

查看历史版本: git log

结果是:

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

git log --pretty=oneline

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

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

HEAD

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

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

版本号

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

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

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

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

工作区与缓存区(stage)

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

工作区: 除了.git不属于工作区,你看到的目录都是工作区 缓存区(stage/index): Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

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

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

第一步:是使用 git add 把文件添加进去,实际上就是把文件添加到缓存区 第二步:使用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支上

撤销修改

撤销修改使用:

git checkout -- FILENAME

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

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

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

示范:

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

此时使用 git checkout -- README.txt

此时的”Check Test”就没了

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

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

删除文件

假设此时我们新建了个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

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

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

git reset --hard ID

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

移动文件

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

git mv FILENAME NEWFILENAME

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

使用Github

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

注册github

Github官网,自己注册去吧

创建一个仓库(reposity)

查看HTTP和SSH的仓库地址:

图上我标红的就是

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

安装SSH

sudo apt-get install openssh-server

将本地SSH公钥添加到Github上

<1>生成公钥

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

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

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

本地的版本库与远程关联

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

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

git remote add origin git@github.com:GavinZhou2014/testgit.git

此时的状态是:

表示testGit需要提交

本地添加并提交

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

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

远程推送

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

git push -u origin master

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

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

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

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

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

clone远程仓库到本地

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

SSH地址明显是:git@github.com:whtsky/WeRoBot.git

使用命令:

git clone URI,就可以clone下来

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

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

GitHub其它操作

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java编程技术

Spring之配置项管理小结

正如webx框架文档里面所说,在一个应用中我们总是会遇到一些参数,例如:数据库服务器IP地址、端口、用户名;这些参数有一个共性,那就是:它们和应用的逻辑无关,只...

541
来自专栏IT可乐

Linux系列教程(十一)——Linux软件包管理之RPM命令

  前面我们介绍了Linux系统的常用命令介绍和文本编辑器vim命令的介绍。那么从这篇博客开始,我们会正式的讲解Linux的系统管理,首先要讲的是Linux的软...

1826
来自专栏pangguoming

PowerDesigner设置表字段唯一约束

现有一个表student,id为主键。 ? 现打算给name添加一个唯一约束。 双击打开这个表,点击“keys"选项卡,显示有一个key_1,这是id主键。 ?...

3477
来自专栏木头编程 - moTzxx

CentOS下(rsync+inotify)监听式实现服务器间的备份实时同步

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

841
来自专栏逸鹏说道

Ubuntu18.04 下的Gif录制工具

添加一下源:sudo add-apt-repository ppa:peek-developers/stable

885
来自专栏架构技术

使用docker+consul+nginx集成分布式的服务发现与注册架构

consul-Server 是运行在docker里的consul实例的server模式,可以通过DNS或者HTTP接口使服务注册并对容器进行健康状态检查,con...

463
来自专栏北京马哥教育

这些git技能够你用一年了

用git有一年了,下面是我这一年来的git使用总结,覆盖了日常使用中绝大多数的场景。嗯,至少是够用一年了,整理出来分享给大家,不明白的地方可以回复交流。 ---...

2737
来自专栏技术沉淀

Python: 文件操作

1564
来自专栏coding

ubuntu安装lemp步骤

1174
来自专栏ml

javaSE基础之记事本编程

     首先安装好jdk和jre,之后进行如下操作:           1. 将代码记事本----》cmd--->javac 文件名.java ----->...

2827

扫码关注云+社区