Git基础指令(图文详解)

目录

  • Git概述
  • Git基础指令
    • Linux系统操作指令
  • Git软件指令
    • 1.配置信息
    • 2.名称和邮箱
    • 3.初始化版本库
    • 4.向版本库中添加文件
    • 5.修改版本库文件
    • 6. 查看版本库文件历史
    • 7.删除文件
    • 8.恢复历史文件

在这里插入图片描述

Git概述

Git基础指令

Linux系统操作指令

Git是一款免费、开源的分布式版本控制系统,最初由Linux内核的创始人林纳斯·托瓦兹(Linus Torvalds)为了管理Linux内核开发而创建。所以在使用时,简单常用的linux系统操作指令是可以直接使用的。

以下是一些常用的Linux命令及其在Git工作流中的应用:

  1. cd (Change Directory):改变当前目录。在使用Git时,经常需要进入某个项目的目录。

    cd my_project
    
  2. ls (List):列出当前目录下的文件和文件夹。可以用来查看仓库的内容。

    ls
    
  3. mkdir (Make Directory):创建一个新的目录。例如,创建一个新的Git仓库目录。

    mkdir new_repo
    cd new_repo
    
  4. rm (Remove):删除文件或目录。在Git工作流中,可能需要删除某些文件。

    rm old_file.txt
    
  5. touch:创建一个空文件或更新文件的时间戳。可以用来快速创建新文件以添加到Git仓库。

    touch new_file.txt
    
  6. cat:连接并显示文件内容。可以用来查看文本文件的内容。

    cat README.md
    
  7. nanovim:文本编辑器,用于编辑文件内容。

    nano file.txt
    # 或者
    vim file.txt
    
  8. cp (Copy):复制文件或目录。

    cp source.txt destination.txt
    
  9. mv (Move):移动或重命名文件或目录。

    mv old_name.txt new_name.txt
    
指令含义说明
cd 目录change directory改变操作目录
cd ..退回到上一级目录
pwdPrint work directory打印工作目录
lslist directory contents显示当前目录的文件及子文件目录
llls -l 简化版本更详细地显示当前目录的文件及子文件目录
mkdir 文件夹名称make directory新建一个文件夹
rm 文件remove删除文件
rm -r 文件夹Remove删除文件目录
touch 文件如果创建的文件不存在,那么创建一个空文件
reset清屏
clear清屏
exit退出终端窗口

Git软件指令

1.配置信息

默认情况下,我们可以通过指令获取软件的配置信息:

git config -l

在这里插入图片描述


2.名称和邮箱

  • 如果你是第一回使用Git软件,需要告诉Git软件你的名称和邮箱,否则是无法将文件纳入到版本库中进行版本管理的。

  • 这是因为在多人协作时,不同的用户可能对同一个文件进行操作,所以Git软件必须区分不同用户的操作,区分的方式就是名称和邮箱。

  • 即使您只是在本地使用Git进行版本控制而不打算进行多人协作,配置用户名和邮箱也是必需的。

  • 这是因为Git的设计初衷就是支持分布式协同工作,即使在单人项目中,记录提交者的信息也是一个良好的习惯。

  • 所以是一定要配置的,否则就会出现如下提示:

在这里插入图片描述

要配置您的名称和邮箱,可以使用以下命令:

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

–global 全局范围内配置的意思。
在这里插入图片描述

这将在全局范围内配置您的Git用户名和邮箱地址,以便在所有的Git仓库中都能使用这些信息。

在这里插入图片描述


3.初始化版本库

  • Git软件主要用于管理文件的版本信息,但它只是一个软件,不可能安装后就直接将系统中所有的文件全部纳入到它的管理范畴中。
  • 并且,软件管理版本信息的主要目就是管理文件的修改和变更,如果将系统中所有文件都进行管理其实意义是不大的。
  • 所以一般情况下,我们需要指定某一个文件目录作为软件的管理目录。
  • 因为这个目录主要就作为Git软件的管理文件的版本变化信息,所以这个目录也称之为Git软件的版本仓库目录。

首先通过指令进入到指定文件目录
在这里插入图片描述

执行指定的指令,创建文件版本库

git init

在这里插入图片描述


4.向版本库中添加文件

在版本库文件夹下手动创建文件。
在这里插入图片描述

通过软件的指令查看版本库状态

git status

