版本控制器Git(1)

文章目录


前言

我又又开新篇了,一个方向学得有点累了就换下口味,只要在后端这个大方向下就行!

这并不难,但是确实是开发过程中不可或缺的工具,赶快学起来吧!


一、初识Git

问题引入

想象一下,你现在在写一份材料报告,交了第一版后被mentor打回,改到第十版又被要求还是提交第一版,这个时候你估计想刀Ta的心就有了

诸如此类,在日常工作或学习中,我们常常遇到需要保存多个版本文件的情况,例如文档编写时为了防止丢失或误改而产生的多个副本(如"报告-v1"、"报告-v2"等)。随着版本数量增加,不仅文件数量增多,而且难以记住每个版本具体修改了什么内容。同样地,项目代码也存在同样的问题

解决方案

为了能够更⽅便我们管理这些不同版本的⽂件,便有了版本控制器。所谓的版本控制器,就是能让你了解到⼀个⽂件的历史,以及它的发展过程的系统。

通俗的讲就是⼀个可以记录⼯程的每⼀次改动和版本迭代的⼀个管理系统,同时也⽅便多⼈协同作业。

⽬前最主流的版本控制器就是 Git 。Git 可以控制电脑上所有格式的⽂件,例如 doc、excel、dwg、dgn、rvt等等。对于我们程序员来说,Git 最重要的就是可以帮助我们管理软件开发项⽬中的源代码⽂件!

注意事项

还需要再明确⼀点,所有的版本控制系统,Git 也不例外,其实只能跟踪⽂本⽂件的改动,⽐如 TXT ⽂件,⽹⻚,所有的程序代码等等。版本控制系统可以告诉你每次的改动,⽐如在第5⾏加了⼀个单词"Linux",在第8⾏删了⼀个单词 "Windows"。

⽽图⽚、视频这些⼆进制⽂件,虽然也能由版本控制系统管理,但没法跟踪⽂件的变化,只能把⼆进制⽂件每次改动串起来,也就是只知道图⽚从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。

二、Git安装

请注意,我是在CentOS Linux release 7.6.1810 (Core)环境下操作的

可以通过以下指令查看git版本,也就是查看了是否安装了git

bash 复制代码
git --version

若还没下载,可以通过这行指令来下载git,在我的本地环境里面我已经下载了

bash 复制代码
sudo yum -y install git

三、Git配置与基本操作

Git创建

要提前说的是,仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制,就必须先创建⼀个仓库出来

创建本地Git仓库的命令是git init。此命令需要在你希望作为仓库根目录的文件夹内执行

执行上述命令后,你会注意到当前目录下出现了一个名为.git的隐藏目录,而我已经创建过,所以提示重复初始化git仓库

.git目录是Git用来跟踪和管理仓库的地方。它包含了所有必要的元数据和配置文件。注意不要手动修改这个目录中的文件,以免破坏Git仓库的结构。

对于有兴趣深入了解的 uu,可以在不影响项目的情况下探索.git目录的内容,以增进对Git工作原理的理解。

Git配置用户名称和地址

当安装完 Git 后,首要任务是设置你的用户名称和 E-mail 地址。这是非常重要的,因为每次 Git 提交都会使用这些信息。

  1. 全局配置(适用于所有仓库):
bash 复制代码
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
  1. 本地配置(仅适用于当前仓库):如果希望在不同仓库中使用不同的用户名或邮箱,可以在特定仓库内执行以下命令,而不带 --global 选项:
bash 复制代码
git config user.name "Your Name"
git config user.email "email@example.com"
  1. 查看配置:使用以下命令可以列出所有的 Git 配置项:
bash 复制代码
git config -l
git config --list
  1. 删除配置:若要删除某个配置项,可以使用 --unset 选项:
bash 复制代码
git config [--global] --unset user.name
git config [--global] --unset user.email

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

  • 工作区:这是你在电脑上编写代码或文件的目录。
  • 暂存区(Stage/Index):一般存放于 .git/index 文件中,用于存储即将提交到版本库中的更改。
  • 版本库(Repository):位于工作区的隐藏 .git 目录下,用来管理所有文件的修改和历史记录。

当你创建一个新的 Git 版本库时,Git 会自动创建一个名为 master 的分支及指向该分支的 HEAD 指针。对工作区的文件进行修改后,需先通过 git add 命令将更改添加到暂存区,再通过 git commit 将暂存区的内容提交至版本库。

.git 是 Git 用来跟踪和管理仓库的地方,包含了所有必要的元数据和配置文件。不要手动修改这个目录中的文件,以免破坏 Git 仓库的结构。

添加文件到仓库

要将新文件或修改后的文件添加到 Git 管理中,需要经历两个步骤:add 和 commit。

添加文件到暂存区

