TortoiseGit 入门指南03:将修改提交到版本库

news2024/11/25 15:56:22

你现在应该已经有了一个仓库,在工作过程中会对项目做一些修改,比如添加代码、修复错误等等,你将不定时的将这些更改 提交(commit)到代码仓库。

术语 提交 是将 暂存区 内容放入 版本库 。这个过程涉及到 Git 的一些基本概念,需要在这里说明。我在《TortoiseGit 入门指南02》中解释术语 工作区(workspace)、暂存区(Stage)、版本库(Repository)时说过:

这是 Git 的基本概念之一,你可以忽略这部分内容,但是理解这些基本概念有助于理解 Git 的工作原理,从而更游刃有余的使用版本控制。

这里,我仍然持这个观点。所以当出现新的 Git 基本概念时,让我们先来了解这些重要的概念含义。

工作区 中的每一个文件都不外乎两种状态:未跟踪(untracked)或 已跟踪(tracked)。已跟踪的文件是指那些被纳入了版本控制的文件,简而言之,已跟踪的文件就是 Git 已经知道的文件。工作区中除已跟踪文件外的其它所有文件都属于未跟踪文件,它们既不存在于版本库的记录中,也没有被放入 暂存区

对于 已跟踪 文件,它们的状态可以是 已修改(modified)、已暂存(staged)、未修改(unmodified)三种之一。

在编辑文件时,Git会将它们识别为 已修改,因为自上次提交(commit)以来它们已经被改动(changed)。暂存 已修改的文件,然后 提交 所有 已暂存 的更改,使这些文件再次变为 已跟踪未修改 状态。文件状态的转换流程为:
在这里插入图片描述

需要特别说明的是,当使用 TortoiseGit 软件时,软件屏蔽了“暂存”这个概念,在 TortoiseGit 软件中“提交”,相当于图示中的“暂存 + 提交”。

版本控制能不能发挥最大作用,取决于恰当的提交以及提交时写下的描述信息

  1. 每当完成了一个新功能、修复了一个错误、重构一个模块或者调整格式时,都应该 提交 (commit)一次代码,以便 Git 记录这次修改。
  2. 每次提交,提交信息 都应该清晰、准确。关于提交信息格式,可以参考我的博文《Git提交信息格式》。

提交需要程序员手动操作完成,提交信息需要程序员组织与填写,所以可以这么说,程序员决定了版本控制软件能起多大作用。

提交

有了前面的知识做铺垫,使用 TortoiseGit 软件提交修改就很容易了。

选择要提交的文件和/或文件夹,鼠标右键:TortoiseGit - Commit->master,将弹出“提交对话框”。

提交对话框会显示每个更改的文件,包括已修改、已删除和未跟踪的文件。如果不希望提交某个文件,只需要取消选中该文件。