在这里插入图片描述

  • 我们发现新建的文件属于untracked files(未追踪文件),这里表示当前的txt文件虽然放置到了版本库的文件目录中,被Git软件识别到了,但是未纳入到版本库管理中,所以属于未追踪文件。

  • 通过这个现象可以认为,系统文件夹物理目录和版本库管理目录的含义是不一样的。

  • 只有文件被纳入到版本库管理后,Git软件才能对文件修改后的不同版本内容进行追踪处理,也就是所谓的 tracked files了。

  • 那么如何将文件纳入到版本库的管理呢,这就需要我们执行以下命令了:

#这里的文件是需要提供扩展名的
git add yushifu.txt

在这里插入图片描述

执行结束后再次查看版本库状态:

在这里插入图片描述

  • 在Git中,"cached file"状态指的是文件的暂存状态,也就是文件已经被添加到了Git的索引中,但还没有被提交到版本库中。

  • 这意味着虽然文件的修改已经被记录下来,但还没有成为一个正式的提交,相当于一个临时草稿状态,随时可以进行修改或删除。

  • 如果确定要把文件放置在版本库中,那么就需要执行确定提交指令。

# commit表示真正地纳入到版本库中
# -m 表示提交时的信息(message),是必须输入的。用于描述不同版本之间的差别信息
git commit -m "my first git file"

在这里插入图片描述
提交后,Git会对当前的操作进行Hash计算,通过计算后的值将数据保存下来。

  1. 提交的Hash计算
    当我们执行git commit命令时,Git会对提交的内容进行一系列处理,包括计算该提交的唯一标识符(也称为SHA-1哈希值)。这个哈希值是一个40字符长的字符串,用来唯一标识这次提交。计算哈希值的过程涉及到提交信息、文件的内容以及其他相关元数据。

  2. 保存到对象目录
    提交成功后,Git会将所有对象(如文件快照、树对象和提交对象)存储在.git/objects目录中。每个对象都以其SHA-1哈希值作为文件名进行存储。这种方式不仅确保对象的唯一性,还优化了存储空间,因为相同内容的对象只会存储一次。

  3. 查看提交详情
    可以通过多种命令查看提交的详细信息。常用的指令包括:

    • git show:显示最近一次提交的详细信息,包括提交的哈希值、作者、日期、提交信息以及具体的文件变更内容。
    • git log:显示提交历史记录。你可以通过添加选项(如--oneline, --graph等)来调整输出格式。
    • git diff:显示工作目录与暂存区或两个提交之间的差异。
  • 查看最近一次提交:
    git show
    
    该命令会显示最近一次提交的详细信息,包括提交哈希值、作者信息、日期、提交信息以及变更的文件内容。
    在这里插入图片描述
  1. 提交信息头部

    commit 8ceae37d4ace73141961d7c0382746eddd6bdbce (HEAD -> master)
    
    • commit 8ceae37d4ace73141961d7c0382746eddd6bdbce:这是这个提交的SHA-1哈希值,用来唯一标识这次提交。
    • HEAD -> masterHEAD当前指向master分支,意味着这是master分支的最新提交。
  2. 作者信息

    Author: yushifu <yushifu2000s@163.com>
    
    • Author:显示提交的作者和其电子邮件地址。这里表示是由yushifu(邮箱是yushifu2000s@163.com)创建的这个提交。
  3. 日期和时间

    Date:   Thu Jun 13 15:12:49 2024 +0800
    
    • Date:显示提交的日期和时间,这里是2024年6月13日,下午3点12分49秒(+0800表示时区为东八区)。
  4. 提交信息

        haha first git file
    
    • 这个部分是提交时输入的消息(commit message),在这次提交中,消息是haha first git file
  5. 文件变更信息

    diff --git a/yushifu.txt b/yushifu.txt
    new file mode 100644
    index 0000000..e69de29
    
    • diff --git a/yushifu.txt b/yushifu.txt:表示对比的文件是yushifu.txt,文件在提交前后都存在。
    • new file mode 100644:表示这是一个新文件,权限为100644(普通文件,读写权限)。
    • index 0000000..e69de29:表示文件内容的哈希值变化,0000000是因为文件在提交之前不存在,所以没有原始哈希值,e69de29是新文件内容的哈希值。

  • 查看提交历史:
    git log
    
    该命令会显示提交历史记录,每个提交点都会显示哈希值、作者、日期和提交信息。
    在这里插入图片描述

5.修改版本库文件

在txt文件中增加一些内容
在这里插入图片描述

