笔记:Git学习之应用场景和使用经验

目标:整理Git工具的应用场景和使用经验

一、开发环境

Git是代码版本控制工具;Github是代码托管平台。

工具组合:VSCode + Git

需要安装的软件:vscode、Git

其中vscode需要安装的插件:GitLens、Git History

二、应用场景

工作场景:嵌入式开发,本地使用

三、使用总结

基础操作,参考廖雪峰的Git教程

Git教程 - 廖雪峰的官方网站

Git 基本工作流程

3.1 版本管理
3.1.1 更改提交

git commit

使用 git commit 将当前工作目录的更改保存到本地代码库。

每次提交(commit)都会创建一个新的提交对象,

避免将无关或不相关的修改混合在一起提交。

3.1.2 版本回退

两种方式:reset、revert

git reset

通过改变HEAD和分支指针指向的方式,进行版本回退,

该操作之后的提交记录不会被保留,并且不会创建新的提交;

git revert

通过创建一个新提交的方式来撤销某次操作,该操作之前和之后的提交记录都会被保留,

并且会将该撤销操作作为最新的提交;

在个人开发上,建议使用reset;但在团队开发中建议使用revert,

特别是公共的分支(比如master),这样能够完整保留提交历史,方便回溯。

3.2 分支管理

一个分支代表一条独立的开发线,使用分支可以从开发主线上分离开来,

不影响主线的同时继续工作。

注:未被放入代码库的文件会在分支切换时被抛弃,造成严重后果。

3.2.1 分支切换

git switch

使用git switch <branch_name> 来切换到指定的分支。

3.2.2 分支合并

两种方式:merge、rebase

相同点:都是从一个分支合并到当前分支。

注意:无论选择哪种方式,都应该谨慎处理可能产生的冲突,

并确保在操作前备份代码或创建临时分支以防意外。

git merge

自动创建一个新的commit,如果遇到冲突,仅需要修改后重新commit。

方式:git merge会将目标分支的提交历史合并到当前分支,形成一个新的合并提交。

这种方式被称为"合并提交"或"三方合并",因为它保留了每个分支的独立提交历史。

结果:合并后的提交历史会包含源分支和目标分支的所有共同提交以及合并提交。

场景:适用于合并公共分支、团队开发时的代码集成,或者希望保留分支独立性的情况。

合并稳定的公共分支,如主分支或发布分支。多人协作开发时,将各自的特性分支合并到开发分支。

git rebase

找公共的节点,直接合并之前commit历史,得到简洁的分支发展历史,去掉了merge commit。

方式:git rebase会将当前分支的提交"移动"到目标分支的最新提交之后,

然后将目标分支的提交历史应用到当前分支。这种方式被称为"变基",因为它改变了提交的基点。

结果:合并后的提交历史是线性的,没有合并提交,看起来更加整洁。

但是原始分支的提交历史会被修改,可能会导致冲突。

场景:适用于想要保持线性提交历史、清晰的提交记录,并希望将自己的提交"放到"目标分支上进行整合的情况。

最好不要在公共分支上使用rebase,如果前后基本上不会有别人改动你的分支,那么推荐rebase。

总结来说,在单人本地多分支开发中,使用变基操作来修复bug并更新所有分支是可行的,

可以确保所有分支都包含了最新的修复,并保持提交历史的线性和清晰。

但是仍然建议在执行变基操作之前,仔细考虑其可能带来的影响,并确保备份了代码。

3.3 标签管理

标签也是版本库的一个快照。

发布版本时,通常在版本库中打个标签(tag),则唯一确定打标签时刻的版本。

切换到某个标签,则相当于把打标签时刻的历史版本取出。

注意:标签总是和某commit挂钩。若该commit既出现在master分支,

又出现在dev分支,则在这两个分支上都可看到此标签。

3.3.1 标签切换

使用git checkout <tagname>可将git仓库的HEAD指针指向标签所在的提交,

如:git checkout v1.0

3.4 开发管理

涉及到多人协作,如果没有清晰的流程和规划,每个人都提交一堆杂乱无章的 commit,

