分布式版本控制系统——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.mzph.cn/web/4013.shtml

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

相关文章

Qt应用程序直接在没有环境的windows系统电脑上运行

参考&#xff1a;QT 发布应用程序 在没有安装QT的电脑上运行程序 文章目录 创建一个空的文件夹test将可执行程序exe拷贝到test打开对应qt命令行输入 windeployqt e:\test\exename.exe 创建一个空的文件夹test 将可执行程序exe拷贝到test 打开对应qt命令行 输入 windeployqt e:…

Docker共享Nginx配置文件

先去一个容器中&#xff0c;找到Nginx.conf配置文件的目录 去创建一个容器&#xff0c;将容器中存放nginx.conf的目录挂载到宿主机存放nginx.conf目录上 去宿主机中找到nginx/html/index.html目录位置 进入宿主机的index.html中修改页面内容 curl 192.168.91.106访问一下 进入…

小项目-词法分析器

小项目-词法分析器 1.理论 一个完整的编译器&#xff0c;大致会经历如下几个阶段 各个阶段的职责&#xff0c;简单描述如下&#xff1a; 词法分析&#xff1a;对源文件进行扫描&#xff0c;将源文件的字符划分为一个一个的记号(token) (注&#xff1a;类似中文中的分词)。 语…

Eagle for Mac:强大的图片管理工具

Eagle for Mac是一款专为Mac用户设计的图片管理工具&#xff0c;旨在帮助用户更高效、有序地管理和查找图片资源。 Eagle for Mac v1.9.2中文版下载 Eagle支持多种图片格式&#xff0c;包括JPG、PNG、GIF、SVG、PSD、AI等&#xff0c;无论是矢量图还是位图&#xff0c;都能以清…

EasyRecovery数据恢复软件2025激活码及下载使用步骤教程

EasyRecovery数据恢复软件是一款功能强大且用户友好的数据恢复工具&#xff0c;专为帮助用户找回因各种原因丢失的数据而设计。该软件由全球知名的数据恢复技术公司开发&#xff0c;经过多年的技术积累和更新迭代&#xff0c;已经成为行业内备受推崇的数据恢复解决方案。 EasyR…

【定制化体验:使用Spring Boot自动配置,打造个性化Starter】

项目结构 Pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4…

SpringBoot---------整合Redis

目录 第一步&#xff1a;引入依赖 第二步&#xff1a;配置Redis信息 第三步&#xff1a;选择Spring Data Redis进行操作Redis数据库 ①操作String类型数据&#xff08;用的少&#xff09; ②操作Object类型数据&#xff08;重要&#xff01;&#xff01;&#xff01;&#x…

[iOS]使用CocoaPods发布私有库

1.创建私有 Spec 仓库 首先&#xff0c;需要一个私有的 Git 仓库来存放你的 Podspec 文件&#xff0c;这个仓库用于索引你所有的私有 Pods。 在 GitHub 或其他 Git 服务上创建一个新的私有仓库&#xff0c;例如&#xff0c;名为 PrivatePodSpecs。克隆这个仓库到本地&#xf…

AI大模型探索之路-训练篇2:大语言模型预训练基础认知

文章目录 前言一、预训练流程分析二、预训练两大挑战三、预训练网络通信四、预训练数据并行五、预训练模型并行六、预训练3D并行七、预训练代码示例总结 前言 在人工智能的宏伟蓝图中&#xff0c;大语言模型&#xff08;LLM&#xff09;的预训练是构筑智慧之塔的基石。预训练过…

Docker基本操作 容器相关命令

docker run:运行镜像; docker pause:暂停容器&#xff0c;会让该容器暂时挂起&#xff1b; docker unpauser:从暂停到运行; docker stop:停止容器&#xff0c;杀死进程; docker start:重新创建进程。 docker ps&#xff1a;查看所有运行的容器及其状态&#xff0c;默认只展…

JavaScript创建和填充数组的更多方法