修改后,Git版本库中的文件和本地的文件就有了不同。我们可以查看状态:
在这里插入图片描述

  1. 当前分支

    On branch master
    
    • 说明你当前在 master 分支上。
  2. 未暂存的修改

    Changes not staged for commit:
    
    • 这个部分列出了你已经修改但还没有使用 git add 命令添加到暂存区(staging area)的文件。
  3. 提示信息

    (use "git add <file>..." to update what will be committed)
    (use "git restore <file>..." to discard changes in working directory)
    
    • 提示你可以使用 git add <file> 命令来将文件的修改添加到暂存区,以便在下次提交中包含这些修改。
    • 或者,你可以使用 git restore <file> 命令来撤销对工作目录中文件的修改,使其恢复到最后一次提交时的状态。
  4. 修改的文件列表

    modified:   yushifu.txt
    
    • 列出了具体被修改但没有暂存的文件。
  5. 总结

    no changes added to commit (use "git add" and/or "git commit -a")
    
    • 表示当前没有任何变化被添加到暂存区,也就是说,如果现在执行 git commit,不会有任何修改被提交。

modified表示文件已经修改了,我们可以把这一次的修改提交到版本库中。

原则上来讲,这里的操作顺序依然应该是
在这里插入图片描述

# 先增加,再提交
git add test.txtgit commit

也可以简化一下操作

git commit -a -m "update file"

指令操作中多了一个-a的参数,等同于将增加,提交两步操作融合成了一步

在这里插入图片描述
git commit -a -m "update file"

  • 这个命令同时暂存(stage)和提交(commit)所有被修改过且已被 Git 跟踪的文件。
  • 使用 -a 选项,Git 会自动将所有已跟踪的文件添加到暂存区,然后进行一次提交。
  • -m "update file" 选项指定了提交信息为 “update file”。

输出如下:

[master cc50c43] update file1 file changed, 1 insertion(+)

说明你在 master 分支上创建了一个新的提交,提交哈希值为 cc50c43,并且 yushifu.txt 文件有一个插入的行。

查看当前Git软件库
在这里插入图片描述
git show

  • 提交哈希:cc50c43a7582d75acc53fd1e2f3dfc1f5b1b4b4e
  • Author:作者信息是 yushifu <yushifu2000s@163.com>
  • 提交日期:Thu Jun 13 15:42:04 2024 +0800
  • 提交信息: update file

文件改动部分:

  • 修改了 yushifu.txt 文件,新增了一行内容 yushifu
  • 注意:该文件最后没有新行(\ No newline at end of file)。

6. 查看版本库文件历史

版本库中的文件我们已经修改并提交了,那么文件的版本信息就会发生变化,那我们如何来查看这个变化呢?这里我们可以采用log指令进行查看。

git log

在这里插入图片描述
通过查看你的 git log 输出,可以看到在 master 分支上的提交历史。它显示了最近两个提交的信息:

  1. 最近的提交

    commit cc50c43a7582d75acc53fd1e2f3dfc1f5b1b4b4e (HEAD -> master)
    Author: yushifu <yushifu2000s@163.com>
    Date:   Thu Jun 13 15:42:04 2024 +0800update file
    
    • 提交哈希: cc50c43a7582d75acc53fd1e2f3dfc1f5b1b4b4e
    • 作者: yushifu yushifu2000s@163.com
    • 日期: 2024年6月13日 15:42:04 (北京时间)
    • 提交信息: update file
  2. 上一个提交

    commit 8ceae37d4ace73141961d7c0382746eddd6bdbce
    Author: yushifu <yushifu2000s@163.com>
    Date:   Thu Jun 13 15:12:49 2024 +0800haha first git file
    
    • 提交哈希: 8ceae37d4ace73141961d7c0382746eddd6bdbce
    • 作者: yushifu yushifu2000s@163.com
    • 日期: 2024年6月13日 15:12:49 (北京时间)
    • 提交信息: haha first git file

如果感觉看着不舒服,也可以美化一下显示方式:

git log --pretty=oneline

在这里插入图片描述

也可以使用简单方式查看

git log --oneline

在这里插入图片描述


7.删除文件

  • 一般情况下,Git软件就是用于管理文件的版本变更,但是在一些特殊的场景中,文件可能作废或不再使用,那么就需要从版本库中删除。
  • 这里说的并不是从物理文件目录中删除,而是从版本库中删除。

删除目录里的文件

在这里插入图片描述

查看Git版本库状态
在这里插入图片描述

  • 此时Git软件会识别出来,版本库中有一份文件和当前用于临时操作文件的暂存区内的文件状态不一致:版本库中文件还在,但是操作区内的文件已经没有了。

  • 所以软件提供了两个选择:一个是将版本库中的文件也进行(提交)删除操作。另外一个就是从版本库中恢复文件。

在这里插入图片描述

使用指令从版本库中恢复文件

git restore yushifu.txt

在这里插入图片描述

如果想要真正删除文件,那么也要将版本库中同时删除。