添加单个或多个文件:

bash 复制代码
git add [file1] [file2] ...

添加指定目录及其子目录:

bash 复制代码
git add [dir]

添加当前目录下的所有改动:

bash 复制代码
git add .

提交暂存区内容到本地仓库

提交暂存区的所有内容(默认):

bash 复制代码
git commit -m "message"

提交暂存区的指定文件:

bash 复制代码
git commit [file1] [file2] ... -m "message"

注意,git commit 后面的 -m 参数用于提供描述性提交信息,这部分内容非常重要,因为它记录了你所做的更改细节。

查看提交历史

你可以使用 git log 查看项目的提交历史。为了简化输出,还可以加上 --pretty=oneline 参数以获得更简洁的格式。

bash 复制代码
git log --pretty=oneline

这将显示每个提交的简短摘要(漂亮的一行),包括 提交 ID(SHA1 格式的哈希值),它是一个由 Git 自动生成的唯一标识符,用以区分不同的提交。

你看到的 commit ID 肯定跟我不一样,这以你的为准

四、Git 暂存区、HEAD、对象库及文件

Git内部结构概览

  1. 暂存区(Index)
  • index 文件位于 .git 目录下,是暂存区的物理存储位置。
  • 使用 git add 命令后,修改或新增的内容会被添加到这里。暂存区的作用是在提交前收集所有要纳入版本控制的更改。
  1. HEAD 指针
  • 默认情况下,HEAD 是指向当前分支的一个指针,通常是指向 master 分支。
  • 可以通过查看 .git/HEAD 文件来确认 HEAD 当前所指向的分支。
  1. master 分支
  • master 分支是一个特殊的默认分支,代表项目的主线发展。
  • 查看 master 分支最新的提交 ID(commit id),可以通过查看 .git/refs/heads/master 文件内容
  1. 对象库(Objects)
  • .git/objects 目录存放了所有被 Git 管理的对象,包括提交(commits)、树(trees)、标签(tags)和 blob(文件内容)。
  • 对象名由 SHA-1 哈希值表示,前两位作为子目录名,剩余部分作为文件名。例如,对于提交 ID c9091af21fd2929fd9a8c42876a1f6ba686eb3b9,其路径为 .git/objects/c9/091af21fd2929fd9a8c42876a1f6ba686eb3b9。

查看和理解 Git 对象

  • 使用 git cat-file -p < object-id > 命令可以解码并查看对象的内容。
  • 提交对象包含元数据(如作者信息、时间戳)以及指向树对象的引用

工作区、暂存区、版本库的操作流程

添加文件到仓库

  • 新建或修改文件后,使用 git add 将更改添加到暂存区。
  • 使用 git commit 提交暂存区的内容到本地仓库中。注意,只有在暂存区中的文件才会被提交。

处理未添加到暂存区的文件

  • 如果有新的文件没有通过 git add 添加到暂存区,那么这些文件不会被 git commit 捕获。
  • 解决方法是再次执行 git add 后再进行 git commit。

修改文件

  • Git 跟踪的是修改而非文件本身。任何对文件内容的变更(如新增行、删除行、更改字符等)都被视为一次修改。
  • 修改文件后,可以使用 git status 查看哪些文件已被修改但尚未添加到暂存区。
  • 使用 git diff [file] 显示工作区与暂存区之间的差异,帮助理解具体做了哪些改动。
  • 使用 git diff HEAD -- [file] 查看工作区与最近一次提交之间的区别。


提交修改后的文件

  • 修改文件后,先用 git add 将更改添加到暂存区,然后用 git commit 提交更改。
  • 提交完成后,git status 应显示 nothing to commit, working tree clean,表明没有待提交的更改。

总结

第一篇还是不要搞那么多,下次会为大家带来git的版本回退和撤销修改等精彩内容

相关推荐
香菇滑稽之谈28 分钟前
责任链模式的C++实现示例
开发语言·c++·设计模式·责任链模式
蜕变的土豆34 分钟前
二、重学C++—C语言核心
c语言·c++
夕颜1111 小时前
排查问题的知识记录
后端
zhuyasen1 小时前
Go语言Viper配置详解:conf库优雅解析实战
后端·golang
佳佳_1 小时前
Spring Boot SSE 示例
spring boot·后端
Seven972 小时前
【设计模式】使用解释器模式简化复杂的语法规则
java·后端·设计模式
夏天的阳光吖2 小时前
C++蓝桥杯基础篇(十一)
开发语言·c++·蓝桥杯
Alaso_shuang2 小时前
C++多态
c++
郭涤生2 小时前
并发操作的同步_第四章_《C++并发编程实战》笔记
开发语言·c++·算法
李长渊哦2 小时前
Spring Boot 接口延迟响应的实现与应用场景
spring boot·后端·php