Git学习笔记(上篇)

news2024/11/18 4:25:46

导航小助手

一、Git初识

1.1 场景

1.2 版本控制器

1.3 注意事项

二、Git安装

2.1 Linux-centos

2.2 Linux-ubuntu

三、Git基本操作

3.1 创建Git本地仓库

3.2 配置Git本地仓库

3.3 认识工作区、暂存区、版本库

3.3.1 添加文件—场景一

3.3.2 添加文件—场景二

3.4 修改文件

3.5 版本回退

3.6 撤销修改

场景一:对于工作区的代码,还没有add

场景二:已经add,但没有commit

场景三:已经add,并且也commit了

3.7 删除文件


一、Git初识

1.1 场景

现在老板需要小李产出一份 设计文档,于是 小李 就屁颠屁颠的去做文档了~

当小李做完了之后,老板不是很满意,于是就只能去 进行第2次修改;之后修改之后,老板说还不如第一次文档,继续再次修改吧;......;最终修改了 n次,就把设计文档发给了老板;老板却又说,看了这么多的文档,还是觉得第一次设计出来的是最符合预期的;此时,......

实际上,小李从开头到现在,只是对着一份文档进行修改的;所以说,此时文档保留的内容 只是第 n 次修改后的内容,并不可以直接拿出第1次的设计文档~

有了这一次的教训,下一次小李在做设计文档的时候,就开始对做好的文档 进行复制粘贴,做一个副本了:

当然,在n比较小的时候,这种办法还是比较好的~

但是,当n比较大的时候,想要拿到其中的某一份文档 是可以拿的出来的,但是 想要知道在这么多文档中需要拿出一份 新增了A功能的文档,估计这就不可以了~

即:随着版本的不断增多,维护好版本还是有挑战的:如 各自版本所修改的内容就不一定记得了~

1.2 版本控制器

为了解决这个问题,大佬们就提出了 版本控制器!!!

通俗的解释:需要记录每次的修改内容,以及版本迭代的 一个管理系统~

版本控制器 有很多种,其中 Git 就是其中的最主流的一个,可以控制电脑上的所有格式的文件:.doc、.docx、png、......

对于 开发人员 来说,使用Git可以帮助管理项目中的源代码文件~

1.3 注意事项

版本控制器 只能追踪到 文本文件 的改动,如:txt文件、程序代码 等等;它可以告诉每一次的变化,如 第2行增加了 "git"单词~

但是,对于 二进制文件,如:图片,视频等等;只能知道 从 100kb 变成了 200kb,但是其中具体改了啥,并不能很清楚的知道~

二、Git安装

2.1 Linux-centos

在 Linux环境下 安装 Git 其实非常简单,只需要一行命令即可解决~

首先,我们先来查看一下 Linux服务器 下面有没有安装 Git,可以使用下面的命令 查看安装过的Git版本:

git --version

此时如果当前安装好了的话,就会显示出安装过的版本

可以看到,其实我是已经安装好了的~

当然,现在可以删除安装过的Git:

sudo yum remove git -y

之后查看 Git 的版本号,就会发现,已经查看不了了:

此时,就可以安装 Git 了:

sudo yum install git -y

在安装好了之后,就可以继续查看刚刚所安装的版本了:

2.2 Linux-ubuntu

和 上面的一样,可以查看如果下载后的版本:

可以删除如果已经下载好的Git:

也可以现在继续下载Git:

 

三、Git基本操作

3.1 创建Git本地仓库

Git 是一个 版本控制器,如果想要对每一次修改的记录、版本迭代的一些详细内容,就可以使用 Git 去追踪管理它们~

而如果想要追踪管理,这些文件就不可以随便乱放,只有在 Git本地仓库下面 的文件才可以被 Git 所追踪管理的~

我们可以重新建立一个 gitcode目录,打算在这里面做一些Git的基本操作;当我们进入这个目录之后,就可以使用下面的命令来创建一个本地仓库:

git init

可以看见,它自动创建了一个 .git隐藏文件(我们不应该去修改 .git隐藏文件里面的任何内容!)  

3.2 配置Git本地仓库

在创建 Git本地仓库 成功之后,我们还需要为本地仓库 新增两个配置项:name、email(是必须要配置的)~

配置命令为:

git config [--global] user.name "用户的名称"
git config [--global] user.email "邮箱的格式"

查看所配置的命令为:

git config -l

删除配置的命令为:

git config --unset user.name
git config --unset user.email

注意:

其中,--global 是一个可选项,它的作用是:在一台服务器上,可以创建不止一个本地仓库;如果加了这个可选项,就表示 在当前服务器下的 所有的Git本地仓库 都生效~

 当然,如果加了 --global可选项,那么删除该配置项的时候,不可以直接使用上面的命令;必须加上--global可选项:

git config --global --unset user.name
git config --global --unset user.email

3.3 认识工作区、暂存区、版本库

Git是一个 版本控制器,使用Git就可以对电脑上所有格式的文件进行管理,需要将所要管理的文件放到Git仓库中进行维护~

如:此时 直接在 Git仓库 创建一个 ReadMe文件:

当然,在目前情况下,Git 还是不能管理 ReadMe文件~

工作区:电脑上、服务器上 所要写的代码、文件的目录

暂存区:英文叫做stage或者index,又称之为"索引",一般存在于 .git目录 里面的 index文件里面

版本库:又称之为"仓库",即 "工作区"中的隐藏文件".git"

ReadMe文件 还不能够被Git管理,是否把该文件放进 .git文件 里面,就可以进行管理了呢?答案肯定是不可以的,该隐藏文件是不可以进行手动修改的!!!

所以,就把ReadMe文件放在了 gitcode目录下,即:"工作区"里面~

3.3.1 添加文件—场景一

第一步,使用 git add 命令 将所要提交的文件先添加到暂存区:

  • 添加一个或多个文件 到暂存区
    git add 文件名1 [文件名2][文件名3]......
  • 添加目录 到暂存区
    git add 目录名
  • 添加当前目录下的所有内容的修改 添加到暂存区
    git add .

第二步,使用 git commit 命令 将暂存区的内容添加到本地仓库:

  • 提交 暂存区的全部内容 到本地仓库中
    git commit -m "message"
    	注意:message 是 本次所要提交的细节,给自己看的不能省略
  • 提交 暂存区的指定文件 到本地仓库中
    git commit 文件名1 [文件名2][文件名3]... -m "message"
    	注意:message 是 本次所要提交的细节,给自己看的不能省略

此时,我们可以使用下面的命令,来查看时间从近到远的提交记录:

git log

 

当然,我们可以加一个选项参数,使日志看起来更加的可观:

git log --pretty=oneline

 

3.3.2 添加文件—场景二

首先创建一个 file4文件,接着add  file4一下;接着 继续创建一个 file5文件,此时 想要提交一次(希望想要把 file4file5文件 都提交到本地仓库),结果会发现只有一个文件提交上去了~

实际上,add只是把 file4文件 放到了暂存区中,所以 提交的时候只会提交 file4一个文件,而并不会把两个文件一起提交~

3.4 修改文件

对于工作区的一些操作,如:新增、删除、修改文件等等,都算是修改的操作~

结论:Git 追踪管理的是修改,而不是一整个文件~

比如说,现在对 ReadMe文件 新增一行内容:

之后,就可以使用下面的命令 来查看当前仓库的状态:

git status

当然,我们可以使用下面的命令来 查看暂存区和工作区之间的差异:

git diff [文件名]

之后,就可以使用  git add  操作、 git commit 操作 即可~

3.5 版本回退

版本回退 功能 是 Git 最重要的能力之一,作为版本控制器,Git可以管理文件的历史版本~

执行命令:

git reset [--soft | --mixed | --hard] [HEAD]