项目很快就会变得难以协调和维护。Git 版本管理同样需要一个清晰的流程和规范。

3.4.1 Git flow

Git flow的优点是清晰可控,缺点是相对复杂,需要同时维护两个长期分支。

该模式是基于"版本发布"的,目标是一段时间以后产出一个新版本。

长期分支:主分支master、开发分支develop。

前者用于存放对外发布的版本,任何时候在这个分支拿到的,都是稳定的分布版;

后者用于日常开发,存放最新的开发版。

短期分支:功能分支(feature branch)、补丁分支(hotfix branch)、发布分支(release branch)。

3.4.2 Github flow

Github flow 是Git flow的简化版,专门配合"持续发布"。

3.4.3 Gitlab flow

Gitlab flow 是 Git flow 与 Github flow 的综合。

它吸取两者的优点,既有适应不同开发环境的弹性,又有单一主分支的简单和便利。

四、经验总结
4.1 文件未修改,但出现在工作区

修改文件权限可修复该异常。

项目修改:git config core.filemode false
全局修改:git config --global core.filemode false

如果在Linux和windows之间传递代码,可能出现该异常。

修改换行符转换设置,可修复该异常。

git config --global core.autocrlf false
git config --global core.filemode false
git config --global core.safecrlf true

4.2 如何使.gitignore中新增设置对之前的文件生效
$ git rm -r --cached .                #清除缓存 -r 表示递归删除(如果有文件夹的话) . 表示所有文件
$ git add .                           #重新trace file
$ git commit -m "update .gitignore"   #提交和注释$ git status --ignored                #查看状态,包括忽略的文件
4.3 导出历史提交记录

git log --pretty=format:"%ai , %an: %s" >> ./commit.log

在项目根目录下执行命令,导出 git 提交记录到桌面git log --pretty=format:"%ai , %an: %s" --since="100 day ago" >> ./commit.log
如果想导出某些提交者的提交记录,可以用grep过滤,比如我想导出zen这个人在项目中的提交记录:git log --pretty=format:"%ai , %an: %s" --since="126 day ago" | grep "zen" >> ./commit.log
当然也可以导出成 Excel 文件git log --date=iso --pretty=format:'"%h","%an","%ad","%s"' >> ./commit.log%ai: 表示提交的时间,格式为 ISO 8601 标准的时间(例如 2024-04-16 14:30:00)。
%an: 表示提交者的名字。
%s: 表示提交时填写的概要或简短描述。
选项说明

-p

按补丁格式显示每个提交引入的差异。

--stat

显示每次提交的文件修改统计信息。

--shortstat

只显示 --stat 中最后的行数修改添加移除统计。

--name-only

仅在提交信息后显示已修改的文件清单。

--name-status

显示新增、修改、删除的文件清单。

--abbrev-commit

仅显示 SHA-1 校验和所有 40 个字符中的前几个字符。

--relative-date

使用较短的相对时间而不是完整格式显示日期(比如“2 weeks ago”)。

--graph

在日志旁以 ASCII 图形显示分支与合并历史。

--pretty

使用其他格式显示历史提交信息。可用的选项包括 oneline、short、full、fuller 和 format(用来定义自己的格式)。

--oneline

--pretty=oneline --abbrev-commit 合用的简写。

选项说明

%H

提交的完整哈希值

%h

提交的简写哈希值

%T

树的完整哈希值

%t

树的简写哈希值

%P

父提交的完整哈希值

%p

父提交的简写哈希值

%an

作者名字

%ae

作者的电子邮件地址

%ad

作者修订日期(可以用 --date=选项 来定制格式)

%ar

作者修订日期,按多久以前的方式显示

%cn

提交者的名字

%ce

提交者的电子邮件地址

%cd

提交日期

%cr

提交日期(距今多长时间)

%s

提交说明

%ai表示提交的时间,格式为 ISO 8601 标准的时间

资料整理自网络

Git 历史提交日志导出到文件中 | 张益铭的博客 (zhangyiming748.github.io)

Git - 查看提交历史 (git-scm.com)

git日志导出命令 - xh_Blog - 博客园 (cnblogs.com)

