笔记: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博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

客户文章|肠道微生物群在强迫症发病中的关键作用:琥珀酸信号揭示新机制

凌恩客户上海交通大学在《Molecular Psychiatry》期刊上(IF11.0)发表了关于强迫症患者肠道微生物菌群通过琥珀酸影响小鼠行为及病况的文章。该研究通过将强迫症患者的粪便微生物群移植至小鼠体内&#xff0c;诱导小鼠出现强迫症行为&#xff0c;改变了其肠道微生物群&#xff0…

LLM指令微调Prompt的最佳实践(五):文本转换Prompt

文章目录 1. 前言2. Prompt定义3. 编写文本转换的Prompt3.1 文本翻译3.1.1 识别语种3.1.2 多语种转换3.1.3 语气转换3.1.4 综合翻译器 3.2 风格转换3.3 文本格式转换3.4 拼写/语法纠错 4. 参考 1. 前言 前情提要&#xff1a; 《LLM指令微调Prompt的最佳实践&#xff08;一&…

Python学习从0开始——Kaggle实践可视化001

Python学习从0开始——Kaggle实践可视化001 一、创建和加载数据集二、数据预处理1.按name检查&#xff0c;处理重复值&#xff08;查重&#xff09;2.查看存在缺失值的列并处理&#xff08;缺失值处理&#xff09;2.1按行或列查看2.2无法推测的数据2.3可由其它列推测的数据 3.拆…

Python爬取豆瓣电影+数据可视化,爬虫教程!

1. 爬取数据 1.1 导入以下模块 import os import re import time import requests from bs4 import BeautifulSoup from fake_useragent import UserAgent from openpyxl import Workbook, load_workbook1.2 获取每页电影链接 def getonepagelist(url,headers):try:r reque…

Android实现获取本机手机号码

和上次获取设备序列号一样&#xff0c;仍然是通过无障碍服务实现&#xff0c;在之前的代码基础上做了更新。代码和demo如下&#xff1a; package com.zwxuf.lib.devicehelper;import android.accessibilityservice.AccessibilityService; import android.app.Activity; import…

千万不能踏入的渠道管理五大误区!【附策略】

一、引言 在当今激烈的市场竞争环境中&#xff0c;有效的渠道管理是企业获得竞争优势的关键。然而&#xff0c;在实践过程中&#xff0c;不少企业因陷入管理误区而影响了市场拓展和品牌建设。本文旨在揭示渠道管理中常见的五大误区&#xff0c;并提供避免策略&#xff0c;帮助…

现代农业利器:土壤检测仪器的应用与未来

在现代农业发展的浪潮中&#xff0c;土壤检测仪器以其精准、高效的特点&#xff0c;成为了农业生产的得力助手。这些看似不起眼的设备&#xff0c;实际上在保障农产品质量、提高农业生产效率方面发挥着举足轻重的作用。 一、土壤检测仪器&#xff1a;现代农业的“眼睛” 土壤检…

科技云报道:人工智能“顶流”齐聚WAIC 2024,他们都做了什么?

科技云报道原创。 一个由智能驱动的未来世界长啥样&#xff1f; 从完成跨海跨城航线的“空中的士”、全无人驾驶汽车、实现奔跑功能的全尺寸通用人形机器人到百度文心一言、讯飞星火、阿里通义千问、华为盘古、商汤日日新等大模型&#xff0c;从智能制造引领的“灯塔工厂”到…

TTS文本转声音:fish-speech 推理、requests访问接口案例

参考: https://hub.docker.com/r/lengyue233/fish-speech https://speech.fish.audio/inference/#http-api 下载 下载模型: HF_ENDPOINT=https://hf-mirror.com huggingface-cli download fishaudio/fish-speech-1.2 --local-dir checkpoints/fish-speech-1.2下载的内容有…

GoodTask for Mac:优雅高效的任务管理助手

在快节奏的工作生活中&#xff0c;你是否需要一个优雅且高效的任务管理工具来助你一臂之力&#xff1f;GoodTask for Mac正是你的理想选择&#xff01; GoodTask以其简洁直观的界面设计&#xff0c;让你一眼就能看清所有的待办事项。你可以轻松创建任务、设置提醒&#xff0c;…

