简介
Git
是一种版本控制系统,被广泛用于软件开发中来管理代码的变更并协作开发项目。它是由 Linus Torvalds 于 2005 年创建的,可以敏捷高效地处理任何或小或大的项目
Git 概念
在Git
概念部分,会先简要的介绍仓库
、分支
、合并
的一些基础概念,然后便会按照平常开发的流程分别介绍克隆
、拉取
、添加
、提交
、推送
的基础概念,最后再介绍一下关于工作区
、暂存区
、版本库
、远程仓库
这四个重要的概念
仓库(Repository)
仓库
: 存储代码的地方,可以是本地仓库
或者远程仓库
本地仓库
就是电脑本地的文件夹
远程仓库
就是代码管理库的仓库
分支(Branch)
分支
:基于主干(master)
创建的一条新线,用于开发新功能或者修复问题
项目的开发模式主要是主干开发模式
和多分支开发模式
两种:
主干开发模式
是指所有开发者都基于一个主干分支
(通常是 master/main 分支)进行开发,每次开发完成后直接将代码提交到主干分支
上。这种开发模式简单直接,适用于小型项目或者对开发流程要求不高的项目多分支开发模式
是指开发者在主干分支
之外创建多个分支
,每个分支都用于开发一个独立的功能或者修复一个问题。开发者在分支上进行开发和测试,并在开发完成后将分支合并到主干分支
上。这种开发模式可以保证开发的独立性和可追溯性,适用于大型项目或者对开发流程要求较高的项目
在多分支开发模式中,有一些常用的分支策略:
1. 主干分支(master):用于发布稳定版本的代码
2. 开发分支(develop):用于开发新功能或者修复问题的代码
3. 功能分支(feature):用于开发新功能的分支,通常从 develop 分支上创建
4. 修复分支(bugfix):用于修复问题的分支,通常从主干分支或者 develop 分支上创建
5. 发布分支(release):用于准备发布的分支,通常从 develop 分支上创建
6. 热修复分支(hotfix):用于紧急修复问题的分支,通常从主干分支上创建
注意: 选择适合项目的开发模式和分支策略可以提高项目的开发效率和代码质量,减少代码冲突和错误
合并(Merge)
合并
: 将一个分支的代码合并到另一个分支或者主干上
在Git
中,合并
是将两个或多个分支合并成一个的操作。当在多个分支
上进行开发时,可能需要将不同的分支合并起来,以便在一个分支上进行测试和部署
Git 提供了两种合并方式:快进合并(Fast-forward Merge)
和三方合并(Three-way Merge)
:
快进合并
指的是,如果要合并的两个分支形成了一条直线,也就是说一个分支是另一个分支的直接前身,那么Git
会直接把当前分支指向另一个分支的最新提交,这个操作称为快进合并
。这种合并方式不会创建新的合并提交,因为历史记录已经是线性的了三方合并
指的是,如果要合并的两个分支不是线性的,即它们有共同的祖先节点,那么 Git 就会进行三方合并
。三方合并
会生成一个新的合并提交,它包含了两个分支的修改
注意: 合并操作可能会引发冲突,特别是在多人协作开发的情况下。当 Git 无法自动解决冲突时,需要手动解决冲突并提交修改
克隆(Clone)
克隆
: 从远程仓库复制一份代码到本地仓库
在Git
中,克隆
是指将远程代码库复制到本地计算机上的操作。克隆
操作可以让你获取到一个代码库的完整副本,包括所有的分支
、标签
和提交历史记录
注意: 克隆操作会将整个代码库复制到本地计算机上,因此需要耗费一定的时间和网络带宽。如果只想更新已有的本地代码库,可以使用 Git 的 fetch 和 pull 命令
拉取(Pull)
拉取
: 从远程仓库获取最新的代码
当团队成员向远程代码库提交了新的修改时,可以通过拉取操作将这些修改更新到本地代码库中并将它们合并到当前分支中。如果拉取过程中发生冲突,需要手动解决冲突并提交修改
注意: pull 命令实际上包含了 fetch 操作和 merge 操作。fetch 操作会从远程代码库获取最新的修改,但不会将它们合并到当前分支中;而 merge 操作会将最新的修改合并到当前分支中。如果你只想执行 fetch 操作,可以使用 Git 的 fetch 命令
添加(Add)
添加
:用来添加文件到暂存区
当在工作区
新增了部分功能代码后,需要将修改添加
到暂存区
,然后在需要推送到远端仓库
之前,用下方的Commit 指令
先提交
注意:可以添加指定修改文件或者所有修改文件
提交(Commit)
提交
:将代码的变更保存到本地仓库,并添加注释说明
提交
操作通常用于将一些相关的修改组合成一个逻辑单元,并将其保存到本地代码库中。通过提交操作,可以在每个提交中记录代码的变更历史,方便查看和追溯代码的修改记录
注意: 提交信息应该清晰明确,能够准确描述本次提交所做的修改
注意: 提交操作只会将修改保存到本地仓库中,并不会将其推送到远程代码库。如果你想要将本地代码库中的修改推送到远程代码库,需要再执行推送操作
推送(Push)
推送
: 将本地仓库的代码推送到远程仓库
当在本地代码库中完成了一些修改,并希望将这些修改共享给团队成员时,可以使用推送
操作将它们推送到远程代码库中。执行此操作后,Git
会将本地代码库有代码修改的分支推送到远程代码库对应分支,并将远程代码库更新为本地代码库的最新状态。如果推送过程中发生冲突,需要先解决冲突再执行推送操作
注意: 如果你推送的分支在远程代码库中不存在,Git 会自动创建该分支。如果你推送的分支在远程代码库中已存在,Git 会尝试将本地分支的修改合并到远程分支中。如果合并过程中发生冲突,需要手动解决冲突并提交修改
工作区、暂存区、版本库、远程仓库
在Git
中,有四个重要的概念,分别是工作区(Working Directory)
、暂存区(Staging Area)
、版本库(Repository)
和远程仓库(Remote Repository)
工作区
:指的是正在进行开发工作的目录。在工作区
中,可以新增
、修改
或删除
文件,这些文件的变更都会被Git
记录下来暂存区
:英文叫stage
或index
。一般存放在.git
目录下的index 文件(.git/index)
中,所以暂存区有时也叫作索引(index)
。它是一个中间区域,用于存放将要提交到版本库中的修改。在对工作区进行修改后,需要使用Git
的add 命令
将修改添加到暂存区中,以准备进行提交操作版本库
:工作区有一个隐藏目录.git
,这个不算工作区,而是Git
的版本库,也称为本地代码库
,是Git
用来存放代码的地方。版本库包含了工作区
和暂存区
的所有内容,并记录了每个提交的变更历史。在版本库中,每个提交都被分配了一个唯一的 SHA-1 值,用于标识该提交远程仓库
:是指托管在远程服务器上的代码库,通常用于协作开发和代码备份。远程仓库
可以是自己的私有仓库,也可以是公共的开源代码库。通过推送(Push)
和拉取(Pull)
操作,可以将本地代码库
中的修改同步到远程仓库
中,实现多人协作开发
注意: Git 中的工作区、暂存区和版本库是本地的概念,而远程仓库是分布式版本控制的核心概念之一。在多人协作开发中,推送和拉取操作是非常重要的,它们可以帮助团队成员协同工作,共同推进项目的进展
小结
本篇文章主要是关于Git
的基本概念的介绍,如果在了解完这些概念或者已经知道这些概念之后,请移步到 Git 指令篇 查阅或者学习相关指令