热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

git学习(一)

Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理,现在在企业中的使用率也是很广的。git是一个分布式的版本控制系统,不像以前的svn,svn是

      Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理,现在在企业中的使用率也是很广的。git是一个分布式的版本控制系统,不像以前的svn,svn是只能联网才能工作,就算修改了很少的一部分代码,都必须将该文件在继续上传到svn服务器,就算是局域网络,这样做也是很消耗时间的,在加上,如果svn服务器挂掉了,那么程序员都是无法工作的,而且如果svn服务器的数据丢失了,oh my god!一切都得从头开始了,然而git就不是这样,他是一个分布式的版本控制系统,即我们每一个本地的主机都是一个完整的库,虽然我们也是需要将修改的文件在上传的服务器的,但是却有诸多的安全性。git是linux和核心创始人利用一周的时间开发出来的。

        首先需要安装git,先来看看linux下的安装方式:

        在linux命令行下,我们可以试着先输入git,看看有没有安装git,如果系统提示没有安装,那么在命令行下:sudo apt-get install git   ,这样既可完成git的安装工作。如果这样不能安装的话,应该是linux的版本比较老。可以试着输入sudo apt-get install git-core   来完成安装。

       在windows下,有一个一键安装的git工具,叫做msysgit,可以去下载,然后基本上是一键安装的。git下载,   完成安装以后,会在桌边有一个git-core的快捷方式,如果没有的话,那么我们打开git的安装目录,手动打开也可以,打开该快捷方式,会出现如下图的界面:

技术分享

可以看到输入git version,就可以看到我目前使用的git版本了。这也说明安装git成功了。安装完成以后,就需要设置我们的git了,用如下命令来进行设置:

git config --global user.name "用户名"

git config global user.email "email"

这里我的配置如下:

技术分享

      在配置好了git以后,我们就需要创建我们的版本库了。什么是版本库呢?版本库其实就是一个目录,git可以通过它,来管理我们的文件,包括了修改的添加的等等等等。

这里我在F:盘下新建一个目录用来学习git,"f:/gitlearn",然后再git-core的终端,输入git init    ,这样一个空的版本库,就创建好了。如下图:

技术分享

        可以看到在该目录下多了一个.git文件,这个文件时隐藏文件,看不到也没关系,而且千万不能删除该文件。对于git来说,他可以管理跟踪文本文件,程序代码等文件的修改和各种改动,并且可以知道那个文件修改了什么,增加了什么。但是对于二进制文件,就不能那么准确了,git只能知道我们改动了那个文件,但是改动了那些地方,就无能为力了。

        接上文,我们编写一个gitfirst.txt的文本文件,内容如下:
git is a good version control.
i like to learn it.

注意如果我们想要将该文件添加到git的版本库当中,那么必须将该文件放入到拥有.git文件的目录,或者他的根目录中,这样git才可以找到该文件。

        接下来就是将gitfirst.txt添加到版本库了,分为两步:

第一步:

git add gitfirst.txt

第二步:

git commit -m "add a gitfirst file“

这样就完成了gitfirst.txt文件添加到本地的版本库工作:

技术分享

这里我说明一下:git commit -m "",   这里-m的参数的意思就是添加的说明。    需要注意的是,将文件添加到git版本库当中,必须首先执行git add,然后执行git commit,才可以,git add只是将该文件添加到临时的中间目录当中,git commit才是真正将该临时目录的文件添加到真正的版本库当中的。我们可以一次行的git add多个文件,然后一次性的通过git commit来完成提交。

总结:

通过git init来初始化一个仓库,然后再.git目录或者其子目录当中,输入更改或添加文件,然后执行git add 文件名,在执行git commit  -m ”说明“  ,这样可以将文件添加到本地的版本库了。

接下来我修改gitfirst.txt文件,然后再将其添加进版本库当中,这里我添加了一句话,如下:

git is a good version control.

i like to learn it.
        add a string git is free. 

可以看到,和之前的文件相比,我添加了"add a string git is free. "  这样一句话。首先通过git status,查看当前git库下那些文件被修改了,同样可以通过git diff看到详细的修改信息,包括哪一行修改了,添加了什么,删除了什么等。最后就是像之前那样,通过git add 文件名    以及 git commit -m "添加说明" 这样的方式,将其添加到版本库当中。