默认提交对话框仅列出所选文件或目录及其子目录文件。如果要列出项目的所有文件,只需单击 Show Whole Project 复选框。
在这里插入图片描述
在提交对话框中双击任何已修改的文件,会启动差异比较程序以显示最近的修改。也可以拖拽文件到其它文本编辑器或IDE程序,以查看文件详情。比如 lwip 协议栈某次提交的差异:
在这里插入图片描述
底部显示窗中的列可以自定义:在标题行右键单击,弹出右键菜单选择要显示的列,比如可以显示“Last Modified”(最后修改时间)、“Size”(文件大小)等。这些列宽也可以手动改变,这些自定义选项具有记忆功能,下次启动还可以看到相同的标题。单击每一列的标题可以对文件和目录排序。
在这里插入图片描述
选中一个文件,右击鼠标可以调出上下文菜单,提供了更多选项。
在这里插入图片描述

  • Compare with base:与基础版本比较(与最近一次提交做对比),双击该文件也能实现相同效果。

  • Show changes as unified diff:以统一差异(unified diff)方式显示更改。

  • Revert...:将文件恢复或者将文件内容恢复成最后一次提交时的状态(注意这可能丢失当前工作)。

  • Skip worktree:跳过工作树。指示 Git 停止跟踪指定文件。

    比如数据库配置文件,这个配置文件很复杂,远程仓库必须保留一份默认的版本,以便新克隆的项目能包含这个配置文件。一旦克隆到本地,就会修改这个配置文件。因为大家本地数据库配置都不同,导致每个人的数据库配置文件也不同。所以不能将这个文件提交(push)到服务器,否则别人拉取(pull)的时候会把本地的配置搞坏。这种情况如何处理?

    这个时候可以将文件标记为 skip worktree ,之后无论你是否修改此文件,Git 都会将它视为未修改。

    测试:

    将一个修改过的文件 Note.txt 标记为 Skip worktree,文件 Note.txt 叠加的图标由已修改状态改为正常状态,提交列表中没有文件 Note.txt。将工程推送到远程仓库,查看远程仓库中的文件 Note.txt,发现本地修改并没有推送到远程仓库。从远程仓库拉取工程,本地仓库中的文件 Note.txt 没有改变,修改的内容仍然存在。

  • Assume Unchanged:将文件标记为假定未修改

    为什么要将一个文件假定未修改

    当检查一组文件是否被修改的开销很大时,比如对一些体积庞大的文件进行修改,但每次保存Git都要计算文件的变化并更新工作区,这在硬盘慢的时候延时卡顿非常明显。这个时候可以将文件标记为假定未修改。一旦标记为假定未修改,Git 会假定索引中此部分相关文件于工作副本内不作更改。当远程仓库中该文件更改后,此标记自动失效。

    所以将文件标记为假定未修改一般用于:

    1. 当你修改一个巨大的文件时,首先将其标记为假定未修改,让 Git 忽略你对文件做的修改。
    2. 当工作告一段落时,取消假定未修改标记,于是 Git 只需要做一次更新计算。
    3. 提交、推送
  • Restore after commit:提交后恢复文件。

    比如我在一个文件中修改了多处代码,然后我发现这些修改属于两个不同的特性,我想分开提交;又比如我在一个文件中修改了多处代码,这些修改的一部分解决了一个紧急BUG,需要马上提交,但是其它修改因为没有完成所以不能提交。类似这些应用场景可以使用下面方法解决:

    右击提交对话框中的该文件,在弹出菜单中选择 Restore after commit ,TortoiseGit 会自动创建一个文件副本。这时就可以从提交对话框中将该文件拖到编辑器中,或者双击该文件打开 TortoiseGitMerge 工具,将不需要提交的代码去除掉,保存后提交文件。

    等到文件提交完毕,TortoiseGit 会自动将之前保存的副本替换掉提交的文件,就好像在提交前删除的代码又自动回来了一样。

  • Show log:调出提交日志对话框。

  • Blame:将打开 TortoiseGitBlame 程序,显示文件的每一行的作者、最后修改的版本和其它信息。

  • Export selection to...:将选中的文件导出到指定位置,文件名与原来相同并保留目录结构。

  • View revision in alternative editor:用替代的编辑器(默认notepad2)打开选中的文件

  • Open:使用系统默认编辑器打开选中文件

  • Open with...:将弹出 打开方式 对话框,自己选择应用程序打开选中的文件

  • Explore to:打开文件所在目录

  • Move to changelist:移动到变更清单。

    1 变更清单

    如果提交的文件有很多,在提交对话框中这些文件都会混合在一起,可以使用变更清单(change lists)功能为文件分组,更容易看清要提交的文件。

    右击提交对话框中的文件,在弹出菜单中选择 Move to changelist,将文件添加到变更列表或者新建一个变更列表。比如可以将.txt.xml.md格式文件添加到Docs分组中。

    2 从提交列表中忽略指定文件

    如果不想每次都提交某个已更改文件,可以右击提交对话框中的该文件,在弹出菜单中选择 Move to changelist - ignore-on-commit,将这个文件加入到 “ignore-on-commit” 分组中,然后这个文件会自动取消选中。等到你认为可以提交该文件时,可以在提交对话框中手动选中它。









读后有收获,资助博主养娃 - 千金难买知识,但可以买好多奶粉 (〃‘▽’〃)
千金难买知识,但可以买好多奶粉

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

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

相关文章

如何对你的代码进行内存消耗分析

对象生命周期 下面两种创建对象的语句有什么不同呢? 对于 Object myObject;,该对象被创建在栈上,它的特点就是脱离作用域后会自动销毁。而对于 new Object(),它会在堆上动态创建一个对象,它的特点就是即使脱离作用域,该对象也会一直存在,除非你手动释放(delete)它,否…

Layui 简单介绍及入门

目录 一.Layui (国产品牌) 1.1 Layui是什么 二.比较layui和easyui,bootstrap的区别 2.1 layui和bootstrap的对比 2.2 layui和easyui对比 三.Layui入门 四.案例 一.Layui (国产品牌) 1.1 Layui是什么 用我的话来…

峟思科普:水库坝体的裂缝防治措施有哪些

水库大坝的建设与施工是一项庞大的系统工程,它包括设计、施工、监理等各个环节。而裂缝问题是整个工程中最常见的问题之一,大坝工程中出现裂缝是一件很严重的事,不仅影响大坝的使用寿命,而且严重影响水库工程的整体效益。坝体裂缝…

让GPT来聊聊目前软件测试行业的就业形式

最近两个月一直处于忙碌状态:跳槽、转行、学习新的编程语言(Python Golang)、赶工期、面试招人……也正是这一些列的经历,对目前的就业形势和软件从业人员的发展有了一些新的观察和思考,在这篇文章分享给大家。 整体…

亚马逊云科技143项安全标准与合规性认证,帮助企业满足安全合规要求

