【Git】:Git基本操作

目录

创建、配置本地仓库

创建本地仓库

 配置本地仓库

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

修改文件

版本回退

撤销修改

删除文件


创建、配置本地仓库

创建本地仓库

我们通常可以通过以下两种方式之一获取 Git 存储库:

  1. 自己在本地目录创建一个本地仓库

  2. 从其它服务器 克隆 一个已存在的 Git 仓库。

 一、在现有目录中初始化存储库

我们可以在本地创建一个目录用来存放 Git 存储库,并且输入:

git init    // 初始化本地仓库

我们发现创建一个新子目录.git,这个是 Git 版本控制系统的核心部分。它就像是一个项目版本历史的 “数据库” 和 “管理中心”,存储了用于跟踪项目文件版本变化的所有必要信息。对于一个受 Git 管理的项目,.git目录是必不可少的,它使得开发人员能够回溯文件的修改历史、管理分支、合并代码等操作。

查看 .git 子目录内的文件

ls .git

查看 .git 子目录树状结构

tree .git
  1. 配置文件
    • config 文件:存储仓库的用户信息(如用户名、邮箱)、行为选项(如换行符转换方式)和远程仓库配置等。
    • description 文件:包含对仓库的简短描述
  2. 钩子脚本
    • hooks 目录:有客户端钩子(如pre - commitcommit - msg)和服务器端钩子(如pre - receivepost - receive)脚本,用于在特定 Git 操作阶段自动执行,实现如代码检查、自动化部署等功能。
  3. 对象存储
    • objects 目录:存放版本控制对象,包括 blob(文件内容)、树(目录结构)和提交对象,用于记录文件版本变化和历史。
  4. 引用信息
    • refs 目录:主要存储分支(refs/heads)和标签(refs/tags)引用,确定分支和版本标记。
    • HEAD 文件:指向当前分支,用于指示当前工作位置。
  5. 其他辅助信息
    • info 目录:有exclude文件用于指定本地不被 Git 管理的文件,还可能包含 GitWeb 相关信息。

 配置本地仓库

初次使用 git 需要设置你的用户名以及邮箱,这将作为当前机器 git 的标识,如果你用它来下载远程仓库一些需要登录权限的仓库会要求登录,git默认使用配置邮箱以及用户名登入,但会要求你手动输入密码 

用户名配置

// 在当前本地仓库生效
git config user.name "自己的用户名" // --global 代表当前机器所有的本地仓库生效
git config --global user.name "自己的用户名"       

邮箱配置

// 在当前本地仓库生效
git config user.email "自己的电子邮件地址"    // --global 代表当前机器所有的本地仓库
git config --global user.email "自己的电子邮件地址"     

删除用户名配置和邮箱配置

// --unset 代表删除当前配置
git config --unset user.name         
git config --unset --global user.name  git config --unset user.email  
git config --unset --global user.email 

查看配置信息

git config -l    // 查看配置信息

 我们配置完用户名和邮箱地址后,再次查看发现已经成功添加

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

工作区(Working Directory)

  1. 工作区是开发者在本地计算机上实际操作文件的区域,也就是项目的本地文件夹。
  2. 它包含了项目的所有文件和子目录,这些文件可以是源代码、配置文件、文档等任何与项目相关的内容。
  3. 例如,对于一个软件开发项目,工作区可能包含了项目的源文件(如.cpp.java等)、资源文件(如图像、音频等)以及构建脚本等。

版本库(Repository)

  1. 版本库是 Git 用于存储项目所有版本信息的地方,它位于项目的.git目录下。
  2. 版本库包含了一系列的提交(commit)对象、树(tree)对象和二进制大对象(blob)等,这些对象共同构成了项目的版本历史。
  3. 例如,每一次git commit操作都会在版本库中创建一个新的提交对象,这个对象记录了提交的作者、日期、消息以及当时项目的目录结构(通过树对象表示)。

暂存区(Staging Area)

  1. 暂存区也被称为索引(Index),它是一个介于工作区和版本库之间的中间区域。
  2. 暂存区的主要作用是用于挑选工作区中的哪些文件变更需要被包含在下一次提交(git commit)中。
  3. 当执行git add命令时,文件从工作区被添加到暂存区。
  4. 例如,在修改了多个文件后,开发者可以使用git add有选择性地将部分文件添加到暂存区,准备进行提交,而未被添加的文件变更则暂时不会进入版本库。 