技术分享

可以看到通过git diff可以看到详细的修改信息。

接下来问题来了,那么如果,我之前添加的那一句话"add a string git is free."  发现添加错误了,我需要回退到之前的版本,这下怎么办,别急,是可以的。这里为了验证,我先分别进行三次不同的添加:

第一次:

git haha

第二次:

git test

第三次:

git gaga

在这三次添加完成之后,可以通过,git log,查看我这几次包括之前的提交记录。

技术分享

可以看到详细的提交记录,这里的"three" ,"two" ,”one“ 就是我通过git commit -m "说明"   这里的说明。如果我们嫌通过git log显示出来的信息太多的话,可以通过这样的命令:"git log --pretty=oneline",来显示,如下:

技术分享

注意到每一次提交git都会自动为我们添加一大串我们不认识的字符,这是就是我们的commit id,git通过它来记录我们每一次的提交,我最后一次添加的是"git gaga",这样的字符串,如果我需要将其回退到之前的版本,可以这样做。

git reset --hard HEAD^

这里,我说明一下:HEAD 表示的是当前版本,HEAD^表示上一个版本,当然HEAD^^表示上上一个版本,那么如果需要回退到前20个版本怎么办呢??可以这酱紫:HEAD ~100

通过查看gitfirst.txt可以看到我们的文件回退到了上一个版本,这里我在回退的时候发现在window下的git-bash貌似不能复制,其实是可以的,如下图:

技术分享

这样就可以复制粘贴了,哎,和ubuntu下比起来,还是稍微麻烦了一点,言归正传,我们再次通过git log --pretty=oneline查看当前的提交记录:

8aa4dec5b57c334da8a81361312deab1512a7265 one
       1dbd2f7e16112559fe5c5004fb277fa01748ee58 add a string
        579b28a5c26b83931f601469e71a2cb3c110b271 add a gitfirst file

发现确实回退了,这里由于我操作了两次git reset --hard HEAD^  的原因,所以直接会退到"one"的提交记录了。如果我有后悔了,我又想从现在的版本回退到最新的版本怎么办。我们可以通过这个命令来查看我们的git记录:git reflog

技术分享

然后使用命令git  reset --hard commit_id 来回到指定的版本。比如:我想回到"three"的最新版本,该怎么操作呢???"git reset --hard 2d223ec"  ,这样过后,就可以回到最新的版本了。查看文件内容发现确实回到three的版本了。

总结:

通过git reset --hard commit_id 可以回到任何一个版本

通过git log可以看到git的提交记录,同样可以通过git --pretty=oneline来查看简短的记录。


那么问题有来了,如果我还没有提交发现我修改的文件时错误的,这时候该怎么办呢???这里我向”gitfirst.txt“中添加这样一句话:"oh my god i am wrong",,,此时执行git status发现已经更改,并且git 会给我提示,应该如何回退到上一个版本

技术分享

可以看到这里我通过"git checkout -- gitfirst.txt" ,来回退我的修改,查看文件,刚才添加的那一行"oh my god i am wrong" ,确实不存在了,说明我们回退成功了。注意,这里我是在还没有将该文件通过"git add"添加到暂存区的情况。那么如果我已经git add gitfirst.txt文件了,怎么办呢??看下图:

技术分享

可以看到当我添加该文件到暂存区当中以后,通过git status,系统会提示我通过 git reset HEAD ,我先使用git reset HAD 文件名,然后使用git  checkout -- 文件名来回退到没有修改时候的版本。


那么如果我在git中不小心删除了文件怎么办呢??这里我首先在该版本库当中新建一个"tobedelete.txt"的文本文件,然后通过git add 和git commit将其添加到版本库当中,此时如果我不小心将该文件删除了,这下该怎么办?先看下图:

技术分享

可以看到当我删除该文件以后,通过git status继续查看该状态,系统会提示我们可以通过git checkout -- file的形式恢复之前的删除。这一次,我先执行该命令:

git checkout -- tobedelete.txt

