【Git】本地版本控制

Git 是一个分布式版本控制系统,用于跟踪文件的更改,通常用于源代码管理。它的设计目的是为了协同工作和版本管理,让多个开发人员能够高效地合作开发和维护代码。

Git环境配置

在官网可以找到对应下载:Git - Downloads (git-scm.com)。安装选项均默认即可

也可以在Windows命令行输入:

winget install --id Git.Git -e --source winget 

对于Ubuntu来说,这个PPA提供了最新的稳定的上游Git版本:

add-apt-repository ppa:git-core/ppa  #可以通过添加 Git Core PPA 来安装最新的稳定版 Git
apt update  #添加 PPA 后,更新你的包列表:
apt install git  #安装最新版本的 Git

打开 Git Bash(可以在开始菜单中找到)

设置用户名和邮箱:

git config --global user.name "你的名字"
git config --global user.email "你的邮箱地址(可随意填写)"

验证配置:

git config --list

创建新的本地仓库

在 Git Bash 中导航到你想创建新仓库的目录。例如:

cd D:\Test  #或者在目录下右键打开 Git Bash 窗口

初始化一个新的 Git 仓库:

git init [目录]  #缺省则为当前目录

这将在 D:\Test 目录下创建一个新的 Git 仓库

Git基础操作

在 Git 中,工作目录下文件的修改(增加、删除、更新)会经历几个状态,这些状态会随着你执行不同的 Git 命令而发生变化。主要的状态包括:未追踪(Untracked)已暂存(Staged)已提交(Committed)

git status 命令的作用是查看当前 Git 仓库中文件的状态

git status

未追踪(Untracked)

未追踪状态指的是 Git 不跟踪该文件的任何变化。这些文件存在于你的工作目录中,但尚未被 Git 跟踪。当你在工作目录中新增一个文件时,它就处于未追踪状态。

处理方法:

  • 添加到暂存区(Stage):将未追踪的文件添加到 Git 的暂存区,使其成为已暂存状态,准备提交到仓库中。

    git add <文件名>
    

    或者,如果要添加所有未追踪的文件:

    git add .
    

已暂存(Staged)

已暂存状态指的是文件已经被添加到 Git 的暂存区,准备被提交到仓库中。当你执行 git add 命令后,文件就会进入这个状态。

处理方法:
  • 提交到仓库:将已暂存的文件提交到 Git 仓库中。

    git commit -m "提交说明"
    
  • 撤销暂存:如果你想撤销暂存,可以使用 git reset 命令。这会将文件从暂存区移除,但保留在工作目录中的修改。

    git reset <文件名>
    
  • **恢复工作区文件:**恢复文件到暂存区或特定提交的状态:

    git restore <文件名>
    
  • 恢复暂存区文件:从特定提交或暂存区恢复文件到工作区:

    git restore --source=<提交ID> --staged <文件名>
    

已提交(Committed)

已提交状态指的是文件的修改已经被成功提交到 Git 仓库中,成为历史记录的一部分。

  • 查看提交历史:使用 git log 命令查看提交历史记录。

    git log [option]
    
    • –all 显示所有分支
    • –pretty=oneline 将提交信息显示为一行
    • –abbrev-commit 使得输出的commitId更简短
    • –graph 以图的形式显示
  • 回滚到历史版本:如果需要回滚到过去的某个版本,可以使用 git checkoutgit reset 命令,具体取决于是否想保留历史记录。

    git checkout <提交ID> <文件名>  # 恢复单个文件到特定提交状态
    git restore --source=<提交ID> <文件名>  # 恢复单个文件到特定提交状态
    git reset --hard <提交ID>       # 回滚整个仓库到特定提交状态
    

git checkout是一个功能强大但复杂的命令,包含了切换分支、恢复文件等多种操作。Git 2.23.0 版本中引入新命令git switchgit restore将这些功能分离,使得使用更加直观和明确。

