当前位置: 首页 > news >正文

【git】工作场景下的 工作区 <-> 暂存区<-> 本地仓库 命令实战 具体案例

🚀 Git 工作区 → 暂存区 → 本地仓库 → 回退实战

Git 的核心流程是:
👉 工作区(Working Directory)git add暂存区(Staging Area)git commit本地仓库(Local Repository)
如果想回退,可以从本地仓库 → 暂存区 → 工作区
在这里插入图片描述


📌 1. 创建一个 Git 仓库

mkdir my_project && cd my_project
git init  # 初始化 Git 仓库

git init 会创建一个 .git 目录,用于管理 Git 版本控制信息。


📌 2. 创建一个文件(工作区)

echo "Hello Git!" > hello.txt

此时,hello.txt工作区,但 Git 还不知道它的存在。

查看状态:

git status

输出:

Untracked files:(use "git add <file>..." to include in what will be committed)hello.txt

Git 发现 hello.txt,但它还没有被跟踪。


📌 3. 添加到暂存区

git add hello.txt

再次查看状态:

git status

输出:

Changes to be committed:(use "git rm --cached <file>..." to unstage)new file:   hello.txt

hello.txt 进入了暂存区,但还没有提交到本地仓库。


📌 4. 提交到本地仓库

git commit -m "初次提交"

输出:

[main (root-commit) 1a2b3c4] 初次提交1 file changed, 1 insertion(+)create mode 100644 hello.txt

hello.txt 现在存储到了本地仓库,Git 记录了它的快照。


📌 5. 修改文件并回退

(1) 修改 hello.txt
echo "Git is awesome!" >> hello.txt

查看状态:

git status

输出:

Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified:   hello.txt

hello.txt工作区被修改了。

(2) 回退修改

如果不想要这次修改:

git restore hello.txt

再次 git status

nothing to commit, working tree clean

hello.txt 回到了本地仓库的版本

(3) 误 add 了,如何回退?
git add hello.txt  # 错误地加入暂存区
git restore --staged hello.txt  # 从暂存区撤回到工作区

这样 hello.txt 又变回未 add 之前的状态。
即:
在没有commit之前,想要回退修改都是用git restore

  • 撤销修改git restore <file>
  • 撤销 addgit restore --staged <file>
(4) 误 commit 了,如何回退?

如果误提交到本地仓库:

git reset --soft HEAD~1  # 退回到暂存区 也可以用git log显示出所有提交记录,
# 复制想要回到的commit id 使用git reset --soft <commit id> 这里HEAD~1表示回退到上一个commit状态
git reset HEAD  # 退回到工作区

这样就撤回了 commit,但代码不会丢失。

commit之后的回退,都是用git reset

在这里插入图片描述


📌 6. 总结:Git 各区域操作