Git 教程|极客教程 (geek-docs.com)

Git 历史提交日志导出到文件中_eclipse导出git提交记录-CSDN博客

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

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

相关文章

Unity编辑器工具---版本控制与自动化打包工具

Unity - 特殊文件夹【作用与是否会被打包到build中】 Unity编辑器工具—版本控制与自动化打包工具&#xff1a; 面板显示&#xff1a;工具包含一个面板&#xff0c;用于展示软件的不同版本信息。版本信息&#xff1a;面板上显示主版本号、当前版本号和子版本号。版本控制功能…

单目行车测距摄像系统(单目测距-行车)

单目行车测距摄像系统是一种利用单个摄像头实现车辆行驶中前方障碍物距离测量的技术。该系统通过计算机视觉算法&#xff0c;能够实时分析摄像头捕捉的图像&#xff0c;精确计算出车辆与前方物体之间的距离&#xff0c;对于自动驾驶、高级驾驶辅助系统&#xff08;ADAS&#xf…

【探索Linux】P.36(传输层 —— TCP协议段格式)

阅读导航 引言一、TCP段的基本格式二、控制位详细介绍三、16位接收窗口大小⭕窗口大小的作用⭕窗口大小的限制⭕窗口缩放选项⭕窗口大小的更新⭕窗口大小与拥塞控制 四、紧急指针温馨提示 引言 在上一篇文章中&#xff0c;我们深入探讨了一种无连接的UDP协议&#xff0c;它以其…

《新华日报》理论版报刊简介及投稿邮箱

《新华日报》理论版报刊简介及投稿邮箱 《新华日报》是中国共产党在抗日战争时期和解放战争初期创办的大型机关报&#xff0c;1949 年 4 月在南京复刊&#xff0c;1952 年成为中国共产党江苏省委机关报&#xff0c;现为中共江苏省委直属事业单位。 该报纸的理论版&#xff08;…

记录前端发现问题之 mock接口无返回数据导致所有后续接口调用报错:网络异常

1. 背景 就更新了代码&#xff0c;发现新涉及的页面&#xff0c;切换tab 之后会报错网络异常&#xff0c;再次切换其他没涉及的功能页面&#xff0c;继续报错网络异常 测试环境&#xff1a;纯前端代码&#xff0c;后端是前端mock的数据&#xff0c;仅供demo 2. 问题报错 手动…

开箱机视觉系统大揭秘:如何轻松辨别千差万别的包装?

在现代物流仓储领域&#xff0c;开箱机作为提升作业效率的关键设备&#xff0c;正日益受到行业的重视。而开箱机的视觉系统更是其十分强大&#xff0c;能够准确辨认不同包装&#xff0c;确保物流作业的高效与准确。与星派深入探究一下开箱机视觉系统是如何工作的&#xff0c;以…

女生读中职,选择什么专业最吃香!

自《国家职业教育改革实施方案》颁布实施以来,中国职业教育的改革和发展已取得显著进展。目前,我国已建立起世界上规模最大的职业教育体系,中高职学校每年培养约1000万高素质技术技能人才,职业教育实现了历史性的跨越。对于那些不愿加入“千军万马过独木桥”的高考竞争大军,初中…

Firewalld防火墙基础

Firewalld 支持网络区域所定义的网络连接以及接口安全等级的动态防火墙管理工具 支持IPv4、IPv6防火墙设置以及以太网桥 支持服务或应用程序直接添加防火墙规则接口 拥有两种配置模式 运行时配置&#xff1a;临时生效&#xff0c;一旦重启或者重载即不生效 永久配置&#xff1a…

华三多台交换机堆叠配置(环形组网)

组网架构 配置步骤 SW1的配置&#xff1a; irf member 1 priority 32 设置master的优先级为32 interfacec range Ten-GigabitEthernet1/0/49 to Ten-GigabitEthernet1/0/50 shutdown 关闭上述接口&#xff08;将其加入到堆叠口之前需要关闭&#xff0c;否则无法加入&a…

机器学习 - 实现KNN对图像有监督学习的 分类算法 (一)【原理】