如果我们想要使用git 进行版本控制:

  1. 使用git add命令将工作区中的文件添加到暂存区。
  2. 在将文件添加到暂存区后,使用git commit命令将暂存区的文件提交到版本库。 

 添加文件

将工作区中的文件添加到暂存区

git add test        // 添加一个文件
git add file1 file2 file3    // 也可以使用空格连续添加多个文件

将暂存区的文件提交到版本库

// -m 表示对添加到版本库文件的解释
git commit -m "添加3个文件"

 查看历史提交记录

git log
git log --pretty=oneline  // 想要简介点,只要一行的

简介版,只要一行的 

 我们再来看看 .git 子目录,看看添加文件后发生了什么变化

 COMMIT_EDITMSG

  1. COMMIT_EDITMSG是 Git 中的一个文件,位于本地 Git 仓库的.git/COMMIT_EDITMSG路径下。
  2. 这个文件在每次执行git commit操作且需要用户编辑提交消息时发挥关键作用。
  3. 当我们使用git commit而没有通过 -m 选项直接提供提交消息时,Git 会打开一个文本编辑器(编辑器由core.editor配置项决定,如可以是vimnano等),此时文本编辑器中加载的内容就来自于这个COMMIT_EDITMSG文件,或者在编辑完成后会将内容保存到这个文件中。

 index

  1. 在 Git 中,index(也称为暂存区,英文是 Staging Area)是一个关键的中间区域,它由.git目录下的相关文件和数据结构来表示。
  2. 这个区域在工作区(包含项目实际文件的目录)和版本库(存储所有提交历史和相关对象的区域)之间起到了承上启下的作用。

 logs

  1. 在 Git 的.git目录中,logs子目录用于存储提交(commit)相关的日志信息。
  2. 这些日志提供了关于仓库中每次提交的详细记录,包括提交的时间顺序、作者、提交消息以及提交之间的关联信息等。
  3. 它是 Git 用于跟踪版本历史和操作记录的重要部分,与git log命令查看的信息密切相关。
  4. refs子目录:在logs目录下,refs子目录是一个关键部分。它主要用于存储与引用(如分支和标签)相关的日志信息。
    • heads子目录:其中的heads子目录存储了各个分支的提交日志。例如,对于一个名为master的分支,会有一个logs/refs/heads/master文件(或者目录,取决于具体的 Git 实现),这个文件记录了master分支上所有提交的历史顺序、作者、日期和提交消息等内容。每次在master分支上进行新的提交时,相关信息都会被添加到这个文件中。
    • tags子目录tags子目录用于存储与标签相关的日志信息。标签是对特定提交的标记,通常用于标识重要的版本(如发布版本)。logs/refs/tags下的文件记录了标签的创建时间、关联的提交以及相关的操作历史等。
  5. HEAD文件:在logs目录下可能还会有与HEAD文件相关的日志信息。HEAD文件用于指示当前分支,logs中的相关内容可能记录了HEAD文件的变化历史,例如何时切换分支,以及每次切换分支时的具体情况等。

 objects

  1. 在 Git 的.git目录中,objects子目录是存储版本控制对象的核心区域。
  2. 它保存了 Git 用于记录项目版本信息的各种对象,这些对象是 Git 版本控制系统能够跟踪文件变更和历史版本的基础。

 refs

查看 Git 对象的内容

git cat-file -p 

修改文件

查看工作区和暂存区的状态:它会告诉你哪些文件被修改了、哪些文件是新添加的、哪些文件已经被放入暂存区准备提交,还有哪些文件没有被跟踪等信息

git status

查看文件内容的差异。它主要用于比较不同版本的文件之间的变化情况,这些版本可以是工作区与暂存区、暂存区与最近一次提交、或者两个不同提交之间的文件内容差异。

git diff 文件名

版本回退

版本回退使用的命令

git reset [--soft][--mixed][--hard] HEAD
// --soft: 仅回退版本库的,暂存区和工作区的内容保持不变
// --mixed:回退版本库和暂存区,工作区的内容保持不变
// --hard: 版本库、暂存区和工作区全部回退(尽量不要使用)
// HEAD: 要重置到的提交标识

 HEAD: 要重置到的提交标识,就是下图的标示

我们来实现一个版本回退,我们有两个版本:

  1. hello git 版本
  2. hello git + haha 版本

我们发现文件确实从 hello git + haha 版本回退到hello git 版本了

 [--soft][--mixed][--hard]参数的区别