这样被删除的文件就恢复了。查看本地的该文件发现确实有恢复了。是不是很神奇呢。

这里关于删除还有另一种情况,如果我确实需要将该文件从本地和版本库当中删除该怎么做:其实git 已经给我们提示的很明显了,如下图:

技术分享

通过上边几个命令就完成了删除操作,包括了从本地库删除,和恢复删除的文件到本地库。


好了,git学习的第一阶段就到这里。希望大家喜欢。

      

git学习(一)


推荐阅读
  • 本文探讨了C++编程中理解代码执行期间复杂度的挑战,特别是编译器在程序运行时生成额外指令以确保对象构造、内存管理、类型转换及临时对象创建的安全性。 ... [详细]
  • 深入剖析JVM垃圾回收机制
    本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ... [详细]
  • 解决TensorFlow CPU版本安装中的依赖问题
    本文记录了在安装CPU版本的TensorFlow过程中遇到的依赖问题及解决方案,特别是numpy版本不匹配和动态链接库(DLL)错误。通过详细的步骤说明和专业建议,帮助读者顺利安装并使用TensorFlow。 ... [详细]
  • 深入理解ExtJS:从入门到精通
    本文详细介绍了ExtJS的功能及其在大型企业前端开发中的应用。通过实例和详细的文件结构解析,帮助初学者快速掌握ExtJS的核心概念,并提供实用技巧和最佳实践。 ... [详细]
  • 通常情况下,修改my.cnf配置文件后需要重启MySQL服务才能使新参数生效。然而,通过特定命令可以在不重启服务的情况下实现配置的即时更新。本文将详细介绍如何在线调整MySQL配置,并验证其有效性。 ... [详细]
  • Python自动化测试入门:Selenium环境搭建
    本文详细介绍如何在Python环境中安装和配置Selenium,包括开发工具PyCharm的安装、Python环境的设置以及Selenium包的安装方法。此外,还提供了编写和运行第一个自动化测试脚本的步骤。 ... [详细]
  • 本文详细介绍了如何解决 Microsoft SQL Server 中用户 'sa' 登录失败的问题。错误代码为 18470,提示该帐户已被禁用。我们将通过 Windows 身份验证方式登录,并启用 'sa' 帐户以恢复其访问权限。 ... [详细]
  • 本文详细介绍了get和set方法的作用及其在编程中的实现方式,同时探讨了点语法的使用场景。通过具体示例,解释了属性声明与合成存取方法的概念,并补充了相关操作的最佳实践。 ... [详细]
  • 本文详细探讨了Java中的包管理机制,包括默认包的使用和自定义包名的创建方法。通过实际操作,帮助开发者更好地理解和应用包管理。 ... [详细]
  • Python notes
    6.1.1.执行模块当你用下面的方式运行一个Python模块pythonfibo.py模块中的代码将会被执行,就像导入它一样,不过此时__name__被设置为__main__。 ... [详细]
  • 探索新一代API文档工具,告别Swagger的繁琐
    对于后端开发者而言,编写和维护API文档既繁琐又不可或缺。本文将介绍一款全新的API文档工具,帮助团队更高效地协作,简化API文档生成流程。 ... [详细]
  • 鼠标悬停出现提示信息怎么做
    概述–提示:指启示,提起注意或给予提醒和解释。在excel中会经常用到给某个格子增加提醒信息,比如金额提示输入数值或最大长度值等等。设置方式也有多种,简单的,仅为单元格插入批注就可 ... [详细]
  • 气象对比分析
    本文探讨了不同地区和时间段的天气模式,通过详细的图表和数据分析,揭示了气候变化的趋势及其对环境和社会的影响。 ... [详细]
  • 探讨 HDU 1536 题目,即 S-Nim 游戏的博弈策略。通过 SG 函数分析游戏胜负的关键,并介绍如何编程实现解决方案。 ... [详细]
  • 解决Spring Boot项目创建失败的问题
    在尝试创建新的Spring Boot项目时遇到了一些问题,具体表现为在项目创建过程中的两个关键步骤出现错误。本文将详细探讨这些问题及其解决方案。 ... [详细]
author-avatar
js陈富军中草药
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有