Git教程学习:03 记录每次更新到仓库

文章目录

    • 1 检查当前文件状态
    • 2 跟踪新文件
    • 3 暂存已修改的文件
    • 4 状态简览
    • 5 忽略文件
    • 6 查看已暂存和未暂存的修改
    • 7 提交更新
    • 8 跳过使用暂存区域
    • 9 移除文件
    • 10 移动文件

现在我们的机器上有了一个 真实项目 的 Git 仓库,并从这个仓库中检出了所有文件的 工作副本。 通常,我们会对这些文件做些修改,每当完成了一个阶段的目标,想要将记录下它时,就将它提交到仓库。请记住,我们工作目录下的每一个文件都不外乎这两种状态:已跟踪未跟踪

image-20240116185636185

1 检查当前文件状态

查看哪些文件处于什么状态,使用git status

$ git status

如果在克隆仓库后立即使用此命令:

image-20240116214307778

出现的"On branch … clean"信息说明我们现在的工作目录相当干净。换句话说,所有已跟踪文件在上次提交后都未被更改过。 此外,上面的信息还表明,当前目录下没有出现任何处于未跟踪状态的新文件,否则 Git 会在这里列出来。 最后,该命令还显示了当前所在分支,并告诉我们这个分支同远程服务器上对应的分支没有偏离。 现在,分支名是“master”,这是默认的分支名。

现在在项目下创建一个新的 README 文件:

$ echo 'My Project' > README
$ git status

image-20240116215921421

在状态报告中可以看到新建的 README 文件出现在 Untracked files 下面。 未跟踪的文件意味着 Git 在之前的快照(提交)中没有这些文件;Git 不会自动将之纳入跟踪范围,除非我们明明白白地告诉它“我需要跟踪该文件”。不过现在我们需要跟踪管理README这个文件。

2 跟踪新文件

使用git add 开始跟踪一个文件并用git status查看状态。所以,要跟踪README文件,运行:

$ git add README
$ git status

image-20240116220536155

只要在 Changes to be committed 这行下面的,就说明是已暂存状态。 如果此时提交,那么该文件在我们运行 git add 时的版本将被留存在后续的历史记录中。

3 暂存已修改的文件

现在我们来修改一个已被跟踪的文件。比如,该项目下的README.md文件(这是一个已被跟踪的文件)。运行:

$ git status

image-20240116222531430

文件 README.md 出现在 Changes not staged for commit 这行下面,说明已跟踪文件的内容发生了变化,但还没有放到暂存区。 要暂存这次更新,需要运行 git add 命令。

git add 命令功能:

  • 跟踪新文件
  • 把已跟踪的文件放到暂存区
  • 用于合并时把有冲突的文件标记为已解决状态
$ git add README.md
$ git status

image-20240116223012860

现在两个文件都已暂存,下次提交时就会一并记录到仓库。 假设此时,我们想要在 README.md 里再加条注释。 重新编辑存盘后,准备好提交。 不过且慢,再运行 git status 看看:

$ vim README.md
$ git status

image-20240116223651241

怎么回事? 现在 README.md 文件同时出现在暂存区和非暂存区。 这怎么可能呢? 好吧,实际上 Git 只不过暂存了你运行 git add 命令时的版本。 如果我们现在提交,README.md 的版本是我们最后一次运行 git add 命令时的那个版本,而不是我们运行 git commit 时,在工作目录中的当前版本。 所以,运行了 git add 之后又作了修订的文件,需要重新运行 git add 把最新版本重新暂存起来:

$ git add README.md
$ git status

image-20240116223931343

4 状态简览

git status 命令的输出十分详细,但其用语有些繁琐。 Git 有一个选项可以帮你缩短状态命令的输出,这样可以以简洁的方式查看更改:

$ git status -s
$ git status -short

image-20240116224523110

  • ??:新添加的未跟踪文件
  • A:新添加到暂存区中的文件
  • M:修改过的文件

5 忽略文件

一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件的模式。 来看一个实际的 .gitignore 例子:

$ cat .gitignore
*.[oa]  # 告诉Git忽略所有以 .o 或 .a 结尾的文件
*~		# 告诉 Git 忽略所有名字以波浪符(~)结尾的文件

要养成一开始就为我们的新仓库设置好 .gitignore 文件的习惯,以免将来误提交这类无用的文件。

文件.gitignore的格式规范如下:

  • 所有空行或者以 # 开头的行都会被 Git 忽略。
  • 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
  • 匹配模式可以以(/)开头防止递归。
  • 匹配模式可以以(/)结尾指定目录。
  • 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。

6 查看已暂存和未暂存的修改

git diff可以通过文件补丁的格式更加具体地显示哪些行发生了改变,可以用来回答:

  • 当前做的哪些更新尚未暂存?
  • 有哪些更新已暂存并准备好下次提交?