git reset 本质上是回退 版本库 中的内容,工作区或暂存区是否会退 则需要根据后面的可选项决定~

默认的选项是:--mixed 选项,使用时可以不添加该参数~

当然,还可以回退到当前版本(将工作区、暂存区里面的内容 回退到 和版本库保持一致的内容(即:版本库内容=工作区、暂存区内容)这个在下面介绍)~

注意:

慎用的是 --head选项,一不小心回退了之后,那么就找不到刚刚写的了

比如说,对于 ReadMe文件,是有两个版本的:版本1 是只有 hello git内容,版本2 是在 版本1 的基础上增加了 hello world内容

工作区暂存区版本库
版本2 回退git worldgit worldgit world
--softgit worldgit worldgit
--mixed:默认选项git worldgitgit
--hard:慎用gitgitgit

以使用 --hard选项为例:

 此时,如果再次打印日志信息,就会发现 后面的提交的日志都不见了,只有一份日志信息:

如果说,现在又突然后悔了,又突然想要回到原先版本2的内容,有没有可以回去的办法?

当然,因为一开始我们知道了 版本2 的 commit id(一开始打印出来的日志里面有):

如果说,服务器突然关闭了,或者是突然清屏之类的,使得找不到对应的 commit id,怎么办?

我们可以使用下面的命令来查看 每一次的提交命令:

git reflog


版本回退速度迅速的示意图:

3.6 撤销修改

如果在工作区中已经写了很长时间的代码,但是 越写越觉得写的代码很垃圾,想恢复到上一个提交的代码,就需要进行撤销修改操作~

场景一:对于工作区的代码,还没有add

这种情况,想要撤销的代码 存在于 工作区~

首先,我们先对 ReadMe文件 增加一行内容:

当然,我们可以在这种情况下 直接手动编辑 ReadMe文件,以删除新增的内容;但是 也会有这样一种可能性,这代码已经开发三四天了,已经写了很多很多行代码了,此时 手动删除就不是很方便了,也不能保证删除的内容是不是之前写的,可能改着改着就会出现 Bug 了(不推荐,容易出错)......

所以,Git 就提供了这样一个命令,直接完成对工作区的回退,回退到上一个版本:

git checkout -- 文件名

 

场景二:已经add,但没有commit

这种情况,想要撤销的代码 存在于 工作区、暂存区~

同样的,继续对 ReadMe文件 进行一次修改,以用来演示:

 对于这种情况,我们可以使用下面的命令:

git reset [--mixed | --hard] [HEAD]
    注意:该命令将工作区、暂存区里面的内容 回退到 和版本库保持一致的内容(即:版本库内容=工作区、暂存区内容)

使用 --hard选项 时,工作区、暂存区、版本库 同时回退,此时 工作区、暂存区里面的代码就撤销了,符合预期~

使用 --mixed选项 时,暂存区、版本库 同时回退,此时只剩下工作区的代码需要回退了,就变成了和场景一的情况了~


 

场景三:已经add,并且也commit了

这种情况,想要撤销的代码 存在于 工作区、暂存区、版本库~

咳咳,前提条件:commit 之后没有 push,没有推送到远程仓库,撤销的目的是不会影响远程仓库的代码~

我们同样可以使用 git reset命令,来对代码进行回退:

git reset --hard HEAD^

 同样,准备工作需要做好:


总结:

3.7 删除文件

删除文件,不仅仅是需要将 工作区 中的内容删除,而且还同时要把 暂存区、版本库 里面的内容删除~

所以,我们不可以 仅仅使用 rm命令 删除(仅仅删除 工作区 内容)~

我们可以使用两种方式 来删除文件:

第一种方式(咳咳,这种方式没试出来):

  • rm命令 文件名

  • git add 文件名(将工作区中的变动 提交到暂存区)

  • git commit -m "message" 进行提交命令    

第二种方式(自己比较推荐这种方式):

  • git rm 文件名

  • git commit -m "message"

