分布式版本控制系统——Git

分布式版本控制系统——Git

  • 一、Git安装
  • 二、创建版本库
  • 三、将文件交给Git管理
  • 四、Git的工作区和暂存区
    • 1.工作区(Working Directory)
    • 2.版本库
  • 五、版本回退和撤销修改
    • 1.版本回退
    • 2.撤销修改
  • 六、删除文件
  • 七、常用基础命令总结
  • 八、参考


  • 分布式版本控制系统,每一台计算机都有一个完整的版本库。
  • 集中式版本控制系统,版本库存放在中央服务器。

  • 所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道
  • MicrosoftWord格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的,如果要真正使用版本控制系统,就要以纯文本方式编写文件。

一、Git安装

  • ① 在 Windows 上使用Git,可以从 Git官网直接下载安装程序,然后按照默认选项安装即可。
  • ② 安装完成后,在开始菜单里找到Git Bash,蹦出一个类似命令行窗口的东西,就说明Git安装成功了。
  • ③ 安装完成后,还需要最后的配置,因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
    git config --global user.name "Your Name"
    git config --global user.email "email@example.com"
    
    • 注意:git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

二、创建版本库

  • 版本库也叫仓库(repository),可以简单的理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
  • ① 首先,选择一个合适的地方,创建一个空目录:
    mkdir -p d:/code/test-git
    cd d:/code/test-git
    pwd
    
    在这里插入图片描述
    • pwd 命令是用来显示当前目录的。
    • 注意:使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(保留父目录)不包含中文。
  • ② 通过 git init命令把这个目录变成Git可以管理的仓库。
    在这里插入图片描述

三、将文件交给Git管理

  • ① 在刚才的仓库目录 test-git 目录下编写一个 readme.txt 文件,内容如下:

    Git is version control system.
    Git is free software.
    
    • 如果使用 Windows 出现上面的警告,我们现在先不用管的,不会影响使用的。
  • ② 用命令 git add 告诉Git,把文件添加到仓库

    git add <fileName> #添加一个文件
    git add . #添加所有文件
    

    在这里插入图片描述

  • ③ 用命令 git commit -m "这里写备注" 告诉Git,把文件提交到仓库:
    在这里插入图片描述

    • git commit 一次可以提交很多文件。
  • git status命令可以让我们时刻掌握仓库当前的状态。

  • git diff <filename>命令顾名思义就是查看difference,可以查看修改的内容。

  • 例如下面我修改readme.txt文件后查看,当前仓库的状态以及修改的内容:
    在这里插入图片描述

注意:Git管理的是修改(删除一行、删除一个文件、添加一个字符等都算修改),而不是管理的文件。
每次修改,如果不用git add命令到暂存区,拿就不会加入到commit中,所以如果你你想每一次的修改都被commit,那么你要确保每一次修改后都有被git add


四、Git的工作区和暂存区

1.工作区(Working Directory)

  • 就是在自己电脑里能看到的目录,比如我们前面创建的test-git文件夹就是一个工作区。

2.版本库

  • 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
  • Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master(main),以及指向master(main)的一个指针叫HEAD
    在这里插入图片描述
  • 在Git中,用HEAD表示当前版本,也就是最新的提交,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
  • 前面讲了我们把文件交给Git管理的时候,主要是分两步执行的:
    • 第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区
    • 第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

五、版本回退和撤销修改

1.版本回退

  • git log命令显示从最近到最远的提交日志(查看提交历史),如果嫌输出信息太多,看的眼花缭乱的,可以加上 --pretty=oneline参数。
  • git reflog命令,用来记录每一次命令。(查看历史命令)
    在这里插入图片描述
    • 那一大串的数字和字母是commit_id
  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard <commit_id>。如果是回退到上一个版本直接使用命令git reset --hard HEAD^
    在这里插入图片描述

2.撤销修改

  • (1)修改没有提交到暂存区中:
    • git checkout -- <filename>,可以丢弃工作区的修改:
      • ① 一种是文件自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态。
      • ② 一种是文件已经添加到暂存区后,又做了修改,现在,撤销修改就回到添加到暂存区后的状态。
    • 总之,就是让这个文件回到最近一次git commitgit add时的状态。
  • (2)修改提交到了暂存区:
    • git reset HEAD <filename>命令可以回到上面的场景(1)。
  • (3)修改提交到了版本库中,想要撤销本次的修改,通过上面的版本回退可以实现撤销修改,但是前提是没有推送到远程库。

六、删除文件

  • 直接在文件管理器中把没用的文件删了,或者用 rm 命令删了:
    • ① 如果确定从版本库中删除该文件,那就用命令 git rm <filename>删掉,然后用git commit
    • 先动手删除,然后使用git rm <filename>git add <filename>效果一样的。

七、常用基础命令总结

