【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\]参数的区别 |---------|------------------|------------------|-----------| | | 工作区 | 暂存区 | 版本库 | | --soft | hello git + haha | hello git + haha | hello git | | --mixed | hello git + haha | hello git | hello git | | --hard | hello git | hello git | hello git | 我们想要撤销修改怎么办呢 ? 查看本地仓库的引用日志 git reflog ![](https://i-blog.csdnimg.cn/direct/efc7d755b4214654afc9dd9012e9e8ac.png) 找到其中的提交标示,并且回退到之前版本 ![](https://i-blog.csdnimg.cn/direct/b1e30420d8814075b4dbf2d89158e3fb.png) ## 撤销修改 如果我们想要在工作区、暂存区和版本库撤销修改 **一、工作区** 将工作区中指定文件恢复到最近一次提交(`commit`)时的状态,或者如果该文件已被添加到暂存区(即执行过`git add`操作),则恢复到暂存区中的状态。 例如,你在工作区对`example.txt`文件做了一些修改,之后又觉得这些修改不太合适,想要放弃这些修改,恢复到之前最后一次提交时的样子,就可以执行`git checkout -- example.txt`命令。 git checkout -- // 代表具体的文件名 ![](https://i-blog.csdnimg.cn/direct/4bd8d5b69ee14282ad915af7269cd8b2.png) **二、暂存区** 从暂存区回退 git reset HEAD test ![](https://i-blog.csdnimg.cn/direct/2737391ebc6848db8c2c3e9abb4b9c1d.png) 再回退工作区 git checkout -- // 代表具体的文件名 **三、版本库** 工作区、暂存区和版本库都回退到上个版本 git reset --hard HEAD^ ## 删除文件 如何删除我们已经上传版本库的文件 **方法一** 1、 rm // 删除文件 2、git add 3、git commit ![](https://i-blog.csdnimg.cn/direct/cf5c5da0597e41b8bcf099347da49998.png) **方法二** 1、git rm [文件名] (相当于rm + git add) 2、git commit

相关推荐
Will_11301 小时前
如何实现k8s高可用
运维·docker·容器
李白你好1 小时前
H3C网络设备(交换机、路由器、防火墙)常用命令整理
运维·网络·智能路由器
无敌的牛2 小时前
Linux梦开始的地方
linux·运维·服务器
laocui12 小时前
Ubuntu22.04开机运行程序
linux·运维·服务器
卡戎-caryon2 小时前
【Linux网络与网络编程】12.NAT技术&&内网穿透&&代理服务
linux·运维·服务器·网络·网络协议·https
我的老子姓彭2 小时前
LWIP的Socket接口
运维·服务器·网络
朱包林2 小时前
day10-别名-MD5,aide-堡垒机
linux·运维·安全·ubuntu·centos·云计算
GoWjw3 小时前
Linux虚拟文件系统(1)
运维·服务器·数据库
SunTecTec3 小时前
Linux grep -r 查找依赖包是否存在依赖类 Class
linux·运维·服务器
Javis2114 小时前
【Linux高级全栈开发】2.1.2 事件驱动reactor的原理与实现
linux·运维·php