Skip to content
Java天命人
Main Navigation首页文章流水
Git之基础概念
Git之IDEA可视化窗口
Git之案例-理解工作流
Git之案例-善用临时分支
Git之案例-临时切换其他分支开发
Git之案例-发布临时功能
Git之案例-回滚提交记录
Git之案例-分支重命名
Git之案例-解决冲突
Git之案例-取消某需求代码的合并
Git之案例-合并其他分支的部分需求代码
Git之案例-比较分支差异
Git之案例-查看文件改动历史
Git之案例-多仓库同步
Linux常用命令
Linux环境-安装虚拟机
Linux环境-查看系统配置
Linux环境-生产环境配置
Linux环境-安装OpenJDK
Linux环境-安装Docker
Linux环境-Vim使用
Linux环境-Grep使用
Linux环境-基础shell脚本案例
Linux环境-Java应用日志排查
Linux环境-Java内存溢出排查
安装Ollama
马喽链接

外观

此页内容
Table of Contents for current page
git

Git之基础概念

大河向东流

1879字约6分钟

Git

2024-06-29

作者:大河向东流

签名:愿头发如星辰,永不凋零于这片数据之海。

🙉 博客:https://www.p8r.top

🐾 友情链接 🌵 CC BY-NC-ND 协议

引言

随着软件开发行业的快速发展,版本控制系统(Version Control System,VCS)在日常的开发中扮演着重要的角色。而在众多版本控制系统中,Git以其分布式、高效、灵活的特性,及其强大的分支管理能力,极其适合多人协作开发。从而逐渐受到了全球开发者的关注,并成为了开发者的首选工具。

本文将从空间、工作流模型、状态、基础命令分别来叙述Git的基本概念。

空间

Git仓库的空间分为工作区、暂存区、版本库/本地仓库、版本库/远程仓库,如下图所示。

Git基础概念_空间.drawio

工作区

工作区(workespace)就是项目所在的文件夹,且已初始化(git init)仓库。初始化后,项目目录下会存在一个隐藏文件夹(.git),相关暂存文件、版本库信息都会存储在该文件夹下,具体存储的文件形式的不必深究,掌握其概念、基础命令和可视化操作即可。

暂存区

暂存区(stage/index)是用于存放文件的变动,关于一些文件的增删改的文件列表。且暂存区可以设置多个集合,以便存储不同的功能改动,避免在开发时将文件错误提交到版本库中。也可以将改动的代码暂存在本地中,需要的时候释放出来,例如调试配置文件。

版本库/本地仓库

Git具备分布式的特点,每个被版本控制的项目,本地都存在独立的仓库。用户可灵活创建分支,可以通过分支实现多种实际开发场景的合并需求。

版本库/远程仓库

相对于本地仓库来说,其可以拥有多个远程仓库,但大多数实际软件开发中,远程仓库只会有一个。

工作流模型

由于不同业务场景的复杂度不同,实际工作中所使用到的工作流模型有很多种,根据不同的业务场景,采取便捷、合适、可控的工作流模型即可。

最常见的工作流模型:

  • 主要分支
    • master(生产分支)
    • develop(开发分支)
  • 发布分支
    • release(发布分支)
  • 临时分支
    • hotfix(补丁分支)
    • feature(功能分支)

注意:在需求研发时,会创建大量的临时分支(feature, hotfix),随着新版本的上线,临时分支的生命周期也就结束了,过时分支应及时删除。

分支命名

创建分支的时候,命名规则使用/进行分隔,例如SourceTree、IDEA可视化软件查看分支的时候,可按照文件夹形式进行显示。

例:用户jack和rose需要在v1.1版本号上开发查询和删除需求,开发软件使用IDEA。

创建如下v1.1的feature分支:

image-20240630222920592

开启可视化的分组显示功能,即可自动按照/进行分隔:

image-20240630222947633

按版本需求分配到人的时候,利用“廉价”的临时分支,再搭配commit、stash、unstash,可以灵活的在各个需求中随时切换、调试、开发。

状态

已修改

已修改(Modified)状态包含对文件的新增、删除、修改,未添加控制。例如在IDEA的文件树中,文件名对应会显示成为绿色、灰色、蓝色、红色。

已暂存

已暂存(Stage)状态只是对文件的两种状态进行区分,一种是已经加控制(git add),另一种是新增的文件,未被添加版本控制。像IDEA的暂存区,可以显示多个集合,以便于区分不同功能下的改动。

已提交

已提交(Commit)是将已暂存的文件提交至版本库。提交时,会附带作者、邮箱、描述、时间信息。

基本命令

add

添加,将文件进行版本控制。

commit

提交,提交到本地仓库。

push

推送,推送至远程仓库。

chechout

检出,将分支检出到本地。

merge

合并,合并文件内容,解决冲突。

rebase

变基,将某功能分支上的多条提交记录,合并到主分支时,将多条记录变更为一条记录。

reset

重置,将当前本地分支代码,重置为某一条提交记录,若代码没有推送至远程仓库,代码将会丢失。

revert

回滚,将提交的某一条记录回滚。

fetch

获取,刷新远程所有分支记录,不会更新本地分支代码。

pull

拉取,指定拉取某分支代码,至当前本地工作分支。

tag

标签,对某一条记录打标签,例如版本的发布,远程仓库可以设置对标签的保护,以便于版本代码的检出。

stash

存储,将暂存区中更改的文件存储到本地,并重置当前分支代码为变更前的文件。

unstash

释放存储,将存储区中存储的记录,进行释放。本地差异代码将会提示合并,便于存储一些临时代码或配置文件。

cherry-pick

挑选合并,可挑选其他分支上某一条记录,合并到当前分支。

history

历史记录,查看当前文件的本地变更历史,方便调试代码时,回溯编码过程中的变更。

compare

比较,与远程分支比较,可以查询出当前文件或文件夹在远程的所有历史更改版本。

show diff with workingtree

差异合并,比较当前分支和指定分支的差异代码,配合get from batch,指定分支的代码拉取到本地。适用于将其他分支的部分代码,合并到当前分支。

忽略文件

一般在创建项目的时候,会在工程最外层文件夹下配置[.gitignore]文件,大多数git可视化工具,暂存区中的显示会自动忽略所配置的文件。

规则

  1. 空格不匹配任意文件,可作为分隔符,方便阅读。
  2. # 用于注释,\表示转义(如需使用实体\,则要加引号"")。
  3. * 可以匹配任何字符(0或多个)。
  4. ? 可以匹配单个字符。(不可以匹配/)
  5. / 用于分隔目录:
    1. 当/在开头时,表示从.gitignore文件所在的根目录开始匹配。
    2. 当/在末尾时,只匹配目录及该目录下面的全部内容,否则同名的目录和文件都将匹配。
  6. !开头的模式标识否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用!也不会再次被包含。
  7. [] 通常用于匹配一个字符列表,如:a[mn]z可匹配amz和anz。
  8. ** 用于匹配多级目录,如a/**/b可匹配a/b,a/x/b,a/x/y/b。
上一页Git之IDEA可视化窗口

CC BY-NC-ND 协议 | IPC备案 豫ICP备2024085075号-1 | 豫公网安备41152302000190

Copyright © 2024 p8r.top. All Rights Reserved. 夏和顺 版权所有.