TortoiseGit 入门指南03:提交

news2024/9/23 23:35:44

你现在应该已经有了一个仓库,在工作过程中会对项目做一些修改,比如添加代码、修复错误等等,你将不定时的将这些更改 提交(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/739365.html

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

相关文章

Jina AI 受邀出席 WAIC 2023「科技无障碍」论坛,与行业专家共话 AI 普惠未来

7 月 6 日,2023 世界人工智能大会(WAIC)在上海世博中心及世博展览馆开幕,并在浦东张江、徐汇西岸设分会场,同步在闵行等产业集聚区开展同期活动。本届大会由上海市人民政府和国家发改委、工信部、科技部、国家网信办、…

qiankun 与vue-router 不兼容导致路由显示 undefined 问题

在路由前置守卫中监听 to 及 from 的变化,发现 router.push 跳转路由时,会发现打印出 两次以上的 to、form 对象,只有第一次打印的from对象是正确的,而后两次都是由于 qiankun 与vue-router 不兼容引起的路由守卫重复执行的问题导…

CSS word-break 详解

word-break:normal 使用浏览器默认的换行规则 <!DOCTYPE html> <html> <head> <style> p.test1 { width:11em; border:1px solid #000000; word-break:normal; } </style> </head> <body> <p class"test1">This …

构建WebRTC技术需要的后端服务

&#x1f4e2;欢迎点赞 &#xff1a;&#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff0c;赐人玫瑰&#xff0c;手留余香&#xff01;&#x1f4e2;本文作者&#xff1a;由webmote 原创&#x1f4e2;作者格言&#xff1a;新的征程&#xff0c;我们面对的不是…

【C语言】三子棋----详解

目录 前言 一、游戏规则 二、创建文件 1.test.c文件 &#x1f604;菜单函数的实现 &#x1f604;main函数的实现 &#x1f604;game游戏函数的实现 2.game.c文件 &#x1f604;书写初始化棋盘的函数&#xff1a; &#x1f604;书写打印棋盘的函数 &#x1f604;书写玩家…

iSCSI磁盘配置

iSCSI磁盘简要描述 iSCSI&#xff08;Internet Small Computer System Interface&#xff09;&#xff0c;Internet小型计算机系统接口&#xff0c;又称为IP-SAN&#xff0c;是一种基于因特网及SCSI-3协议下的存储技术。 iSCSI 可以与任意类型的 SCSI 设备进行通信。对于一个…

【阿里巴巴1688API接口开发系列】数据采集获取,封装接口可加高并发,大数据中心项目

首先以1688商品数据为例 item_get-获得1688商品详情 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;注册Key和secret接入secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_…

Kafka request.log中RequestQueueTimeMs、LocalTimeMs、RemoteTimeMs、ThrottleTimeMs、含义

Kafka request.log中RequestQueueTimeMs、LocalTimeMs、RemoteTimeMs、ThrottleTimeMs、含义 要理解各个延时项的含义&#xff0c;必须从Kafka收到TCP请求、处理请求到返回TCP包整个流程开始梳理 RequestQueueTimeMs Processor 执行processNewResponses() 方法&#xff0c;不…

DPWWN1靶场详解

DPWWN1靶场详解 首先还是nmap -sP 192.168.102.0/24扫描到ip地址&#xff0c;然后对这个ip进行一个单独的扫描&#xff0c;发现这个靶场有一个mysql数据库&#xff0c;猜测可能会用到sql注入&#xff0c;但是没用到。 ip登陆到网页发现并没有什么可利用的 唯一的切入点也就数…

【Docker】Docker之镜像上传(阿里云镜像仓库)

注册阿里云镜像仓库 登录阿里云 登录成功后&#xff0c;搜索docker镜像 点击立即开通 创建个人实例 创建镜像仓库 点击下一步之后&#xff0c;可以选择代码源&#xff0c;本文选择的是本地仓库 镜像仓库创建成功&#xff0c;根据对应操作命令实现想要的功能&#xff0c;如上传镜…

Java 动态规划 剑指 Offer 47. 礼物的最大价值

代码展示&#xff1a; class Solution {public int maxValue(int[][] grid) {int mgrid.length;int ngrid[0].length;//创建dp数组int[][]dpnew int[m1][n1];//填充数组for(int i1;i<m;i){for(int j1;j<n;j){dp[i][j]Math.max(dp[i-1][j],dp[i][j-1])grid[i-1][j-1];}}r…

LLM模型微调方法总结

文章目录 Freeze方法P-tuning方法prefix-tuningPrompt TuningP-tuning v1P-tuning v2 Lora方法Qlora方法 在现在这大规模语言模型&#xff08;LLM&#xff09;盛行的时代&#xff0c;由于模型参数和显卡配置的因素&#xff0c;预训练基本是大公司或者高校可以完成的事情&#x…

SpringBoot+Prometheus+Grafana 监控面板(项目配置方式【入侵】)

SpringBootPrometheusGrafana 监控面板 提示&#xff1a;本文使用SpringBoot 简单样例&#xff0c;介绍基础配置和使用方法 包含内容&#xff1a;Docker、SpringBoot、Maven、 Prometheus、Grafana等 提示&#xff1a;本文包含官网内容介绍&#xff0c;具体更项目的学习&#x…

怎么学习Web框架和库相关知识?

学习Web框架和库相关知识可以帮助你构建高效、可扩展和安全的Web应用程序。以下是一些学习Web框架和库的方法和步骤&#xff1a; 确定学习目标&#xff1a; 明确你想学习的Web框架或库&#xff0c;例如常用的PHP框架&#xff08;如Laravel、Symfony&#xff09;或JavaScript库…

香橙派4和树莓派4B构建K8S集群实践之八: TiDB

目录 1. 说明 2. 准备工作 3. 安装 3.1 参考TiDB官方 v1.5安装说明 3.2 准备存储类 3.3 创建crd 3.4 执行operator 3.5 创建cluster/dashboard/monitor容器组 3.6 装好后的容器状况 3.7 设置访问入口(Ingress & Port) 4. 遇到的问题 5. 参考 1. 说明 建立TiDB…

Mongo可视化工具studio 3t无限试用

文章目录 前言一、下载二、使用步骤1.下载后,无脑下一步安装好2.开始无限试用 总结 前言 mongodb可以说是比较流行的nosql数据库了,它灵活多变的存储,为项目中后续可能的变更提供了极大的便利性,工欲善其事必先利其器,今天推荐一款mongo的可视化工具: studio 3t 一、下载 各版…

Linux驱动进阶(一)——设备驱动中的并发控制

文章目录 前言并发与竞争原子变量操作原子变量操作原子整型操作原子位操作 自旋锁自旋锁概述自旋锁的使用自旋锁的使用注意事项 信号量信号量概述信号量的实现信号量的使用自旋锁与信号量的对比 完成量完成量概述完成量的实现完成量的使用 小结 前言 现代操作系统有三大特征&a…

华为云流水线CodeArts Pipeline怎么样?能实现哪些功能?

华为云流水线服务CodeArts Pipeline&#xff0c;旨在提升编排体验&#xff0c;开放插件平台&#xff0c;并提供标准化的DevOps企业治理模型&#xff0c;将华为公司内的优秀研发实践赋能给伙伴和客户。 灵活编排、高效调度 开放流水线插件 内置企业DevOps研发治理模型 体验通…

Mysql常见的集群方案

一&#xff0c;MySQL Replication MySQL Replication 是官方提供的主从同步方案&#xff0c;用于将一个 MySQL 的实例同步到另一个实例中。Replication 为保证数据安全做了重要的保证&#xff0c;是目前运用最广的 MySQL 容灾方案。Replication 用两个或以上的实例搭建了 MySQ…

driftingblues3靶机详解

driftingblues3靶机复盘 打完这个靶机后发现自己最近一段时间进步了很多&#xff0c;并且有了一些自己的思想。 这里扫除来一个22和80端口&#xff0c;大概率是要用到ssh远程登陆的。 扫描ip的同时扫描了一下目录&#xff0c;发现扫描出来很多目录&#xff0c;这里我还很窃喜&…