请查收!模拟电路精选书单一份(可下载)

在电子工程的广阔天地中&#xff0c;模拟电路设计是一门艺术&#xff0c;也是一种科学。它要求设计师不仅要有深厚的理论知识&#xff0c;还要有精湛的实践技能。随着技术的发展&#xff0c;模拟电路设计领域不断涌现新的理论、技术和工具&#xff0c;这使得学习和掌握模拟设计…

虚拟ECU:纯电动汽车发展下的新选择

人类文明的进步是一个不断自我否定、自我超越的过程。21世纪以来&#xff0c;随着科技进步和经济社会发展&#xff0c;能源和交通系统已从独立于自然环境的孤立系统&#xff0c;转变为与自然、技术、社会深度耦合的复杂系统。为实现可持续发展和应对气候变化&#xff0c;世界各…

JDBC 学习笔记+代码整理

Tip Idea自带可视界面&#x1f449;MySQL 图形化界面-CSDN博客 Idea2022无add Framework support选项&#x1f449;最新版IDEA:Add web Framework Support步骤/构建JavaWeb项目步骤_idea add framework support-CSDN博客 基本步骤 1.加载驱动包Driver 2.建立与数据库的连接C…

MYSQL 设置主从同步

效果图 主数据库表数据 从数据库表数据 mysql 数据库配置:主数据库 设置主数据 my.cnf vim /etc/mysql/my.cnf 配置内容 [mysqld] server-id=1 log-bin=mysql-bin # 不需要同步的表 binlog-ignore-db=mysql binlog-ignore-db=sys binlog-ignore-db=performance_schema bi…

Spire.PDF for .NET【文档操作】演示:以特定的缩放比例/百分比打开 PDF 文件

有时&#xff0c;我们可能需要在显示 PDF 文件时更改缩放比例以满足我们的要求。在本文中&#xff0c;我们将演示如何使用 Spire.PDF for .NET 以特定的缩放比例/百分比&#xff08;例如默认值、100% 或任何其他所需的缩放比例&#xff09;打开 PDF 文件。 Spire.PDF for .NET…

TAPD项目管理软件无法与企业微信进行关联

TAPD一段时间未使用后&#xff0c;需要重新启动&#xff0c;此时会出现你的企业微信尚未与TAPD账号关联的提示 解决方案&#xff1a;找到TAPD应用&#xff0c;先删除应用&#xff0c;然后再解除禁用即可

基于python 的动态虚拟主机

将自己电脑上的Python脚本文件上传到虚拟机/var/www/cgi-bin/目录下 [rootlocalhost conf.d]# cd /var/www/cgi-bin/ [rootlocalhost cgi-bin]# rz -E rz waiting to receive.编辑vhost.conf配置文件 [rootlocalhost conf.d]# vim vhost.conf<virtualhost 192.168.209.140…

消息中间件ApacheKafka在windows简单安装

一.背景 之前公司需要API网关管理软件ApacheShenYu&#xff0c;我相信把调用的记录都存到一个数据库。他支持日志推送到kafka&#xff0c;所以&#xff0c;我准备尝试一下通过kafka接收调用的日志信息。第一步&#xff0c;当然是安装kafka了。 二.ApacheKafka的下载 打开下载…

Docker-自定义镜像发布到DockerHub仓库、阿里云仓库

文章目录 推送镜像DockerHub仓库推送镜像阿里云仓库 更多相关内容可查看 推送镜像DockerHub仓库 在服务器中 使用 docker 登录命令 docker login -u 账户 #enter 后输入密码推送镜像到DockerHub docker push 镜像名:tag但个人不建议推送到DockHub上&#xff0c;毕竟不是咱自…

【Python机器学习】处理文本数据——停用词

删除没有信息量的单词有一种方法&#xff0c;就是舍弃那些出现次数太多以至于没有信息量的单词。 有两种主要方法&#xff1a; 1、使用特定语言的停用词&#xff08;stopword&#xff09;列表&#xff1b; 2、舍弃那些出现过于频繁的单词。 scikit-learn的feature_extracti…