git init #创建一个版本库
git add <filename> #提交一个文件到暂存区
git add . #将所有修改提交到暂存区
git commit -m "comment" #将所有暂存区的修改提交到版本库中
git status #查看当前仓库当前的状态
git diff <filename> #查看修改的内容
git log --pretty=oneline #查看最近到最远的提交日志
git reflog # 查看每一次的命令
git rm <filename> #删除一个文件
git checkout -- <filename> #让这个文件回到最近一次git commit或git add时的状态
git reset --hard <commitId> #回退到指定的版本。
git reset --hard HEAD^ #退回到上一个版本
git reset HEAD <filename> #撤销暂存区的修改

八、参考

[1]. Git官网
[1]. Git简介 - 廖雪峰的官方网站——直接看这个谢谢,写的太好了。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javaScript基础2

javaScript 一.运算符二.流程控制1.顺序流程控制2.分支流程控制&#xff08;1&#xff09;if/if..else/if多分支&#xff08;2&#xff09;.三元表达式&#xff08;4&#xff09;.switch和if else区别 3.循环流程控制(1).for循环/双重for循环(2).一些例子(3).while循环/do..whi…

python使用opencv对图像的基本操作(2)

13.对多个像素点进行操作&#xff0c;使用数组切片方式访问 img[i,:] img[j,:] #将第j行的数值赋值给第i行 img[-2,:]或img[-2] #倒数第二行 img[:,-1] #最后一列 img[50:100,50:100] #50-100行&#xff0c;50-100列&#xff08;不包括第100行和第100列&#xff09; img[:100…

进销存单机版和excel进销存那个好用

进销存单机版和EXCEL进销存哪个好用&#xff1f;单机版是安装在单台电脑上使用的&#xff0c;它不能像网络版一样可以多台电脑同时共享数据&#xff0c;所以进销存单机版有一个优势就是不需要连接网络也可以使用。 进销存单机版 进销存软件单机版是经过开发人员设计好的一种信…

目标检测与追踪AI算法模型及边缘计算智能分析网关V4的算法应用

目标检测与追踪是计算机视觉领域中的一个重要任务&#xff0c;主要用于识别图像或视频中的目标&#xff0c;并跟踪它们的运动轨迹。针对这一任务&#xff0c;有许多先进的AI算法模型&#xff0c;例如&#xff1a; YOLO&#xff08;You Only Look Once&#xff09;&#xff1a;…

用例整体执行及pytest.ini文件

在我们写代码的过程中&#xff0c;一般都是右键或者命令行去执行一个用例 但是当我们写完后&#xff0c;需要整体执行一遍。那应该怎么搞呢&#xff1f; 我们可以在根目录下新建一个main.py或者run.py之类的文件&#xff0c;文件内容如下&#xff1a; if __name__ "__ma…

1、Qt简介

文章目录 前言一、pySide2 / pySide6 ,PyQt5 / PyQt6二、安装包1 安装pyside22 安装pyqt5三、从一个简单的例子开始三、界面动作处理---信号(signal)与槽(slot)(Qt最核心的机制)--- 绑定事件封装到类中总结前言 参考文章:Qt简介 本文开始就开始进入到qt的开发笔记书写…

以更多架构核心专利,推进 SDS 产业创新创造

今天是第 24 个世界知识产权日&#xff0c;今年世界知识产权日活动的主题是&#xff1a;“知识产权和可持续发展目标&#xff1a;立足创新创造&#xff0c;构建共同未来。” 这也正是 XSKY 在软件定义存储领域的目标之一。以“数据常青”为使命的 XSKY&#xff0c;始终立足于软…

Git -- 运用总结

文章目录 1. Git2. 基础/查阅2.1 基础/查阅 - git2.2 仓库 - remote2.3 清理 - rm/clean2.4 版本回退 - reset 3. 分支3.1 分支基础 - branch3.2 分支暂存更改 - stash3.3 分支切换 - checkout 4. 代码提交/拉取4.1 代码提交 - push4.2 代码拉取 - pull 1. Git 2. 基础/查阅 2…

使用JavaScript日历小部件和DHTMLX Gantt的应用场景(一)

DHTMLX Suite UI 组件库允许您更快地构建跨平台、跨浏览器 Web 和移动应用程序。它包括一组丰富的即用式 HTML5 组件&#xff0c;这些组件可以轻松组合到单个应用程序界面中。 DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表&#xff0c;可满足项目管理应用…

嵌入式开发一:初识Stm32

目录 一、嵌入式简介 1.1 嵌入式概念 1.2 嵌入式系统的组成 1.3 嵌入式的分类 1.3.1 嵌入式系统的分类 1.3.2 嵌入式处理器的分类 二、单片机简介(MCU嵌入式微控制器) 2.1 单片机是什么 2.2 单片机的作用是什么 2.3 单片机的发展历程 2.4 单片机发展趋势 2.5 复杂指…

【服务器部署篇】Jenkins配置后端工程自动化部署

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0c;产…

Pytorch 的神经网络 学习笔记

参照官方网址 Module — PyTorch 2.2 documentation 一. 介绍 1. torch.nn模块&#xff1a; torch.nn是PyTorch中专门用于构建神经网络的模块。它提供了构建深度学习模型所需的所有构建块&#xff0c;包括各种层类型&#xff08;如全连接层、卷积层、循环层等&#xff09;、…