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 条评论
登录 后参与评论

相关文章

来自专栏Clive的技术分享

Git的概念及常用命令概念优势常用命令

概念 Git是一个分布式的版本控制工具,区别于集中式管理的SVN。 ---- 优势 1、每个开发者都拥有自己的本地版本库,可以在本地任意修改代码、创建分支,不会...

2603
来自专栏运维小白

2.16 umask

umask命令介绍 umask命令,通过这个值可以确定文件和目录的默认权限是什么。 默认情况下,目录的权限值为755(rwxr-xr-x),普通文件的默认权限为...

1765
来自专栏王亚昌的专栏

在Ubuntu上挂载Windows分区的解决办法

 在我和实际使用中,字符集用utf8效果很好,没有出现乱码的问题,在终端挂载的代码如下: mount -t vfat /dev...

693
来自专栏PHP技术大全

使用PHP扩展Xhprof分析项目性能实践

项目即将上线,想通过一些工具来分析代码的稳定性和效率,想起在上个团队时使用过的xhprof扩展;因为换了新电脑,所以需要重新编译此扩展,现将安装与实际排查过程完...

771
来自专栏FreeBuf

Android App渗透测试工具分享

这段时间因为某些原因接触了Android App渗透测试,发现了几个不错的App渗透测试工具(虽然这些工具早就出来了 2333),搭建测试环境的过程中遇到了一些...

713
来自专栏WD学习记录

Linux学习笔记(1)

计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。操作系统接管硬件后,首先读入/boot目录下的文件。

691
来自专栏技术博文

linux最常用的20条命令

玩过Linux的人都会知道,Linux中的命令的确是非常多,但是玩过Linux的人也从来不会因为Linux的命令如此之多而烦恼,因为我们只需要掌握我们最常用的命...

3074
来自专栏编程坑太多

『中级篇』docker-swarm中的Service创建维护和水平扩展(45)

PS:docker service 内部有很多复杂的操作,虽然各位老铁用了简单的 一个创建一个删除,但是底层里面会知道有多个容器,在那个机器上边,这些机器里面的...

532
来自专栏LanceToBigData

开发问题(一)在windows和linux端口占用问题

前言   今天在MyEclipse中使用tomcat发现tomcat端口8080竟然被占用了,所以就找了一下解决办法共参考!   在网络程序的调试过程中,经常发...

17910
来自专栏编程坑太多

一个简单的Django项目

1364

扫码关注云+社区