前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Git使用

Git使用

作者头像
GavinZhou
发布2018-01-02 16:00:06
6620
发布2018-01-02 16:00:06
举报

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

提交

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

代码语言:javascript
复制
$ 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到缓存区并提交

代码语言:javascript
复制
$ 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需要提交

本地添加并提交

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

代码语言:javascript
复制
$ 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下来

代码语言:javascript
复制
$ git clone git@github.com:whtsky/WeRoBot.git

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

GitHub其它操作

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-03-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 提交
  • 版本回退
    • HEAD
      • 版本号
      • 工作区与缓存区(stage)
      • 撤销修改
      • 删除文件
      • 移动文件
      • 使用Github
        • 注册github
          • 创建一个仓库(reposity)
            • 安装SSH
            • 将本地SSH公钥添加到Github上
          • 本地的版本库与远程关联
            • 本地添加并提交
              • 远程推送
              • clone远程仓库到本地
              • GitHub其它操作
              相关产品与服务
              对象存储
              对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档