咳咳,原来有的 file3file4file5文件 试没了,不必在意这些细节......

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/660950.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python怎么重新执行代码

Python怎么重新执行代码 如果你正在学习编程,你可能已经意识到Python是一种非常流行的语言。Python是一种如此强大的编程语言,可以应用于许多领域,从数据分析到游戏开发,甚至是Web开发。但是,在编写Python代码时&…

026.【图形结构算法】

1. 图的定义 树形结构用于描述节点和节点之间的层次关系,而图形结构用于描述两个顶点之间是否连通的关系。在计算机科学中,图形结构是最灵活的数据结构之一,很多问题都可以使用图来求解。 无向图是每条边都没有方向的图,同一个边…

chatgpt赋能python:重新安装Python——让你的编程之路更畅通

重新安装Python——让你的编程之路更畅通 Python是一种高级编程语言,广泛应用于软件开发、数据科学、机器学习等领域,因其易学易用、拥有丰富的第三方库和社区支持而备受程序员们的喜爱。但是,有时候你可能会遇到无法解决的Python问题&#…

Linux 4.10当中将带来深远影响的三项小改变

Linux的演进永不停歇。Linus Torvalds一直在努力工作,希望能够在新的内核版本当中(4.11)融入更多变化。不过在目前的Linux 4.10中,我们同样发现了三组能够有效提升性能并实现多种前所未有功能集的变更。 下面,我们将共同了解这些可能对您、您…

0006-TIPS-2020-hxp-kernel-rop : bypass-KASLR-with-offset_leak

内核默认加载地址(不开启KASLR) kernel text mapping 在内核linux-5.9/Documentation/x86/x86_64/mm.rst文档中记录了 x86_64虚拟地址空间布局 其中0xffffffff80000000~0xffffffff9fffffff用于存放内核代码段、全局变量、BSS等 ffffffff80000000 | -…

华为OD机试真题 JavaScript 实现【字符串序列判定】【2022Q4 100分】,附详细解题思路

一、题目描述 输入两个字符串a和b&#xff0c;都只包含英文小写字母。a长度<100&#xff0c;b长度<500,000。 判定a是否是b的有效子串。 判定规则&#xff1a; a中的每个字符在b中都能找到&#xff08;可以不连续&#xff09;&#xff0c;且a在b中字符的前后顺序与a中…

【SQL应知应会】分析函数的点点滴滴(一)

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习&#xff0c;有基础也有进阶&#xff0c;有MySQL也有Oracle 分析函数的点点滴滴 1.什么是分析函数&#xff1a;…

万字详解常用设计模式

本文是博主在工作中对常用设计模式的使用经验总结归纳而来分享给大家。 设计模式一共有23种&#xff0c;本文讲解涉及如下&#xff1a; 责任链模式 模板方法模式 发布订阅模式 策略模式 三大分类 业界一般将设计模式分为三大类&#xff1a; 创建型模式&#xff1a;对类的实…

chatgpt赋能python:Python怎样调字体大小以及优化网站SEO

Python怎样调字体大小以及优化网站SEO 在现代网络时代&#xff0c;网站的排名和SEO越来越受到关注。有一些关键词和技巧可以用来在搜索引擎排名中获得好的位置。其中一个技术是调整字体大小。在本文中&#xff0c;我们将深入探讨如何使用Python调整字体大小&#xff0c;并进一…

chatgpt赋能python:Python如何随机产生多个随机数?

Python如何随机产生多个随机数&#xff1f; Python是一种高级编程语言&#xff0c;它的随机数生成器是其强大的功能之一。在本文中&#xff0c;我们将学习如何使用Python随机数生成器生成多个随机数。 基本概念&#xff1a;随机数生成器 随机数生成器是一种算法或物理设备&a…

【Python】APScheduler定时调度库