操作命令
工作区 → 暂存区git add <file>
暂存区 → 本地仓库git commit -m "提交信息"
本地仓库 → 暂存区(撤回提交)git reset --soft HEAD~1
暂存区 → 工作区(撤回 addgit restore --staged <file>
工作区回退(撤销修改)git restore <file>

Git实战:

案例:开发一个简单的登录功能

假设你正在开发一个网站的登录功能,你需要修改以下文件:

  • index.html: 添加登录表单
  • style.css: 添加登录表单的样式
  • script.js: 添加登录表单的验证逻辑

一、准备工作

  1. 克隆远程仓库:假设你已经克隆了公司项目的代码仓库到本地。
  2. 创建开发分支:从主分支 (main) 创建一个新的分支 feature/login,并切换到该分支。
git checkout -b feature/login

二、开发登录功能

  1. 修改代码:在 index.htmlstyle.cssscript.js 文件中进行代码编写和修改。
  2. 查看工作区状态:使用 git status 命令查看工作区中哪些文件被修改了。
git status
  • 你会看到类似以下的输出:
On branch feature/login
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified:   index.htmlmodified:   style.cssmodified:   script.jsno changes added to commit (use "git add" and/or "git commit -a")
  • 这表示 index.htmlstyle.cssscript.js 文件被修改了,但还没有添加到暂存区。

三、将修改添加到暂存区

  1. 添加文件到暂存区:使用 git add 命令将修改后的文件添加到暂存区。
git add index.html style.css script.js
  • 也可以使用 git add . 添加所有修改过的文件。
  1. 再次查看工作区状态:使用 git status 命令查看工作区状态。
git status
  • 你会看到类似以下的输出:
On branch feature/login
Changes to be committed:(use "git restore --staged <file>..." to unstage)modified:   index.htmlmodified:   style.cssmodified:   script.js
  • 这表示 index.htmlstyle.cssscript.js 文件已经被添加到暂存区,准备提交到本地仓库。

四、将修改提交到本地仓库

  1. 提交代码:使用 git commit 命令将暂存区的文件提交到本地仓库。
git commit -m "完成登录功能开发"
  • 提交信息应该简洁明了,描述这次提交的内容。
  1. 查看提交历史:使用 git log 命令查看提交历史。
git log
  • 你会看到类似以下的输出:
commit 1234567890abcdef1234567890abcdef12345678 (HEAD -> feature/login)
Author: yourname <yourname@example.com>
Date:   Mon Oct 30 12:00:00 2023 +0800完成登录功能开发
  • 这表示你已经成功将修改提交到了本地仓库。

五、回退到之前的版本

假设你在开发过程中发现代码出现了问题,想要回退到之前的版本。

  1. 查看提交历史:使用 git log 命令查看提交历史,找到你想要回退到的版本的 commit id。
git log
  • 你会看到类似以下的输出:
commit 1234567890abcdef1234567890abcdef12345678 (HEAD -> feature/login)
Author: yourname <yourname@example.com>
Date:   Mon Oct 30 12:00:00 2023 +0800完成登录功能开发commit 0987654321fedcba0987654321fedcba09876543
Author: yourname <yourname@example.com>
Date:   Mon Oct 30 11:00:00 2023 +0800初始化项目
  • 假设你想要回退到 “初始化项目” 的版本,commit id 是 0987654321fedcba0987654321fedcba09876543
  1. 回退到指定版本:使用 git reset 命令回退到指定版本。
git reset --hard 0987654321fedcba0987654321fedcba09876543
  • 这会将工作区、暂存区和本地仓库都回退到指定版本。
  1. 查看工作区状态:使用 git status 命令查看工作区状态。
git status
  • 你会看到类似以下的输出:
On branch feature/login
nothing to commit, working tree clean
  • 这表示你已经成功回退到了指定版本。

https://github.com/0voice

相关文章:

【git】工作场景下的 工作区 <-> 暂存区<-> 本地仓库 命令实战 具体案例

&#x1f680; Git 工作区 → 暂存区 → 本地仓库 → 回退实战 Git 的核心流程是&#xff1a; &#x1f449; 工作区&#xff08;Working Directory&#xff09; → git add → 暂存区&#xff08;Staging Area&#xff09; → git commit → 本地仓库&#xff08;Local Repos…...

Python 中从零开始的随机梯度下降

文章目录 一、说明二、了解基础知识的重要性&#xff1a;2.1 什么是梯度下降&#xff1f;2.2 梯度下降的类型&#xff1a; 三、随机梯度下降 &#xff08;SGD&#xff09; 有何不同3.1 随机性的概念&#xff1a;3.2 SGD的优点和缺点&#xff1a; 四、随机梯度下降的分步说明五、…...

期权隐含波动率是什么意思?

财顺小编本文主要介绍期权隐含波动率是什么意思&#xff1f;期权隐含波动率&#xff08;Implied Volatility&#xff09;是根据当前期权市场价格&#xff0c;利用期权定价模型&#xff08;如Black-Scholes模型&#xff09;推导出的关于合约标的理论上的价格波动率。它反映了市场…...

python中使用数据库sqlite3

Python使用sqlite3数据库 python3.x标准库内置了SQLite3 查看sqlite的版本 import sqlite3 sqlite_version sqlite3.sqlite_version print(f"SQLite version: {sqlite_version}") 显示 导入模块连接sqlitte3 import sqlite3 consqlite3.connect("d:/fi…...

JavaScript数组-数组的概念

在JavaScript编程中&#xff0c;数组&#xff08;Array&#xff09;是一种非常重要的数据结构&#xff0c;它允许我们将多个值存储在一个单独的变量中。数组可以包含任意类型的元素&#xff0c;如数字、字符串、对象甚至是其他数组&#xff0c;并提供了丰富的内置方法来操作这些…...

英语---基础词汇库

〇、动词类&#xff08;常见谓语表述&#xff09; 1.show&#xff0c;indicate&#xff0c;find 认为&#xff0c;表明 2.improve,promote,boost,enhance,increase&#xff0c;advocate&#xff0c;strength 改善&#xff0c;提升&#xff0c;促进&#xff0c;增强&#xff0…...

ASCII 与 Unicode:两种字符编码的定义和不同

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: Java 文章目录 &#x1f4af;前言&#x1f4af;一、ASCII编码详解1.1 ASCII的组成1.2 ASCII的局限性 &#x1f4af;二、Unicode编码详解2.1 Unicode编码方式2.2 Unicode的字符范围 &#x1f4af;三、ASCII与Unicode的…...

Linux相关概念和易错知识点(28)(线程控制、Linux下线程的底层)

目录 1.线程控制 &#xff08;1&#xff09;pthread和thread库 &#xff08;2&#xff09;线程的创建、等待和分离 ①线程创建 ②线程等待 ③线程分离 ④线程替换&#xff08;不可行&#xff09; &#xff08;3&#xff09;线程的终止和取消 ①线程终止 ②线程取消 2…...

lighten() 函数被弃用:替代方案color.scale()或者color.adjust()

在 SCSS (Sass 的一个语法) 中&#xff0c;lighten() 函数用于调整颜色的亮度。然而&#xff0c;随着 Sass 语言的不断发展&#xff0c;一些旧函数被标记为弃用&#xff0c;以鼓励使用更现代、更灵活的 API。lighten() 函数就是其中之一。 1. 弃用通知 当您看到 lighten() is…...

【leetcode】双指针:有效三角形的个数 and 和为s的两个数

文章目录 1. 有效三角形的个数1.题目2.讲解算法原理3.代码 2.和为s的两个数1.题目2.思路3.代码 1. 有效三角形的个数 1.题目 示例1解析&#xff1a; 2.讲解算法原理 3.代码 class Solution { public:int triangleNumber(vector<int>& nums) {sort(nums.begin(), …...

IDEA通过Contince接入Deepseek

Deepseek 的出色表现&#xff0c;上期【Deepseek得两种访问方式与本地部署】 安装Continue插件 第一步、下载插件 在编辑栏【File】->设置【Settiings】或快捷键【CtrlAltS】,弹窗的左侧导航树&#xff0c;选择【plugins】,在marketplace 搜索【Continue】&#xff0c;点…...

grep如何排除多个目录?

在使用 grep 进行文本搜索时&#xff0c;有时候需要排除多个目录&#xff0c;避免在这些目录下进行搜索。下面介绍几种不同的实现方式。 目录 1.使用 -r 和 --exclude-dir 选项&#xff08;GNU grep&#xff09; 2.使用扩展正则表达式和 -P 选项&#xff08;GNU grep&#x…...

Elasticsearch 数据建模:从原理到实战的降维打击指南

Elasticsearch 数据建模&#xff1a;从原理到实战的降维打击指南 &#x1f680; 第一章 数据建模的物理法则&#xff1a;倒排索引的奇妙世界 1.1 倒排索引&#xff1a;比字典更聪明的数据结构 当你在ES中存入"Hello World"时&#xff0c;背后发生了这些魔法&#…...

python defaultdict用法

摘要 使用 defaultdict 可以简化处理字典中缺失键的情况。以下是几个使用 defaultdict 的示例&#xff0c;展示了它在不同场景下的应用。 示例 1&#xff1a;分组文件 假设我们有一组文件名&#xff0c;想要根据文件扩展名将它们分组。我们可以使用 defaultdict 来实现这一点…...

Java 与设计模式(15):模板方法模式

一、定义 模板方法模式是一种行为设计模式&#xff0c;它定义了一个操作中的算法的骨架&#xff08;也就是大致的步骤和流程&#xff09;&#xff0c;而将一些具体步骤的实现延迟到子类中。这样&#xff0c;子类可以不改变算法的结构即可重新定义算法的某些特定步骤。 二、Ja…...

ubuntu更新失败:apt-get install -f Transaction failed: 软件包系统已损坏

检查您是否使用了第三方源。如果是就禁用它们&#xff0c;它们常常导致问题。 然后在终端中运行以下命令&#xff1a;apt-get install -f Transaction failed: 软件包系统已损坏下列软件包未满足的依赖关系&#xff1a;sunloginclient: Depends: libappindicator3-1 但是 %%s 没…...

16-使用QtChart创建动态图表:入门指南

QtChart是Qt框架中的一个强大模块&#xff0c;用于创建各种类型的图表&#xff0c;如折线图、柱状图、饼图等。它提供了丰富的API和灵活的配置选项&#xff0c;使得开发者能够轻松地将数据可视化集成到应用程序中。本文将介绍如何使用QtChart创建一个简单的动态折线图&#xff…...

C++ | 虚函数

在 C 面向对象编程领域&#xff0c;多态性堪称核心概念&#xff0c;而虚函数则是实现运行时多态的关键所在。 一、虚函数的概念与作用 1.1 什么是虚函数 虚函数是 C 中用于实现动态多态的成员函数。在基类中使用virtual关键字声明虚函数后&#xff0c;派生类能够重写&#x…...

单元测试整理

在国外软件开发中&#xff0c;单元测试必不可少&#xff0c;但是国内并不太重视这一块&#xff0c;一个好的单元测试可以提前发现很多问题&#xff0c;也减去和测试battle的时间 Spring单元测试 JUnit4 RunWith 指明单元测试框架 e.g. RunWith(SpringJUnit4ClassRunner.cla…...

Delphi语言的软件工程

Delphi语言的软件工程 引言 在软件工程的历史长河中&#xff0c;Delphi语言作为一种快速应用程序开发&#xff08;RAD&#xff09;的工具&#xff0c;凭借其高效的开发环境和强大的编程能力&#xff0c;一直在软件开发领域占有一席之地。本文将探讨Delphi语言的历史背景、特性…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言&#xff1a;我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM&#xff08;Java Virtual Machine&#xff09;让"一次编写&#xff0c;到处运行"成为可能。这个软件层面的虚拟化让我着迷&#xff0c;但直到后来接触VMware和Doc…...