【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 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

android 性能分析工具(03)Android Studio Profiler及常见性能图表解读

说明&#xff1a;主要解读Android Studio Profiler 和 常见性能图表。 Android Studio的Profiler工具是一套功能强大的性能分析工具集&#xff0c;它可以帮助开发者实时监控和分析应用的性能&#xff0c;包括CPU使用率、内存使用、网络活动和能耗等多个方面。以下是对Android …

LabVIEW配电网谐波在线监测与分析系统

统利用LabVIEW与NI数据采集卡&#xff0c;结合高精度谐波分析算法&#xff0c;实现了配电网谐波的实时监测与分析。通过虚拟仪器技术的灵活性和扩展性&#xff0c;显著提高电网运行的可靠性与电能质量&#xff0c;提供了一套有效的技术解决方案。 项目背景 随着非线性负载&am…

git使用(二)

git使用&#xff08;二&#xff09; git常用基本操作命令git clonegit loggit remotegit statusgit addgit commitgit pushgit branchgit pull git常用基本操作命令 git clone 项目开发中项目负责人会在github上创建一个远程仓库&#xff0c;我们需要使用git clone将远程仓库…

Excel求和如何过滤错误值

一、问题的提出 平时&#xff0c;我们在使用Excel时&#xff0c;最常用的功能就是求和了&#xff0c;一说到求和你可能想到用sum函数&#xff0c;但是如果sum的求和区域有#value #Div等错误值怎么办&#xff1f;如下图&#xff0c;记算C列中工资的总和。 直接用肯定会报错&…

【数据分享】2024年我国省市县三级的住宿服务设施数量(8类住宿设施/Excel/Shp格式)

宾馆酒店、旅馆招待所等住宿服务设施的配置情况是一个城市公共基础设施完善程度的重要体现&#xff0c;一个城市住宿服务设施种类越丰富&#xff0c;数量越多&#xff0c;通常能表示这个城市的公共服务水平越高&#xff01; 本次我们为大家带来的是我国各省份、各地级市、各区…

自制Windows系统(十)

上图 &#xff08;真的不是Windows破解版&#xff09; 开源地址&#xff1a;仿Windows

Ubuntu20.04下安装向日葵

向日葵远程控制app官方下载 - 贝锐向日葵官网 下载Ununtu版的图形版本的安装deb包SunloginClient_15.2.0.63064_amd64.deb 直接执行 sudo dpkg -i SunloginClient_15.2.0.63064_amd64.deb 的话会报错: 如果在Ubuntu20.04里直接执行sudo apt install libgconf-2-4安装libgco…

vitepress博客模板搭建

vitepress博客搭建 个人博客技术栈更新&#xff0c;快速搭建一个vitepress自定义博客 建议去博客查看文章&#xff0c;观感更佳。原文地址 模板仓库&#xff1a; vitepress-blog-template 前言 服务器过期快一年了&#xff0c;博客也快一年没更新了&#xff0c;最近重新搭…

修改一下达梦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…

TCP vs UDP:如何选择适合的网络传输协议?

在网络通信中&#xff0c;TCP&#xff08;Transmission Control Protocol&#xff09;和UDP&#xff08;User Datagram Protocol&#xff09;是两种非常重要的传输层协议。它们各有特点&#xff0c;适用于不同类型的应用场景。本文将详细探讨TCP和UDP协议的结构、优缺点及应用&…

支付宝租赁小程序的优势与应用前景分析

内容概要 在这个快节奏的时代&#xff0c;租赁服务越来越成为大家生活中的一部分。而支付宝租赁小程序正是这个大潮流中的一颗璀璨明珠。通过简单易用的界面和强大的功能&#xff0c;这个小程序不仅让用户在租赁过程中获得了前所未有的便利&#xff0c;也为商家提供了新的商业…

前端面试笔试(五)

最近面试中手撕题以及笔试中总遇到递归回溯类题目&#xff0c;于是去牛客上找典型题目。这里浅浅列一道。 目录 题目 解决 代码 详情 变量初始化 递归函数dg 递归终止条件 递归主体 初始调用和返回结果 题目 没有重复项数字的全排列&#xff08;递归回溯&#xff0c;js…

【数据分享】中国价格统计年鉴(2013-2024) PDF

数据介绍 犹如一座珍贵的宝库&#xff0c;全面而系统地记录了中国在这一时期的价格变动情况。它涵盖了丰富的内容&#xff0c;包括宏观经济指标、商品价格、居民消费价格以及城市物价监测等多个方面。 在宏观经济指标方面&#xff0c;年鉴中收录了 GDP、CPI、PPI 等重要数据&…

数据集-目标检测系列- 花卉 鸡蛋花 检测数据集 frangipani >> DataBall

数据集-目标检测系列- 花卉 鸡蛋花 检测数据集 frangipani >> DataBall DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 贵在坚持&#xff01; 数据样例项目地址&#xff1a; * 相关项目 1&#xff09;数据集…

manin动画编程(安装+入门)

文章目录 1.基本介绍2.效果展示3.安装步骤3.1安装manba软件3.2配置环境变量3.3查看是否成功3.4什么是mamba3.5创建虚拟环境3.6尝试进入虚拟环境 4.vscode操作4.1默认配置文件 5.安装ffmpeg6.安装manim软件6.vscode制作7.我的学习收获 1.基本介绍 这个manim就是一款软件&#x…

《Python编程实训快速上手》第十天--处理CSV文件和JSON数据

CSV&#xff1a;简化的电子表格&#xff0c;被保存为纯文本文件 JSON&#xff1a;是一种数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也易于机器解析和生成&#xff0c;以JavaScript源代码的形式将信息保存在纯文本文件中 一、csv模块 CSV文件中的每行代表电…

利用FileZilla搭建ftp服务器

一 利用windows自带的ftp服务搭建服务器&#xff0c;要复杂一些&#xff0c;好处是无需借用外部软件。 也有一些好的工具&#xff0c;如FileZilla的Server版&#xff0c;构建过程简单&#xff0c;好用。 下面看看。 二 安装FileZilla Server 当前下载版本是0.9.43&#xf…

P1 练习卷(C++4道题)

1.纷繁世界 内存限制&#xff1a;256MB 时间限制&#xff1a;1s 问题描述 这是一个纷繁复杂的世界。 某一天清晨你起床很迟&#xff0c;没有吃上早饭。于是你骑着自行车去超市&#xff0c;但是你又发现商店的工作人员已经重新贴上了价格标签&#xff0c;零食价格都涨了50%。你…

青少年编程等级考试C++一级,硬币反转问题

代码 #include<iostream>using namespace std;bool a[300];int main(){ int n,m; cin >> n >> m; for(int i 1;i < m;i) { for (int j 1;j < n;j) { if( j % i 0) { a[j] !a[j];…

外卖系统开发实战:从架构设计到代码实现

开发一套外卖系统&#xff0c;需要在架构设计、技术选型以及核心功能开发等方面下功夫。这篇文章将通过代码实例&#xff0c;展示如何构建一个基础的外卖系统&#xff0c;从需求梳理到核心模块的实现&#xff0c;帮助你快速掌握开发要点。 一、系统架构设计 一个完整的外卖系…