假如再次修改 NEWFILE 文件后暂存,然后编辑 README.md 文件后先不暂存, 运行 status 命令将会看到:

image-20240116233811364

运行git diff,观察暂存前后的变化:

$ git diff

image-20240116234034748

然后用 git diff --cached 查看已经暂存起来的变化( --staged--cached 是同义词):

$ git diff --cached

7 提交更新

现在的暂存区已经准备就绪,可以提交了。 在此之前,请务必确认还有什么已修改或新建的文件还没有 git add 过, 否则提交的时候不会记录这些尚未暂存的变化。 这些已修改但未暂存的文件只会保留在本地磁盘。 所以,每次准备提交前,先用 git status 看下,我们所需要的文件是不是都已暂存起来了, 然后再运行提交命令 git commit

$ git commit
$ git commit -m "提交说明"

image-20240116235044269

8 跳过使用暂存区域

尽管使用暂存区域的方式可以精心准备要提交的细节,但有时候这么做略显繁琐。 Git 提供了一个跳过使用暂存区域的方式, 只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:

$ git status
$ git commit -a -m '提交说明'

image-20240116235652621

9 移除文件

要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。 可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。

情况一:从工作目录中手工删除文件

运行 git status 时就会在 “Changes not staged for commit” 部分(也就是 未暂存清单)看到:

$ rm <filename>
$ git status

image-20240117000108143

再运行 git rm 记录此次移除文件的操作:

$ git rm <filename>
$ git status

image-20240117000520891

下一次提交时,该文件就不再纳入版本管理了。

如果要删除之前修改过或已经放到暂存区的文件,则必须使用强制删除选项 -f。 这是一种安全特性,用于防止误删尚未添加到快照的数据,这样的数据不能被 Git 恢复。

情况二:把文件从 Git 仓库中删除,但保留在当前工作目录中

即想让文件保留在磁盘,但是并不想让 Git 继续跟踪。

当我们忘记添加 .gitignore 文件,不小心把一个很大的日志文件或一堆 .a 这样的编译生成文件添加到暂存区时,这一做法尤其有用。 为达到这一目的,使用 --cached 选项:

$ git rm --cached README

image-20240117001609463

10 移动文件

不像其它的 VCS 系统,Git 并不显式跟踪文件移动操作。 如果在 Git 中重命名了某个文件,仓库中存储的元数据并不会体现出这是一次改名操作。

在Git中对文件改名:

$ git mv file_from file_to

举例:

$ git mv README.md README
$ git status

image-20240117002730548

运行 git mv 就相当于运行了下面三条命令:

$ mv README.md README
$ git rm README.md
$ git add README

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

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

相关文章

前端和后端之间的CORS 跨域和解决办法

什么是CORS&#xff08;Cross-Origin Resource Sharing&#xff0c;跨源资源共享&#xff09; 跨源资源共享&#xff08;CORS&#xff0c;或通俗地译为跨域资源共享&#xff09;是一种基于 HTTP 头的机制&#xff0c;该机制通过允许服务器标示除了它自己以外的其他源&#xff0…

Docker之安装Nginx

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《Docker之Dockerfile构建镜像》。&#x1f3af;&…

为什么 macOS 比 Windows 稳定?

在计算机操作系统领域&#xff0c;macOS 和 Windows 分别是苹果公司和微软公司的主打产品。尽管两者都拥有大量的用户群体&#xff0c;但在稳定性和用户体验方面&#xff0c;macOS 常常被认为优于 Windows。那么&#xff0c;为什么 macOS 比 Windows 更稳定呢&#xff1f; 我们…

算法题-爬楼梯-不同思路解法

主要记录个人思考过程&#xff0c;不同方案实现思路的演变 题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;…

C++系列-第1章顺序结构-9-字符类型char

在线练习&#xff1a; http://noi.openjudge.cn/ https://www.luogu.com.cn/ 总结 本文是C系列博客&#xff0c;主要讲述字符类型char 字符类型char 在C编程语言中&#xff0c;char是一种基本的数据类型&#xff0c;它用于存储单个字符。字符可以是字母、数字、标点符号或者…

简单的推箱子游戏实战

目录 项目分析 地图初始化 背景图片 游戏场景图片: 热键控制 按键设置 确定人物位置 实现人物移动(非箱子,目的地) 推箱子控制 游戏结束 最终代码 合法性判断: 项目分析 墙:0,地板:1,箱子目的地:2,小人:3,箱子:4,箱子命中目标:5 地图初始化 背景图片 #include <…

基于SkyEye仿真飞腾处理器:运行U-Boot并加载Phytium-FreeRTOS