工作区暂存区版本库
--softhello git + haha hello git + haha hello git 
--mixedhello git + haha hello git hello git 
--hardhello git hello git hello git 

我们想要撤销修改怎么办呢 ?

查看本地仓库的引用日志

git reflog

找到其中的提交标示,并且回退到之前版本

撤销修改

 如果我们想要在工作区、暂存区和版本库撤销修改

一、工作区

将工作区中指定文件恢复到最近一次提交(commit)时的状态,或者如果该文件已被添加到暂存区(即执行过git add操作),则恢复到暂存区中的状态。

例如,你在工作区对example.txt文件做了一些修改,之后又觉得这些修改不太合适,想要放弃这些修改,恢复到之前最后一次提交时的样子,就可以执行git checkout -- example.txt命令。

git checkout -- <file>
// <file>代表具体的文件名

二、暂存区

从暂存区回退

git reset HEAD test

 

 再回退工作区

git checkout -- <file>
// <file>代表具体的文件名

三、版本库

 工作区、暂存区和版本库都回退到上个版本

git reset --hard HEAD^

删除文件

如何删除我们已经上传版本库的文件

方法一

1、 rm               // 删除文件
2、git add
3、git commit

方法二

1、git rm [文件名]  (相当于rm + git add)
2、git commit 

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

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

相关文章

CANDENCE: 绘制好的封装元件 刷新(Refresh) 和 替换 (Replace)焊盘

绘制好的封装元件 刷新(Refresh) 和 替换 &#xff08;Replace&#xff09;焊盘 一、刷新(Refresh) 1、以下面这个bga484封装的元件为例 2、打开bga的焊盘文件 3、我们对上面这个焊盘稍加修改&#xff0c;如下&#xff0c;然后保存 4、在封装编辑页面&#xff0c;如下操作 5…

HarmonyOS:使用ArkWeb构建页面

一、简介 页面加载是Web组件的基本功能。根据页面加载数据来源可以分为三种常用场景&#xff0c;包括加载网络页面、加载本地页面、加载HTML格式的富文本数据。 页面加载过程中&#xff0c;若涉及网络资源获取&#xff0c;需要配置ohos.permission.INTERNET网络访问权限。 二、…

修改一下达梦disql 提示符

经常用disql的有时某些信息希望提示一下&#xff0c;默认的只显示SQL> 为了方便使用&#xff0c;可以在 glogin.sql 中增加些内容。 vi $DM_HOME/bin/disql_conf/glogin.sql增加以下几行 set time on set lineshow offcol global_name new_value global_name SELECT ins…

跨境出海安全:如何防止PayPal账户被风控?

今天咱们聊聊那些让人头疼的事儿——PayPal账户被风控。不少跨境电商商家反馈&#xff0c;我们只是想要安安静静地在网上做个小生意&#xff0c;结果不知道为什么&#xff0c;莫名其妙账户就被冻结了。 但其实每个封禁都是有原因的&#xff0c;今天就来给大家分享分享可能的原…

如何读论文【论文精读·1】

第一遍题目 摘要 结论 方法 实验 是不是适合自己看看自己适不适合这篇文章。&#xff08;花时最少&#xff0c;做海选&#xff09; 不需要懂太具体的公式。这一遍阅读之后&#xff0c;你需要再继续思考一下这篇论文的质量以及和自己研究方向的契合程度&#xff0c;决定一下自己…

【模块一】kubernetes容器编排进阶实战之pod生命周期、探针简介、类型及示例

kubernetes pod生命周期、探针简介、类型及示例 kubernetes pod生命周期 pod的生命周期(pod lifecycle)&#xff0c;从pod start时候可以配置postStart检测&#xff0c;运行过程中可以配置livenessProbe和 readinessProbe,最后在 stop前可以配置preStop操作 探针简介 探针是由…

医学AI公开课·第一期|Machine LearningTransformers in Med AI

小罗碎碎念 从这周开始&#xff0c;我计划每个周末录一个视频&#xff0c;分享一些医学人工智能领域的进展。 作为第一期视频&#xff0c;我打算介绍一下机器学习和Transformer在医学AI领域中的应用。 为了准备这期视频&#xff0c;总共做了24页PPT&#xff08;三部分内容&…

[代码随想录Day21打卡] 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树 总结篇

669. 修剪二叉搜索树 给定一个二叉搜索树root&#xff0c;给定一个范围[low, high]&#xff0c;修剪二叉搜索树&#xff0c;使修建后的二叉搜索树的值的范围在[low, high]内。 思想&#xff1a;当前节点的值和给定的范围之间的关系&#xff0c;如果当前节点的值大于high那么就…