空数组fill()方法创建并填充数组 ● 我们之前创建数组的方式都是手动去创建去一个数据&#xff0c;例如 console.log([1, 2, 3, 4, 5, 6, 7]);● 当然我们也可以使用Array对象来构造数组 console.log([1, 2, 3, 4, 5, 6, 7]); console.log(new Array(1, 2, 3, 4, 5, 6, 7));…

python生成二维码及进度条源代码

一、进度条 1、利用time模块实现 import time for i in range(0, 101, 2):time.sleep(0.3)num i // 2if i 100:process "\r[%3s%% ]: |%-50s|\n" % (i, # * num)else:process "\r[%3s%% ]: |%-50s|" % (i, # * num)print(process, end, flushTrue)2、使…

tcp服务器端与多个客户端连接

如果希望Tcp服务器端可以与多个客户端连接&#xff0c;可以这样写&#xff1a; tcpServernew QTcpServer(this);connect(tcpServer,SIGNAL(newConnection()),this,SLOT(onNewConnection())); void MainWindow::onNewConnection() {QTcpSocket *tcpSocket;//TCP通讯的Sockettcp…

陪丨玩丨系丨统前后端开发流程,APP小程序H5前后端源码交付支持二开!多人语音,开黑,线上线下两套操作可在一个系统完成!

100%全部源码出售 官网源码APP源码 管理系统源码 终身免费售后 产品免费更新 产品更新频率高 让您时刻立足于行业前沿 软件开发流程步骤及其作用&#xff1a; 软件开发是一个复杂而系统的过程&#xff0c;涉及多个环节&#xff0c;以下是软件开发的主要流程步骤及其作用…

leetCode60. 排列序列

leetCode60. 排列序列 方法一:语法版&#xff0c;面试官不认可的方法&#xff1a;next_permutation函数 // 方法一&#xff1a;使用next_permutation函数&#xff0c;将某容器设置为当前按照字典序 // 的下一个全排列的内容 class Solution { public:string getPermutation(in…

SystemUI KeyButtonView setDarkIntensity 解析

继承自 ImageView KeyButtonDrawable intensity为0时按键颜色为白色。 intensity为1时黑色为的调用堆栈&#xff1a; java.lang.NullPointerException: Attempt to invoke virtual method int java.lang.String.length() on a null object referenceat com.android.systemui.…

LLaMA-Factory参数的解答(命令,单卡,预训练)

前面这个写过&#xff0c;但觉得写的不是很好&#xff0c;这次是参考命令运行脚本&#xff0c;讲解各个参数含义。后续尽可能会更新&#xff0c;可以关注一下专栏&#xff01;&#xff01; *这是个人写的参数解读&#xff0c;我并非该领域的人如果那个大佬看到有参数解读不对或…

CARLA (I)--Ubuntu20.04 服务器安装 CARLA_0.9.13服务端和客户端详细步骤

目录 0. 说明0.1 应用场景&#xff1a;0.2 本文动机&#xff1a; 1. 准备工作2. 安装 CARLA 服务端软件【远程服务器】3. 安装 CARLA 客户端【远程服务器】3.1 .egg 文件安装&#xff1a;3.2 .whl 文件安装&#xff1a;3.3 从Pypi下载Python package 4. 运行服务端程序5. 运行客…

Unity入门实践小项目

必备知识点 必备知识点——场景切换和游戏退出 必备知识点——鼠标隐藏锁定相关 必备知识点——随机数和Unity自带委托 必备知识点——模型资源的导入 实践项目 需求分析 UML类图 代码和资源导入 开始场景 场景装饰 拖入模型和添加脚本让场景动起来 开始界面 先用自己写的GUI…

Feign负载均衡

Feign负载均衡 概念总结 工程构建Feign通过接口的方法调用Rest服务&#xff08;之前是Ribbon——RestTemplate&#xff09; 概念 官网解释: http://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-feign Feign是一个声明式WebService客户端。使用Feign能让…