其他状态和命令:

  • 修改但未暂存:如果文件已经被 Git 跟踪,但在提交前又有新的修改,它们会处于修改但未暂存的状态。你可以使用 git diff 查看工作目录和暂存区之间的差异,并决定是否要添加修改到暂存区。

    git diff
    
  • 删除文件:如果你删除了工作目录中的文件,Git 会将其标记为已删除状态。你可以使用 git rm 命令从暂存区中删除文件,并提交该变更。

    git rm <文件名>
    
  • 显示日志:即仓库中所有的引用更新历史。它记录了本地仓库中 HEAD 和分支引用的变动,包括提交、合并、重置等操作,即使在分支已被删除或者重置后也能查看到相应的引用历史。

    git reflog
    

添加文件忽略

将文件添加到 Git 的忽略列表可以防止它们被 Git 跟踪和提交到版本控制系统中。这在某些情况下非常有用,比如临时文件、日志文件、编译生成的文件等不需要进行版本控制的文件。

添加要忽略的文件模式

在工作目录创建并打开 .gitignore 文件,并在其中添加你想要忽略的文件或目录的模式。模式可以是文件名、文件夹名或使用通配符来匹配多个文件。Git 将根据 .gitignore 文件中的规则来忽略相应的文件或目录。以下是一些示例:

  • 忽略特定文件或目录:

    # 忽略临时文件
    temp.txt
    temp/# 忽略编译生成的文件
    *.exe
    *.dll# 忽略日志文件
    *.log
    
  • 使用通配符:

    • * 表示零个或多个字符。
    • ? 表示任意单个字符。
    • ! 表示取消忽略指定模式。

确保 .gitignore 文件本身被跟踪并提交到仓库中,以便所有团队成员都能享有相同的忽略规则。

分支

查看本地分支

使用 git branch 命令可以查看本地仓库中的所有分支。这个命令会列出当前仓库中所有的分支,并且会标注出当前所在的分支(前面带有 * 号)。

命令形式:

git branch

示例输出:

假设你有两个分支:masterfeature/new-feature,其中 master 是当前分支。

* masterfeature/new-feature

在这个示例中,* 标志表示当前所在的分支是 master

创建本地分支

使用 git branch <分支名> 命令可以创建一个新的本地分支,但是创建后并不会自动切换到该分支,需要使用 git checkoutgit switch 命令切换到新创建的分支。

命令形式:

git branch <分支名>

示例:

创建一个名为 feature/new-feature 的新分支:

git branch feature/new-feature

切换分支

使用 git checkout <分支名> 命令可以切换到已经存在的本地分支。

命令形式:

git checkout <分支名>
git switch <分支名>

示例:

切换到 feature/new-feature 分支:

git checkout feature/new-feature

创建并切换到分支

如果要创建一个新的分支并立即切换到该分支,可以使用 git checkout -b <分支名>git switch -c <新分支名>命令。

命令形式:

git checkout -b <新分支名>
git switch -c <新分支名>

示例:

创建并切换到名为 bugfix/123-fix 的新分支:

git checkout -b bugfix/123-fix
git switch -c bugfix/123-fix

这个命令相当于执行了以下两个命令:

git branch bugfix/123-fix    # 创建新分支
git checkout|switch bugfix/123-fix  # 切换到新分支

合并分支

使用 git merge <分支名> 命令可以将指定分支的更改合并到当前分支。

命令形式:

git merge <分支名>

示例:

假设你当前在 master 分支,想将 feature/new-feature 分支合并到 master

git checkout master  # 确保当前在 master 分支
git merge feature/new-feature

删除分支

使用 git branch -d <分支名> 命令可以删除一个已经存在的本地分支。需要注意的是,不能删除当前所在的分支,删除分支前需要切换到其他分支。

命令形式:

git branch -d <分支名>

如果要强制删除一个分支(即使它包含未合并的更改),可以使用 git branch -D <分支名> 命令。

示例:

删除名为 bugfix/123-fix 的分支:

git branch -d bugfix/123-fix

如果想强制删除 bugfix/456-fix 分支,可以使用:

git branch -D bugfix/456-fix

冲突解决

当你执行 git mergegit pull 操作时,如果存在冲突,Git 会在合并的过程中停止,并提示你手动解决冲突。冲突会在合并操作的输出中显示。

冲突文件:

Git 会将冲突标记为带有特殊标记的文件,标记的部分指示了冲突发生的位置。你需要手动编辑这些文件来解决冲突。

例如,一个冲突标记可能看起来像这样:

<<<<<<< HEAD
这是当前分支的内容
=======
这是要合并的内容
>>>>>>> 分支名
  • <<<<<<< HEAD======= 之间的部分是当前分支(通常是你所在的分支)的修改。
  • =======>>>>>>> 分支名 之间的部分是要合并的分支(通常是你要合并进当前分支的其他分支)的修改。

操作:

  • 解决冲突:在冲突标记之间编辑文件,选择或合并你需要的更改。你可以选择保留当前分支的更改、使用要合并的分支的更改,或者合并两者的内容。

  • 保存文件:解决冲突后,保存文件并关闭编辑器。

  • 添加解决后的文件:将解决冲突后的文件标记为已解决状态,使用 git add 命令将文件添加到暂存区。

    git add <冲突文件>
    
  • 完成合并:继续执行合并操作,使用 git commit 提交已解决的合并。

    git commit
    
  • 如果你不想保留默认的合并提交消息,可以通过编辑器提供的界面来编辑提交消息。

分支使用原则与流程

在软件开发中,通常会采用一些标准化的分支管理策略,以便有效地管理和协作。以下是常见的分支使用原则与流程:

分支名称描述主要用途合并目标分支
master线上生产环境的主分支,存放稳定的、经过测试的代码。发布到生产环境的代码版本
developmaster 分支派生,主要用于整个开发团队的集成开发。所有开发人员的日常工作基础master(发布)
feature/xxxxdevelop 分支派生,用于开发新功能或进行特定任务的临时分支。同期并行开发不同功能或任务develop
hotfix/xxxxmaster 分支派生,用于紧急修复线上生产环境中的问题。紧急修复线上的 bugmaster, develop
testdevelopmaster 分支派生,用于代码集成测试和验收测试。确保开发的功能符合预期且不影响现有功能的测试develop, master
predevelop 分支派生,用于预上线环境测试,准备进行线上发布前的最终验证。预发布阶段的最终测试和验证master
release/xxxxdevelop 分支派生,用于准备发布新版本的临时分支。发布前的准备工作,包括版本号更新、文档编写等master
  • 发布到生产环境的代码版本master 分支存放着经过测试并准备发布到生产环境的稳定代码版本。只有经过充分测试和验证的代码才能合并到 master 分支。
  • 所有开发人员的日常工作基础develop 分支是所有开发人员进行日常开发的基础分支,新功能的开发和测试都在这个分支上进行。
  • 同期并行开发不同功能或任务feature/xxxx 分支用于并行开发不同的功能或任务,每个分支对应一个特定的开发任务,完成后合并回 develop 分支。
  • 紧急修复线上的 bughotfix/xxxx 分支通常由 master 分支派生,用于紧急修复线上生产环境中的问题,修复完成后需要合并回 masterdevelop 分支。
  • 确保开发的功能符合预期且不影响现有功能的测试test 分支用于进行集成测试和验收测试,确保开发的功能与预期一致且不会影响现有功能的稳定性。
  • 预发布阶段的最终测试和验证pre 分支用于进行预上线环境的最终测试和验证,确认准备发布到生产环境的代码版本稳定可靠。
  • 发布前的准备工作release/xxxx 分支用于准备发布新版本,包括版本号的更新、文档的编写、最终的测试和验证等工作,完成后将代码合并到 master 分支进行发布。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/41377.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【WebRTC实现点对点视频通话】