在亚马逊云科技,为满足客户不断变化的需求,亚马逊云科技持续创新与迭代,设计的服务能帮助客户满足最严格的安全和合规性要求。针对安全相关工作,亚马逊云科技服务团队与Amazon Security Guardians云守护者项目密切配合&#xff0c…

Jira Tempo :如何创建 Dynamic Dropdown 类型的 Work Attributes?

官方示例: Jira Tempo 可以创建以下类型的工作属性(Work Attributes): 其中,Dynamic Dropdown 支持外部接口,可以自己提供一个接口连接,如下: 官方示例中,给了一个 php 版本的示例…

UVM学习笔记--寄存器模型 Register Model

1.寄存器模型( Register model )简介 UVM的寄存器模型是一组高级抽象的类,用来对DUT中具有地址映射的寄存器和存储器进行建模。它非常贴切的反映DUT中寄存器的各种特性,可以产生激励作用于DUT并进行寄存器功能检查。通过UVM的寄存器模型&#xf…

通信算法之176: 基于Matlab的OFDM通信系统关键基带算法设计6-流程

一. 接收算法流程 粗同步(分组检测) 载波同步(精细频偏估计) 精同步(OFDM起始,符号同步) 1.4 信道估计(长序列) 1.5 信道均衡(所有数据OFDM符号&#xff…

(黑客)自学路线

一、什么是网络安全(黑客) 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领…

基于SpringBoot+vue的准妈妈孕期交流平台设计与实现

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

【工业机器人】用于轨迹规划和执行器分析的机械手和移动机器人模型(MatlabSimulink)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

STM32——使用cubemx和keil点亮第一个灯

一、环境 cubemx安装和搭建见博文 链接: STM32CubeMX安装 keil安装见软件安装管家,注意要是MDK版 二、cubemx操作 1.打开cubemx 2.选择ACCESS TO MCU SLCTOR,创建一个新的工程。 3.选择合适的芯片型号 具体的开发板芯片型号根据自己的板子来。我的是STMF429IG 4…

AT32F435/F437 QSPI驱动华邦/恒烁 NAND FLASH(W25N01G/ZB35Q01A)

好记性不如烂笔头,既然不够聪明,就乖乖的做笔记,温故而知新。 本文档用于本人对知识点的梳理和记录 目录 一、前言 二、器件分析 三、代码分析 四、结语 一、前言 (ST生态)雅特力AT32F435/F437 QSPI驱动NAND FLASH(W25N01G/ZB35Q01A) SPI驱…

如何使用WordPress构建一个亚马逊联盟商店

您想使用 WordPress 建立亚马逊联盟商店吗? 亚马逊联盟商店允许您作为联盟会员销售亚马逊的产品,并在每次销售中赚取收入。由于启动和运营成本较低,亚马逊联营店是开展新业务和在线赚钱的最简单方法之一。 在本文中,我们将向您展…

出海企业系列风险分析--App出海注意事项

看着SHEIN、TikTok、米哈游,甚至pdd等企业在海外市场风光无限,很多公司意识到出海的彼岸有更多点石成金的机遇,于是顺势打造了一款出海APP,正当海外用户飞速增长,生意红红火火,却遇到了这样的问题&#xff…

[LangChain核心模块]模型的输入和输出->Prompts

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐作者主页:逐梦苍穹 ⭐所属专栏:人工智能。 目录 1、简介2、Prompts(提示)2.1、Prompt templates2.1.1、创建提示模板2.1.2、聊天提示模板2.1.3、…

避雷针厂家防雷接地解决方案

您是否担心您的建筑物或设施会受到雷电的侵袭?您是否想要一种高效、可靠、经济的避雷解决方案?如果是的话,那么您一定要了解我们的提前放电避雷针DK8-BX10,这是一种采用先进技术和优质材料制造的智能化避雷系统,可以为…

MySQL数据库及安装MySQL

文章目录 一.数据库的基本概念1.数据2.表3.数据库4.数据库管理系统(DBMS)4.1DBMS主要包括以下功能 5.数据库系统原理5.1DBMS的工作模式 二.数据库的发展史1.第一代数据库…

Python微实践 - 布莱切利庄园的秘密

二战时期,英国数学家、计算机科学之父Alan Turing在布莱切利庄园成功破译了德军密码,为赢得世界反法西斯战争的胜利做出了重大贡献。为了表达对前辈先贤的敬意,本微实践取名为“布莱切利庄园的秘密”。 本文引用自作者编写的下述图书; 本文允…

西安邮电大学-2020计算机科学与技术培养方案【笔记】

2020计算机科学与技术培养方案【笔记】 前言说明2020计算机科学与技术培养方案培养目标培养要求课程设置与学分分布1. 通识教育类 67 学分 √(1) 公共基础课程 40 学分1) 必修课 38 学分2) 选修课 2 学分 (2) 自然科学基础课程 20 学分1) 必修课 20 学分2) 选修课 0 学分 (3) 综…