一、KNN算法介绍&#xff1a; KNN 算法&#xff0c;或者称 k最邻近算法&#xff0c;是 有监督学习 中的 分类算法 。它可以用于分类或回归问题&#xff0c;但它通常用作分类算法。 KNN &#xff08;K-Nearest Neighbor&#xff09;算法是机器学习算法中最基础、最简单的算法之一…

“不喝鸡汤 不诉离殇”华火电燃灶用实力引领烹饪灶具发展

在这个快节奏的时代&#xff0c;我们常常被各种厨房电器的鸡汤所包围&#xff0c;并悄悄的告诉我们厨房生活是美好与温暖的&#xff0c;但面对现实中的挑战与困难时&#xff0c;常常表现出选择性失明&#xff1b;那些隐藏在传统厨房烹饪环境下的危机&#xff0c;就像是慢性的毒…

[Python学习篇] Python函数

定义函数 语法&#xff1a;使用关键字 def def 函数名(参数): 代码1 代码2 ...... 调用函数 语法&#xff1a; 函数名(参数) 注意&#xff1a;不同的需求&#xff0c;参数可有可无。在Python中&#xff0c;函数必须先定义后使用 示例&#xff1a; # 定义函数 d…

华为仓颉编程语言

目录 一、引言 二、仓颉编程语言概述 三、技术特征 四、应用场景 五、社区支持 六、结论与展望 一、引言 随着信息技术的快速发展&#xff0c;编程语言作为软件开发的核心工具&#xff0c;其重要性日益凸显。近年来&#xff0c;华为公司投入大量研发资源&#xff0c;成功…

小白学python(第三天)

小伙伴&#xff0c;大家好呀&#xff0c;昨天的内容吸收的好&#xff1f;昨天有小伙伴私信我&#xff0c;建议我在博文中加点练习题&#xff0c;可以看出这位童鞋很想学好这门语言哈&#xff0c;那我也尽量满足大家的要求。 从控制台输入 语法格式&#xff1a; 变量名 input…

C++基础(三):C++入门(二)

上一篇博客我们正式进入C的学习&#xff0c;这一篇博客我们继续学习C入门的基础内容&#xff0c;一定要学好入门阶段的内容&#xff0c;这是后续学习C的基础&#xff0c;方便我们后续更加容易的理解C。 目录 一、内联函数 1.0 产生的原因 1.1 概念 1.2 特性 1.3 面试题 …

深入了解Qt 控件:Display Widgets部件(1) 以及 QT自定义控件(电池)

QT自定义控件(电池&#xff09; 在线调色板Qt之CSS专栏Chapter1 QT自定义控件(电池&#xff09;Chapter2 Qt教程 — 3.5 深入了解Qt 控件&#xff1a;Display Widgets部件(1)1 Display Widgets简介2 如何使用Display Widgets部件 Chapter3 Qt自定义控件电池组件使用前言一、最基…

告别熬夜改稿:AI降重工具让论文降重变得轻松又有趣

已经天临五年了&#xff0c;大学生们还在为论文降重烦恼……手动降重确实是个难题&#xff0c;必须要先付点小经费去靠谱的网站查重&#xff0c;再对着红字标注去改&#xff0c;后面每一次的论文呢查重结果都像赌//博&#xff0c;谁也不知道明明是同一篇文章&#xff0c;第二次…

Linux:系统引导过程与服务控制

目录 一、linux 系统引导过程 1.1、引导过程总览 1.2、系统初始化进程 &#xff08;centos 6和7 的区别&#xff09; 1.2.1、centos 6 的引导过程 init 进程 1.2.2、centos 7(systemd进程) 二、MBR、GRUB菜单、忘记密码故障修复 2.1、修复MBR扇区故障 模拟故障 重启…

IT行业入门,如何假期逆袭,实现抢跑

目录 前言 1.IT行业领域分类 2.基础课程预习指南 3.技术学习路线 4.学习资源推荐 结束语 前言 IT&#xff08;信息技术&#xff09;行业是一个非常广泛和多样化的领域&#xff0c;它包括了许多不同的专业领域和职业路径。如果要进军IT行业&#xff0c;我们应该要明确自己…