Git核心知识总结

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉
🍎个人主页:Leo的博客
💞当前专栏: 运维工具配
✨特色专栏:MySQL学习
🥭本文内容:Git核心知识总结
📚个人知识库: Leo知识库,欢迎大家访问
Git使用

1.什么是Git

在了解Git之前,我们先了解一下版本控制这个概念。

1.1 什么是版本控制

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 除了项目源代码,你可以对任何类型的文件进行版本控制。

1.2 为什么需要版本控制

有了它你就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致项目问题出现的原因,又是谁在何时报告了某个功能缺陷等等。

1.3 本地版本控制系统

许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。 这么做唯一的好处就是简单,但是特别容易犯错。 有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。

为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。

Git是当前最先进、最主流的分布式版本控制系统,免费、开源!核心能力就是版本控制。再具体一点,就是面向代码文件的版本控制,代码的任何修改历史都会被记录管理起来,意味着可以恢复到到以前的任意时刻状态。支持跨区域多人协作编辑,是团队项目开发的必备基础,所以Git也就成了程序员的必备技能。

image-20231210155711932

2.Git的来源

image-20231210170017434

Git是一种分布式版本控制系统,它的设计和开发最初由林纳斯·托瓦兹(Linus Torvalds)领导,他也是Linux操作系统的创始人。Git的开发始于2005年,其背景和初始目的与Linux开发社区的需求密切相关。

2.1 背景和初始动机

在Git之前,Linux内核的开发使用的是一个名为BitKeeper的商业版本控制系统。这个系统对Linux社区是免费的,但在2005年,由于一些争议和许可问题,Linux社区失去了对BitKeeper的免费许可。这促使托瓦兹寻找一个新的工具来管理Linux内核的开发。

托瓦兹对版本控制系统有几个明确的需求和目标:

  1. 性能:由于Linux内核的庞大和复杂性,性能成为一个关键因素。Git需要高效地处理大型项目。
  2. 分布式架构:Git被设计为分布式系统,意味着每个开发者的计算机上都有整个代码库的完整历史记录,这样可以减少对中央服务器的依赖。
  3. 数据完整性:Git强调数据的完整性。它通过对文件内容和目录结构使用SHA-1哈希来确保代码历史不被篡改。
  4. 简单的分支和合并:在Linux开发中,分支和合并操作非常频繁。Git被设计为使这些操作尽可能简单和高效。

2.2 Git的发展

Git最初是作为一个命令行工具发布的,但随着时间的推移,围绕Git开发了大量的图形界面工具和增强功能,使其更加用户友好。Git迅速在开源社区中获得了广泛的接受,并逐渐成为世界上最流行的版本控制系统。

2.3 GitHub和Git的普及

Git的普及也与GitHub这样的平台紧密相关。GitHub是一个基于Web的Git版本库托管服务,它提供了图形界面,并增加了如分叉、拉取请求和社交网络功能等特性,这些都极大地促进了Git的普及和开源文化的发展。

3.Git的特点

开源免费,使用广泛。

  • 强大的文档(代码)的历史版本管理,直接记录完整快照(完整内容,而非差异),支持回滚、对比。
  • 分布式多人协作的的代码协同开发,几乎所有操作都是本地执行的,支持代码合并、代码同步。
  • 简单易用的分支管理,支持高效的创建分支、合并分支。

4.Git的基本概念

4.1 概念汇总