介绍 WebRTC (Web Real-Time Communications) 是一个实时通讯技术&#xff0c;也是实时音视频技术的标准和框架。简单来说WebRTC是一个集大成的实时音视频技术集&#xff0c;包含了各种客户端api、音视频编/解码lib、流媒体传输协议、回声消除、安全传输等。对于开发者来说可以…

Unity3D游戏 RPG

丛林探险游戏 人物进行探险游戏 拥有登录&#xff0c;首页&#xff0c;3D物体旋转浏览的功能&#xff0c;还能进行种植树等功能

【matlab 路径规划】基于改进遗传粒子群算法的药店配送路径优化

一 背景介绍 本文分享的是一个基于订单合并的订单分配和路径规划联合优化&#xff0c;主要背景是骑手根据客户需求&#xff0c;从药店取药之后进行配送&#xff0c;配送的过程中考虑路径的长度、客户的服务时间窗、车辆的固定成本等要素&#xff0c;经过建模和优化得到最优的配…

C# WinForm —— 38 SplitContainer介绍

1. 简介 将页面拆分成两个大小可以调整的区域&#xff0c;中间有一个拆分条&#xff0c;可以拖动拆分条来调整左右区域的大小 2. 属性 属性解释(Name)控件ID&#xff0c;在代码里引用的时候会用到BoderStyle边框样式&#xff1a;None、FixedSingle、Fixed3DAutoScroll当控件…

C++ 引用做函数返回值

作用&#xff1a;引用是可以作为函数的返回值存在的 注意&#xff1a;不要返回局部变量引用 用法&#xff1a;函数调用作为左值 示例&#xff1a; 运行结果&#xff1a;

程序员熬夜看欧洲杯被“冻住”,呼吸困难……

2024欧洲杯接近尾声&#xff0c;更是激发球迷兴趣。由于时差关系&#xff0c;很多球迷熬夜看球&#xff0c;啤酒、宵夜成了标配。然而&#xff0c;在这份欢乐背后&#xff0c;也隐藏着健康风险。 日前&#xff0c;浙江杭州29岁的程序员单先生熬夜与朋友看完球赛后开车回家&…

零基础STM32单片机编程入门(九)IIC总线详解及EEPROM实战含源码视频