apr共享内存

下载&#xff1a; Download - The Apache Portable Runtime Project 编译&#xff1a; 使用cmake-gui生成库&#xff1a; apr-1.lib aprapp-1.lib libapr-1.lib libaprapp-1.lib libapr-1.dll 在Developer PowerShell for VS 2019中&#xff1a; 执行nmake -f Makefile.win来…

借助算力云跑模型

算力平台&#xff1a;FunHPC | 算力简单易用 AI乐趣丛生 该文章只讲述了最基本的使用步骤&#xff08;因为我也不熟练&#xff09;。 【注】&#xff1a;进入平台&#xff0c;注册登录账号后&#xff0c;才能租用。学生认证&#xff0b;实名认证会有免费的算力资源&#xff0…

聚水潭与MySQL数据集成案例分享

聚水潭数据集成到MySQL的技术案例分享 在现代数据驱动的业务环境中&#xff0c;如何高效、可靠地实现不同系统之间的数据对接成为企业关注的焦点。本次案例将详细介绍如何通过轻易云数据集成平台&#xff0c;将聚水潭的数据无缝集成到MySQL数据库中&#xff0c;实现从“聚水谭…

C语言中const char *字符进行切割实现

将127.0.0.1以“”“.”来进行切割&#xff0c;实现如下&#xff1a; const char * ip "127.0.0.1";char *test new char[100];strcpy(test, ip);const char *split ".";char *final;final strtok(test, split);while (final){printf("%s\n"…

java基础知识(常用类)

一、包装类&#xff08;Wrapper) &#xff08;1&#xff09;包装类与基本数据的转换 装箱&#xff1a;基本类型->包装类型 拆箱&#xff1a;包装类型->基本类型 java5以后是自动装箱和拆箱的方式&#xff0c;自动装箱底层调用的是valueOf方法&#xff0c;比如Integer.…

【Python系列】字典灵活的数据存储与操作

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

neo4j图数据库community-5.50创建多个数据库————————————————

1.找到neo4J中的conf文件&#xff0c;我的路径是&#xff1a;D:\Program Files\neo4j-community-5.5.0-windows\neo4j-community-5.5.0\conf 这里找自己的安装路径&#xff0c; 2.用管理员模式打开conf文件&#xff0c;右键管理员&#xff0c;记事本或者not 3.选中的一行新建一…

AVL树实现

1. AVL的概念 AVL树是最先发明的⾃平衡⼆叉查找树&#xff0c;AVL是⼀颗空树&#xff0c;或者具备下列性质的⼆叉搜索树&#xff1a;它的 左右⼦树都是AV树&#xff0c;且左右⼦树的⾼度差的绝对值不超过1。AVL树是⼀颗⾼度平衡搜索⼆叉树&#xff0c; 通过控制⾼度差去控制平…

jvm发展历程介绍

初始阶段&#xff1a;JDK 1.0 - JDK 1.1 • 经典JVM&#xff1a;这是JVM的早期实现&#xff0c;主要特点是使用解释器&#xff08;Interpreter&#xff09;来逐行解释执行Java字节码。这种方式虽然简单直接&#xff0c;但执行效率相对较低。 • JIT编译器&#xff08;Just-In-T…

准备阶段 Profiler性能分析工具的使用(一)

Unity 性能分析器 (Unity Profiler) 性能分析器记录应用程序性能的多个方面并显示相关信息。使用此信息可以做出有关应用程序中可能需要优化的事项的明智决策&#xff0c;并确认所做的优化是否产生预期结果。 默认情况下&#xff0c;性能分析器记录并保留游戏的最后 300 帧&a…

初学 flutter 环境变量配置

一、jdk&#xff08;jdk11&#xff09; 1&#xff09;配置环境变量 新增&#xff1a;JAVA_HOMEC:\Program Files\Java\jdk-11 //你的jdk目录 在path新增&#xff1a;%JAVA_HOME%\bin2&#xff09;验证是否配置成功&#xff08;cmd运行命令&#xff09; java java -version …

HTML 元素类型介绍

目录 1. 块级元素&#xff08;Block-level Elements&#xff09; 2. 行级元素&#xff08;Inline Elements&#xff09; 3. 行内块级元素&#xff08;Inline-block Elements&#xff09; 4. 表格相关元素 5. 列表相关元素 6. 表单相关元素 示例代码 示例效果 ​编辑 …