概念名称 描述
工作区(Workspace) 就是在电脑里能看到的代码库目录,是我们搬砖的地方,新增、修改的文件会提交到暂存区
暂存区(stage 或 index) 用于临时存放文件的修改,实际上上它只是一个文件(.git/index),保存待提交的文件列表信息。
版本库/仓库(Repository) Git的管理仓库,管理版本的数据库,记录文件/目录状态的地方,所有内容的修改记录(版本)都在这里。
服务端/远程仓库(origin 或 remote) 服务端的版本库,专用的Git服务器,为多人共享提供服务,承担中心服务器的角色。本地版本库通过push指令把代码推送到服务端版本库。
本地仓库 用户机器上直接使用的版本库
分支(Branch) 分支是从主线分离出去的“副本”,可以独立操作而互不干扰,仓库初始化就有一个默认主分支master。
头(HEAD) HEAD类似一个“指针”,指向当前活动分支的最新版本。
提交(Commit) 把暂存区的所有变更的内容提交到当前仓库的活动分支。
推送(Push) 将本地仓库的版本推送到服务端(远程)仓库,与他人共享。
拉取(Pull) 从服务端(远程)仓库获取更新到本地仓库,获取他人共享的更新。
获取(Fetch) 从服务端(远程)仓库更新,作用同拉取(Pull),区别是不会自动合并。
冲突(Conflict) 多人对同一文件的工作副本进行更改,并将这些更改合并到仓库时就会面临冲突,需要人工合并处理。
合并(Merge) 对有冲突的文件进行合并操作,Git会自动合并变更内容,无法自动处理的冲突内容会提示人工处理。
标签(Tags) 标签指的是某个分支某个特定时间点的状态,可以理解为提交记录的别名,常用来标记版本。
master(或main) 仓库的“master”分支,默认的主分支,初始化仓库就有了。Github上创建的仓库默认名字为“main”
origin/master 表示远程仓库(origin)的“master”分支
origin/HEAD 表示远程仓库(origin)的最新提交的位置,一般情况等于“origin/master”

4.2 工作区/暂存区/仓库

工作区(Workspace)就是在电脑里能看到的代码库目录,是我们搬砖的地方,新增、修改的文件会提交到暂存区。

  • 在这里新增文件、修改文件内容,或删除文件。

暂存区(stage或index)用于临时存放文件的修改,实际上上它只是一个文件(.git/index),保存待提交的文件列表信息。

  • 用git add 命令将工作区的修改保存到暂存区。

版本库/仓库(Repository仓库)Git的管理仓库,管理版本的数据库,记录文件/目录状态的地方,所有内容的修改记录(版本)都在这里。就是工作区目录下的隐藏文件夹.git,包含暂存区、分支、历史记录等信息。

  • 用git commit 命令将暂存区的内容正式提交到版本库。
  • master 为仓库的默认分支master,HEAD是一个“指针”指向当前分支的最新提交,默认指向最新的master。

4.3 Git的基本流程

Git的工作流程核心就下面几个步骤。

  1. 准备仓库:创建或从服务端克隆一个仓库。
  2. 编写代码:在工作目录中添加、修改代码。
  3. 暂存(git add):将需要进行版本管理的文件放入暂存区域。
  4. 提交(git commit):将暂存区域的文件提交到Git仓库。
  5. 推送(git push):将本地仓库推送到远程仓库,同步版本库。
  6. 获取更新(fetch/pull):从服务端更新到本地,获取他人推送的更新,与他人协作、共享。

image-20231210170853553

  • git commit -a 指令省略了add到暂存区的步骤,直接提交工作区的修改内容到版本库,不包括新增的文件。
  • git fetchgit pull 都是从远程服务端获取最新记录,区别是git pull多了一个步骤,就是自动合并更新工作区。
  • git checkout .git checkout [file] 会清除工作区中未添加到暂存区的修改,用暂存区内容替换工作区。
  • git checkout HEAD .git checkout HEAD [file] 会清除工作区、暂存区的修改,用HEAD指向的当前分支最新版本替换暂存区、工作区。
  • git diff 用来对比不同部分之间的区别,如暂存区、工作区,最新版本与未提交内容,不同版本之间等。
  • git reset 是专门用来撤销修改、回退版本的指令,替代上面checkout的撤销功能。

基本的 Git 工作流程如下:

  1. 在工作目录中修改文件。
  2. 暂存文件,将文件的快照放入暂存区域。
  3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

4.4 Git的状态

Git在执行提交的时候,不是直接将工作区的修改保存到仓库,而是将暂存区域的修改保存到仓库。要提交文件,首先需要把文件加入到暂存区域中。因此,Git管理的文件有三(+2)种状态:

  • 未跟踪(untracked): 新添加的文件,或被移除跟踪的文件,未建立跟踪,通过git add添加暂存并建立跟踪。
  • 未修改&#
  • 64
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 39
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LeoToJavaer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值