文章目录 一.概要二.IIC总线基本概念1.总体特征2.通讯流程 三.EEPROM介绍1.M24C08基本介绍2.向M24C08写一个字节时序图3.从M24C08读一个字节时序图 四.GPIO模拟IIC驱动M24C08读写五.CubeMX工程源代码下载六.讲解视频链接地址七.小结 一.概要 IIC(Inter&#xff0d;Integrated …

黑马|最新AI+若依 |初识项目

本章主要内容是&#xff1a; 1.快速搭建了若依前后端项目在本地 2.实现了单表的增删改查快速生成 文章目录 介绍1.若依介绍2.若依的不同版本3.项目运行环境 初始化前后端项目1.下载若依项目2.初始化后端a.把表导入到数据库中b.更改application.yml文件 3.初始化前端a.安装依赖…

基于LoFTR_TRT项目实现LoFTR模型的trt推理与onnx推理,3060显卡下320图像30ms一组图

本博文主要记录了使用LoFTR_TRT项目将LoFTR模型导出为onnx模型&#xff0c;然后将onnx模型转化为trt模型。并分析了LoFTR_TRT与LoFTR的基本代码差异&#xff0c;但从最后图片效果来看是与官网demo基本一致的&#xff0c;具体可以查看上一篇博客记录。最后记录了onnx模型的使用【…

WebAssembly场景及未来

引言 从前面的文章中&#xff0c;我们已经了解了 WebAssembly&#xff08;WASM&#xff09; 的基本知识&#xff0c;演进历程&#xff0c;以及简单的使用方法。通过全面了解了WebAssembly的设计初衷和优势&#xff0c;我们接下来要知道在什么样的场景中我们会使用 WASM 呢&…

在门店里造绿色氧吧!康养行业也这么卷了?

拼啥不如拼健康&#xff0c;现在的人算是活明白了&#xff0c;不但中老年人这样想&#xff0c;年轻人也这样干。你可能不知道&#xff0c;现在众多健康养生门店&#xff0c;逐渐成了年轻人“组团养生”的好去处&#xff0c;也是他们吃喝玩乐之外的新兴消费趋势。 而在看得见的…

原理图设计工作平台:capture和capture CIS的区别在于有没有CIS模块

1环境:design entry CIS 2.参数设置命令options——preference&#xff08;7个选项卡colors/print&#xff0c;grid display&#xff0c;miscellaneous&#xff0c;pan and zoom&#xff0c;select&#xff0c;text editor和board simulation&#xff09; 1)颜色设置colors/p…

应急响应--网站(web)入侵篡改指南

免责声明:本文... 目录 被入侵常见现象: 首要任务&#xff1a; 分析思路&#xff1a; 演示案例: IIS&.NET-注入-基于时间配合日志分析 Apache&PHP-漏洞-基于漏洞配合日志分析 Tomcat&JSP-弱口令-基于后门配合日志分析 (推荐) Webshell 查杀-常规后门&…

R语言实战—圆形树状图

话不多说&#xff0c;先看最终效果&#xff1a; 圆形树状图是树状图的一个变型&#xff0c;其实都是层次聚类。 接下来看代码步骤&#xff1a; 首先要先安装两个包&#xff1a; install.packages("ggtree") install.packages("readxl") 咱就别问问什么…

go zero入门

一、goctl安装 goctl 是 go-zero 的内置脚手架&#xff0c;可以一键生成代码、文档、部署 k8s yaml、dockerfile 等。 # Go 1.16 及以后版本 go install github.com/zeromicro/go-zero/tools/goctllatest检查是否安装成功 $ goctl -v goctl version 1.6.6 darwin/amd64vscod…

vue2响应式原理+模拟实现v-model

效果 简述原理 配置对象传入vue实例 模板解析&#xff0c;遍历出所有文本节点&#xff0c;利用正则替换插值表达式为真实数据 data数据代理给vue实例&#xff0c;以后通过this.xxx访问 给每个dom节点增加观察者实例&#xff0c;由观察者群组管理&#xff0c;内部每一个键值…

sqlite 数据库 介绍

文章目录 前言一、什么是 SQLite &#xff1f;二、语法三、SQLite 场景四、磁盘文件 前言 下载 目前已经出到了&#xff0c; Version 3.46.0 SQLite&#xff0c;是一款轻型的数据库&#xff0c;是遵守ACID的关系型数据库管理系统&#xff0c;它包含在一个相对小的C库中。它是…

VMware虚拟机配置桥接网络

转载&#xff1a;虚拟机桥接网络配置 一、VMware三种网络连接方式 VMware提供了三种网络连接方式&#xff0c;VMnet0, VMnet1, Vmnet8&#xff0c;分别代表桥接&#xff0c;Host-only及NAT模式。在VMware的编辑-虚拟网络编辑器可看到对应三种连接方式的设置&#xff08;如下图…

Square Root SAM论文原理

文章目录 Square Root SAM论文原理核心原理SLAM问题的3种表示贝叶斯网络因子图&#xff08;Factor graph&#xff09;马尔科夫随机场(Markov Random Field, MRF) SLAM最小二乘问题&线性化因式分解 factorization矩阵与图(Matrices ⇔ Graphs)因式分解&变量消元(Factori…

Kafka系列之Kafka知识超强总结

一、Kafka简介 Kafka是什么 Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff08;消息引擎系统&#xff09;&#xff0c;它可以处理消费者在网站中的所有动作流数据。 这种动作&#xff08;网页浏览&#xff0c; 搜索和其他用户的行动&#xff09;是在现代网络上的许多社…