仿真平台在帮助提升研发效率、加快产品面市时间上的作用已得到诸多验证&#xff0c;通过对处理器进行仿真来支持嵌入式系统及软件的虚拟化开发、测试和验证成为目前应用较为广泛的方法。天目全数字实时仿真软件SkyEye是一款基于可视化建模的硬件行为级仿真平台&#xff0c;在众…

leetcode:1736. 替换隐藏数字得到的最晚时间(python3解法)

难度&#xff1a;简单 给你一个字符串 time &#xff0c;格式为 hh:mm&#xff08;小时&#xff1a;分钟&#xff09;&#xff0c;其中某几位数字被隐藏&#xff08;用 ? 表示&#xff09;。 有效的时间为 00:00 到 23:59 之间的所有时间&#xff0c;包括 00:00 和 23:59 。 …

selenium处理下拉框

当想要爬取的数据由下拉框来选择时&#xff0c;应该如何处理&#xff1f; 页面如下&#xff1a; 目的获得电影的详细信息&#xff0c;包括票房&#xff0c;上映日期等。 代码如下&#xff1a; from selenium import webdriver from selenium.webdriver.support.select impor…

C语言——大头记单词

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 每一发奋努力的背后&#xff0c;必有加…

Ubuntu18.04在线镜像仓库配置

在线镜像仓库 1、查操作系统版本 rootubuntu:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.5 LTS Release: 18.04 Codename: bionic 2、原文件备份 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 3、查…

【开源】基于JAVA语言的陕西非物质文化遗产网站

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 设计目标2.2 研究内容2.3 研究方法与过程2.3.1 系统设计2.3.2 查阅文献2.3.3 网站分析2.3.4 网站设计2.3.5 网站实现2.3.6 系统测试与效果分析 三、系统展示四、核心代码4.1 查询民间文学4.2 查询传统音乐4.3 增改传统舞…

零售EDI:Babylist EDI 项目案例

Babylist 与各种不同的品牌和零售商合作&#xff0c;包括婴儿用品、玩具、衣物和其他相关产品的制造商。用户可以在 Babylist 上浏览各种不同的产品&#xff0c;并根据自己的需求和喜好选择适合的项目。本文将为大家介绍对接Babylist 的EDI项目案例。 Babylist EDI 需求 传输协…

linux文件比较工具diff-关于参数-pN的设置方法

非纯文本文件比较可用cmp命令 第一&#xff1a;利用diff创建分析文件&#xff0c;处理补丁&#xff08;patch&#xff09;功能的文件 案例&#xff1a;多数用于同一软件的不同版本之间&#xff0c;比如比较配置文件和源文件的区别&#xff0c;生成补丁文件&#xff0c;执行更…

Midjourney网页版

引言 基于国外的api开发开发了一款网页版的midjourney&#xff0c;文末有链接 相关资源 Midjourney官方教学资料Midjourney官网discord官网B站学习资源推荐 账号注册 获取网络访问权限 使用Midjourney的前提是计算机有外网访问权限 此处推荐两款软件,lantern的优势是免费&…

windows vscode jsoncpp cmake c++ 构建项目

jsoncpp的编译和使用推荐文章&#xff1a;jsoncpp的编译和使用 | 爱编程的大丙 (subingwen.cn)https://www.subingwen.cn/cpp/jsoncpp/从这个链接下载jsoncpp-master&#xff1a;https://github.com/open-source-parsers/jsoncpp 可以把这个文件夹名字改成jsoncpp&#xff0c;…

LLM之LangChain(二)| LangChain中的Agent

在本文中&#xff0c;我们将讨论LangChain中的Agent及其各种类型。但在深入研究Agent之前&#xff0c;让我们先了解一下什么是LangChain和Agent。 一、什么是LangChain&#xff1f; LangChain是一种功能强大的自动化工具&#xff0c;可用于各种任务&#xff0c;它提供了可用于…

Cobalt: 我愿称之为IDEA最美配色☕️

先来个预览&#xff1a; Cobalt是为IntelliJ IDEA和Java语言优化的一个配色主题&#xff0c;以现代和科技感的蓝色为主。题主相信哪怕是一个简单的主题配色&#xff0c;都是可以给开发者们带来更有生产力、更舒适的创作心境。希望你会喜欢&#xff01; 另外Cobalt这个名字取自…

【开源】基于JAVA的教学资源共享平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课程资源模块2.4 课程作业模块2.5 课程评价模块 三、系统设计3.1 用例设计3.2 类图设计3.3 数据库设计3.3.1 课程档案表3.3.2 课程资源表3.3.3 课程作业表3.3.4 课程评价表 四、系统展…

04章【面向对象(上)】

文章目录 面向对象基本概念类与对象类和对象的定义格式对象与内存分析封装性构造方法this关键字值传递与引用传递对象的一对一关系static关键字main方法分析代码块单例设计模式对象数组与管理 面向对象基本概念 什么是面向对象&#xff1a; 面向对象是一种编程思想。面向对象…