首页 > 其他分享 >笔记:Git学习之应用场景和使用经验

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

时间:2024-03-02 09:11:46浏览次数:20  
标签:Git git 合并 笔记 场景 提交 commit 分支

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

一、开发环境

Git是代码版本控制工具;Github是代码托管平台。
工具组合:VSCode + Git需要安装的软件:vscode、Git其中vscode需要安装的插件:GitLens、Git History

二、应用场景

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

三、使用总结

基础操作,参考廖雪峰的Git教程https://www.liaoxuefeng.com/wiki/896043488029600 Git 基本工作流程
3.1 版本管理
3.1.1 更改提交
git commit使用 git commit 将当前工作目录的更改保存到本地代码库。每次提交(commit)都会创建一个新的提交对象,避免将无关或不相关的修改混合在一起提交。
3.1.2 版本回退
两种方式:reset、revertgit 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                #查看状态,包括忽略的文件


资料整理自网络






















标签:Git,git,合并,笔记,场景,提交,commit,分支
From: https://www.cnblogs.com/bog-box/p/18048299

相关文章

  • Gitlab Runner自动执行Docker容器
    概述Gitlab完全可以执行dockerrun命令,本文用最简单的方式来演示。修改.gitlab-ci.yml加入第4个stage,运行dockerrun。stages:-build-docker-image-test-push-image-run-websitevariables:PAY_IMAGE_FULL_URL:docker.amihome.cn/amihome/chang......
  • Gitlab Runner自动推送Docker映像
    接上文,增加两个stage最简单的推送,其实是在dockerbuild后边带上--push的开关即可。但是不经过测试就上传,Docker仓库里很快会堆满垃圾。所以我们设计新增两个场景,经过测试之后才push映像去仓库。stages:-build-docker-image-test-push-imagevariables:......
  • Gitlab Runner自动制作C#网站项目的Docker映像
    概述代码签入Gitlab后,GitlabRunner自动执行dockerbuild,构建网站应用的Docker映像。在VisualStudio2022中创建解决方案在Gitlab中创建项目这一步省略。签入源代码到Gitlab为项目添加Dockerfile在解决方案根目录下创建“.gitlab-ci.yml”stages:-build-docke......
  • vagrant学习笔记
    vagrant镜像网站:https://app.vagrantup.com/boxes/search?utf8=%E2%9C%93&sort=downloads&provider=&q=centos使用putty连接vagrant创建的虚拟机:IP:127.0.0.1 端口:2222  ==============>IP&PORT是你在启动虚拟机的时候出现的IP与PORT在vagrant中创建一个虚拟机的过程:1)......
  • Git 分支管理:优化版本控制与应急处理的关键策略
    使用Git分支:轻松管理不同版本和应对紧急情况的最佳实践使用Git分支在Git中,分支是主仓库的新/独立版本。假设你有一个大型项目,需要对其进行设计更新。没有使用Git时:复制所有相关文件以避免影响实时版本开始进行设计工作,并发现代码依赖于其他文件中的代码,这些文件也......
  • Java学习笔记——第二天
    进制知识二进制、八进制和十六进制二进制:只有0和1两个数字,按照逢2进1的方式表示数据。八进制:只有0~7八个数字,按照逢8进1的方式表示数据。十六进制:由0~9以及A,B,C,D,E,F,共十六个数字,按照逢16进1的方式表示数据,其中A,B,C,D,E,F分别代表十进制的10,11,12,13,14,15。Java程序中支持书写二进制、......
  • Spectrum Digitizer NETBOX|LXI数据采集|瞬态记录仪
    产品简介:♦DigitizerNETBOX配有4/8通道♦512MSamples(1GB)采集内存♦或16通道2×512MSamples采集内存Ethernet/LXI接口,16位数字化仪,单端/真正差分输入更多信息请加weixin-pt890111获取数字化仪硬件在DigitizerNETBOX内部安装已经被成功证明了的Spectrum数字化仪的硬件部......
  • 网络流笔记
    资料用最通俗的语言让你学会网络流$\begin{array}{c}\left|f+f'\right|=\left|f\right|+\left|f'\right|\end{array}$所以,当可行流的残余网络有可行流,原网络的可行流一定不是最大流对于任何一个可行解,都对应一个可行流并且对于任何一个可行流,都对应一个......
  • 10199元起 LG gram Pro 2024款笔记本上架:酷睿Ultra 7+120Hz OLED屏
    LGgramPro2024款笔记本目前已经上架,首发10199元起。设计上,新款笔记本的重量只有1199克,厚度仅为12.4毫米,轻薄机身可以轻松放入日常背包。据悉,新款笔记本提供了16英寸(16Z90SP)和17英寸(17Z90SP)版本,采用2.8KOLED屏幕,支持120Hz超高刷新率。性能上,新款笔记本可选英特尔酷睿Ultra......
  • Java 韩顺平老师的课,记的(前6章)笔记
    https://www.bilibili.com/video/BV1fh411y7R8/?p=110&spm_id_from=333.880.my_history.page.click&vd_source=92305fa48ea41cb7bedb3ab5e056d42d韩顺平老师在b站课的链接。 010,JDK的介绍 018,Java开发细节 6,一个源文件中最多只能有一个public类。其他类的个数不限。......