在这里插入图片描述

查看日志
在这里插入图片描述


8.恢复历史文件

在 Git 中,文件删除也是一种变更操作,并且所有的变更都会被记录在版本历史中。因此,即使文件在最新的提交中被删除了,我们仍然可以通过回溯到之前的版本来恢复该文件。

查看版本库信息
在这里插入图片描述

将版本库文件重置到某一个版本

# 这里的cc50c43就是版本Hash值,用于唯一确定版本库中此版本的标记# 如果不记得具体的版本值,版本值也可以使用HEAD值,比如最新的上一个版本:HEAD^# 如果后退更多的版本,可以使用 HEAD~Ngit reset --hard cc50c43

在这里插入图片描述

被删除的文件又回来了。

在这里插入图片描述


本文仅供学习使用!

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

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

相关文章

028、工具_Pipeline

Redis客户端执行一条命令分为如下四个过程: 1)发送命令 2)命令排队 3)命令执行 4)返回结果 其中1)+4)称为Round Trip Time(RTT,往返时间)。 Pipeline(它能将一组Redis命令进 行组装,通过一次RTT传输给Redis,再将这组Redis命令的执行结果按顺序返回给客户端,图3-…

早知 121私人导航升级新版本, 第一次使用原生dialog标签。

早知121项目介绍说明 早知121 - 一个快速创建私人导航网站。 用途&#xff1a; 创建个人的工作导航&#xff0c;收集常用网址&#xff0c;可贡献给同事。创建个人垂直领域导航 优点&#xff1a; - 不需懂技术&#xff0c;不用维护服务器&#xff0c;维护私人导航收藏站。 网…

express入门03增删改查

目录 1 搭建服务器2 静态文件托管3 引入bootstrap4 引入jquery5 编写后端接口5.1 添加列表查询方法5.2 添加路由5.3 添加数据表格 总结 我们前两篇介绍了如何利用express搭建服务器&#xff0c;如何实现静态资源托管。那利用这两篇的知识点&#xff0c;我们就可以实现一个小功能…

公司面试题总结(五)

25.谈一谈箭头函数与普通函数的区别&#xff0c;箭头函数主要解决什么问题&#xff1f; 箭头函数与普通函数的区别&#xff1a; ⚫ 语法简洁性&#xff1a; ◼ 箭头函数使用>符号定义&#xff0c;省略了 function 关键字&#xff0c;使得语法更为紧凑。 ◼ 对于单行函…

事件、方法实现 on_radioGreen_clicked ,on_chkBoxUnder_clicked,Qfont,QPalette

Vertical Layout 、Horizontal Layout 实验窗体自适应布局 接上篇界面布局&#xff0c; 实验checkBox、radioBox 的事件槽&#xff0c; 使用Qfont组件变更纯文本框QPlainTextEdit中字体的下划线、加粗、斜体效果 使用调色板组QPalette变更纯文本框QPlainTextEdit中文本颜色 UI…

三、网络服务协议

目录 一、FTP&#xff1a;文件传输协议 二、Telnet&#xff1a;远程登录协议 三、AAA认证 四、DHCP 五、DNS 六、PPP协议 七、ISIS协议 一、FTP&#xff1a;文件传输协议 C/S架构&#xff0c;现多用于企业内部的资料共享和网络设备的文件传输&#xff0c;企业内部搭建一…

element table 点击某一行中按钮加载

在Element UI中&#xff0c;实现表格&#xff08;element-table&#xff09;中的这种功能通常涉及到数据处理和状态管理。当你点击某一行的按钮时&#xff0c;其他行的按钮需要动态地切换为加载状态&#xff0c;这可以通过以下步骤实现&#xff1a; 1.表格组件&#xff1a;使用…

手机流畅运行470亿参数大模型,上交大发布PowerInfer-2推理框架,性能提升29倍

苹果一出手&#xff0c;在手机等移动设备上部署大模型迅速成为行业焦点。 目前&#xff0c;移动设备上运行的模型相对较小&#xff08;苹果的是3B&#xff0c;谷歌的是2B&#xff09;&#xff0c;并且消耗大量内存&#xff0c;这在很大程度上限制了其应用场景。 即使是苹果&…

【西瓜书】9.聚类

聚类任务是无监督学习的一种用于分类等其他任务的前驱过程&#xff0c;作为数据清洗&#xff0c;基于聚类结果训练分类模型 1.聚类性能度量&#xff08;有效性指标&#xff09; 分类任务的性能度量有错误率、精度、准确率P、召回率R、F1度量(P-R的调和平均)、TPR、FPR、AUC回归…

20240613解决飞凌的OK3588-C的核心板的USB3.0接口不读U盘的问题

20240613解决飞凌的OK3588-C的核心板的USB3.0接口不读U盘的问题 2024/6/13 15:21 缘起&#xff0c;由于USB3.0的CC芯片在飞凌的OK3588-C的开发板的底板上&#xff0c;一切正常。 如果你单独使用核心板&#xff0c;很容易出现这个问题【省成本没有使用CC芯片】&#xff1a;不读U…

LabVIEW开发CAN通讯协议

在LabVIEW中开发CAN&#xff08;Controller Area Network&#xff09;通讯协议时&#xff0c;需要全面考虑硬件选择、驱动安装、通信配置、错误处理、数据解析和实时性等多个方面。本文详细介绍了在LabVIEW中实现CAN通讯时的关键点和最佳实践&#xff0c;确保系统的稳定性、可靠…

JFrame.setDefaultLookAndFeelDecorated

在java Swing编程中,作为窗体,我们经常编写类继承JFrame,在main方法中进行加载,如下 有一种方法,不用继承JFrame也可以弹窗,代码如下 但是这个跟我们今天的setDefaultLookAndFeelDecorated有什么关系呢,这个设置,必须在new 对象前进行调用,才有装饰效果,如下 说白了…

Java中Transactional在不同方法间的穿透性,rollbackFor参数含义

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 在Java开发中&#xff0c;经常会遇到需要在一个事务中执行多个操作的场景。为了确保这些操作的原子性&#xff0c;可以使用Spring框架提供的Transactional注解来实现事务管理。然而&#xff0c;在实际开发过程中&…

【Intel CVPR 2024】通过图像扩散模型生成高质量360度场景,只需要一个语言模型

在当前人工智能取得突破性进展的时代&#xff0c;从单一输入图像生成全景场景仍是一项关键挑战。大多数现有方法都使用基于扩散的迭代或同步多视角内绘。然而&#xff0c;由于缺乏全局场景布局先验&#xff0c;导致输出结果存在重复对象&#xff08;如卧室中的多张床&#xff0…

JVM性能优化案例:减少对象频繁创建

JVM性能优化案例&#xff1a;减少对象频繁创建 案例背景 某金融应用系统在处理大量并发交易时&#xff0c;响应时间过长&#xff0c;并且有时出现内存溢出&#xff08;OutOfMemoryError&#xff09;的问题。经过分析&#xff0c;发现问题主要出在频繁的对象创建和较差的内存管…

如何降低pcdn的延迟?

要降低P2P CDN的延迟&#xff0c;可以采取以下操作&#xff1a; 一&#xff0e;优化网络连接&#xff1a; 1、使用有线网络连接替代无线连接&#xff0c;因为有线连接通常提供更稳定的数据传输。 2、升级家庭或企业路由器&#xff0c;选择性能更好的路由器以提高网络传输速度…

【后端开发】服务开发场景之高可用(冗余设计,服务限流,降级熔断,超时重试,性能测试)

【后端开发】服务开发场景之高可用&#xff08;冗余设计&#xff0c;服务限流&#xff0c;降级熔断&#xff0c;超时重试&#xff0c;性能测试&#xff09; 文章目录 序&#xff1a;如何设计一个高可用的系统&#xff1f;可用性的判断指标是什么&#xff1f;哪些情况会导致系统…

SJ902安全网贯穿测试仪

产品内容 安全网耐贯穿试验机是根据GB 5725-2009 《安全网》用于检测安全网的耐贯穿性能。 技术指标 1、贯穿物&#xff1a;直径50mm&#xff0c;质量5kg的2圆棒 2、贯穿试验架与水平面夹角&#xff1a;30 3、贯穿试验高度&#xff1a;距离被贯穿网中心1米 4、电动提升、…

怎么防止源代码泄露?9种方法教会你!

怎么防止源代码泄露&#xff1f;首先要了解员工可以通过哪些方式将源代码传输出去&#xff01; 物理方法&#xff1a; — 网线直连&#xff0c;即把网线从墙上插头拔下来&#xff0c;然后和一个非受控电脑直连; — winPE启动&#xff0c;通过光盘或U盘的winPE启动&#xff0c;甚…

操作系统——信号

将信号分为以上四个阶段 1.信号注册&#xff1a;是针对信号处理方式的规定&#xff0c;进程收到信号时有三种处理方式&#xff1a;默认动作&#xff0c;忽略&#xff0c;自定义动作。如果不是自定义动作&#xff0c;这一步可以忽略。这个步骤要使用到signal/sigaction接口 2.…