文章目录 APScheduler是什么功能特点四大组件触发器[triggers]date 一次性触发器interval 间隔触发器cron 周期触发器 任务存储器[JobStore]MemoryJobStoreMongoDBJobStoreRedisJobStore示例代码 RethinkDBJobStoreSQLAlchemyJobStoreZooKeeperJobStore 执行器[executors]线程池…

chatgpt赋能python:Python如何隐藏进程

Python如何隐藏进程 介绍 进程是指运行中的程序在操作系统中的一个实例。在计算机系统中&#xff0c;进程通常都可以被用户或者其他程序所看到。然而&#xff0c;有时候我们需要隐藏进程&#xff0c;比如保护敏感信息或者防止恶意攻击。 Python是一种高级编程语言&#xff0…

Maven学习笔记(SSM 整合伪分布式案例)

目录 第一节 创建工程&#xff0c;引入依赖 1 创建工程 ①工程清单 ②工程间关系 2、各工程 POM 配置 ①父工程 ②Mybatis 逆向工程 ③环境依赖工程 ④工具类工程 ⑤实体类工程 ⑥组件工程 ⑦Web 工程 第二节 搭建环境&#xff1a;持久化层 1、物理建模 2、Myba…

leetcode算法 -- 数组

1 数组 常见的数组算法有双指针&#xff0c;滑动窗口&#xff0c;二分查找和分冶。 2 双指针 核心的思路&#xff1a;使用两个指针&#xff0c;一个从头开始索引&#xff0c;一个从尾开始索引。 2.1 两数之和ii 167 给你一个下标从 1 开始的整数数组 numbers &#xff0c;该…

chatgpt赋能python:Python怎么随机生成一个数

Python怎么随机生成一个数 在Python编程中&#xff0c;经常有需要随机生成一个整数的需求&#xff0c;比如在游戏中生成随机的道具&#xff0c;或者在数据分析中进行随机采样。 Python中提供了一个内置的random模块&#xff0c;可以方便地实现随机生成一个数。 使用random模…

【Windows】虚拟串口工具VSPD6.9安装

【Windows】虚拟串口工具VSPD6.9安装 1、背景2、安装3、补丁4、验证5、下载 1、背景 参考【Windows】虚拟串口工具VSPD7.2安装。 本博客安装的版本是VSPD6.9&#xff0c;并在文末留下下载链接&#xff0c;以供学习研究。 虚拟串口工具一般用来做上位机软件的串口通信调试&…

Java性能权威指南-总结14

Java性能权威指南-总结14 堆内存最佳实践对象生命周期管理对象重用 堆内存最佳实践 对象生命周期管理 在很大程度上&#xff0c;Java会尽量减轻开发者投入到对象生命周期管理上的精力&#xff1a;开发者在需要的时候创建对象&#xff0c;当不再需要这些对象时&#xff0c;它们…

C++11新特性之右值引用

目录 前文 一&#xff0c;什么是右值引用&#xff1f; 二&#xff0c;左值引用和右值引用比较 三&#xff0c;右值引用的应用场景以及作用 四&#xff0c; 右值引用左值的场景分析 五&#xff0c;完美转发 总结 前文 在C98标准后&#xff0c;C11标准的更新为C注入了新活力&…

chatgpt赋能python:Python如何生成100个随机整数

Python如何生成100个随机整数 在Python中&#xff0c;我们可以使用random库来生成随机整数。在本文中&#xff0c;我们将介绍如何使用Python生成100个随机整数。 什么是随机整数 随机整数是指在一定范围内&#xff0c;产生的整数是随机的且不重复的。这在数据分析、机器学习…

2. CSS的元素显示模式

了解元素的显示模式可以更好的让我们布局页面. 1.什么是元素的显示模式 2.元素显示模式的分类 3.元素显示模式的转换 2.1什么是元素显示模式 作用:网页的标签非常多&#xff0c;在不同地方会用到不同类型的标签&#xff0c;了解他们的特点可以更好的布局我们的网页。 元素显示…