介绍

Git 是一个免费开源的分布式版本控制系统,用于跟踪文件的更改,特别是源代码。它允许多个开发者协作开发项目,记录每一次代码的变更,并可以轻松地回滚到之前的版本。

版本控制系统分为 集中式分布式

  • 集中式:svn
  • 分布式:git

Git官方文档:https://git-scm.com/book/zh/v2

关键概念

仓库(Repository)

一个git仓库包含项目的所有文件和历史版本信息,通常位于 .git 目录中。

分支(Branch)

分支是代码开发的独立线路。master(或 main )是默认分支,开发人员可以创建新的分支以进行独立开发。

提交(Commit)

提交是对文件的快照,记录了文件的状态和更改。每次提交都有一个唯一的哈希值。

暂存区(Staging Area)

暂存区是一个中间区域,用来保存你想要提交的更改。

工作区(Working Directory)

工作区是你当前正在工作的目录,包含所有未提交的代码。

远程仓库(Remote Repository)

远程仓库是托管在服务器上的仓库,开发者可以从中拉取或推送代码。

Git的四个区域

  • 工作区(Working Directory):也叫工作目录或本地工作目录,就是我们自己电脑上的 .git 所在的目录

  • 暂存区(Stage Area/Index):是一种临时存储区域,用于保存即将提交到Git仓库的修改内容,暂存区是在Git进行版本控制时非常重要的一个区域。一般存放在 .git 目录下的 index 文件,所以我们把暂存区有时也叫索引(index)。

  • 本地仓库(Local Repository):通过 git init 命令创建的仓库,它包含了完整的项目历史和元数据,是Git存储代码和版本信息的主要位置。工作区有一个隐藏目录 .git ,这个不算工作区,而是Git的版本库。

  • 远程仓库(Remote Repository):托管在远程服务器上的仓库。

本地仓库和远程仓库是两个仓库,它们之间是相互独立的。我们可以在本地仓库中做任何修改,但是这些仓库并不会影响到远程仓库,同样远程仓库的修改也不会影响到我们本地仓库。

因此,我们需要一种机制来同步本地仓库和远程仓库的修改内容,让它们的状态保持一致,那这个同步的过程就涉及到 Git 中两个新的命令 pushpull。这两个命令的含义和它们的名字一样,一个表示推送,一个表示拉取。

  • push:把本地仓库的修改推送给远程仓库
  • pull:把远程仓库的修改拉取到本地仓库

Git的三种状态

  • 已修改(Modified):修改了文件,但没保存到暂存区。

  • 已暂存(Staged):把修改后的文件放在暂存区。

  • 已提交(Committed):把暂存区的文件提交到本地仓库。

Git文件的四种状态

当我们的项目被git管理之后,它就不是一个单纯的项目了(项目中的文件都会被git所管理,每个文件都会被分配不同的状态)。

git中的文件有两种状态:未跟踪已跟踪

  • 未跟踪(Untrack):新创建还没有被 Git 管理起来的文件
  • 已跟踪(tracked):指文件已被git所管理(进入监视列表)
    • 未修改(Unmodified):已经被 Git 管理起来,但是文件的内容没有发生变化,还没有被修改过
    • 已修改(Modified):已经修改了文件,但是还没有添加到暂存区
    • 已暂存(Staged):修改过后,并且已经添加到了暂存区内的文件

基本概念

  • main:默认主分支

  • origin:默认远程仓库

  • HEAD:指向当前分支的指针

  • HEAD^:上一个版本

  • HEAD~4:上4个版本

特殊文件

  • .git:Git仓库的元数据和对象数据库
  • .gitignore:忽略文件
  • .gitattributes:指定文件的属性,比如换行符
  • .gitkeep:使空目录被提交到仓库
  • .gitmodules:记录子模块的信息