【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>- 撤销
add:git 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 |
暂存区 → 工作区(撤回 add) | git restore --staged <file> |
| 工作区回退(撤销修改) | git restore <file> |
Git实战:
案例:开发一个简单的登录功能
假设你正在开发一个网站的登录功能,你需要修改以下文件:
index.html: 添加登录表单style.css: 添加登录表单的样式script.js: 添加登录表单的验证逻辑
一、准备工作
- 克隆远程仓库:假设你已经克隆了公司项目的代码仓库到本地。
- 创建开发分支:从主分支 (
main) 创建一个新的分支feature/login,并切换到该分支。
git checkout -b feature/login
二、开发登录功能
- 修改代码:在
index.html、style.css和script.js文件中进行代码编写和修改。 - 查看工作区状态:使用
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.html、style.css和script.js文件被修改了,但还没有添加到暂存区。
三、将修改添加到暂存区
- 添加文件到暂存区:使用
git add命令将修改后的文件添加到暂存区。
git add index.html style.css script.js
- 也可以使用
git add .添加所有修改过的文件。
- 再次查看工作区状态:使用
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.html、style.css和script.js文件已经被添加到暂存区,准备提交到本地仓库。
四、将修改提交到本地仓库
- 提交代码:使用
git commit命令将暂存区的文件提交到本地仓库。
git commit -m "完成登录功能开发"
- 提交信息应该简洁明了,描述这次提交的内容。
- 查看提交历史:使用
git log命令查看提交历史。
git log
- 你会看到类似以下的输出:
commit 1234567890abcdef1234567890abcdef12345678 (HEAD -> feature/login)
Author: yourname <yourname@example.com>
Date: Mon Oct 30 12:00:00 2023 +0800完成登录功能开发
- 这表示你已经成功将修改提交到了本地仓库。
五、回退到之前的版本
假设你在开发过程中发现代码出现了问题,想要回退到之前的版本。
- 查看提交历史:使用
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。
- 回退到指定版本:使用
git reset命令回退到指定版本。
git reset --hard 0987654321fedcba0987654321fedcba09876543
- 这会将工作区、暂存区和本地仓库都回退到指定版本。
- 查看工作区状态:使用
git status命令查看工作区状态。
git status
- 你会看到类似以下的输出:
On branch feature/login
nothing to commit, working tree clean
- 这表示你已经成功回退到了指定版本。
https://github.com/0voice
相关文章:
【git】工作场景下的 工作区 <-> 暂存区<-> 本地仓库 命令实战 具体案例
🚀 Git 工作区 → 暂存区 → 本地仓库 → 回退实战 Git 的核心流程是: 👉 工作区(Working Directory) → git add → 暂存区(Staging Area) → git commit → 本地仓库(Local Repos…...
Python 中从零开始的随机梯度下降
文章目录 一、说明二、了解基础知识的重要性:2.1 什么是梯度下降?2.2 梯度下降的类型: 三、随机梯度下降 (SGD) 有何不同3.1 随机性的概念:3.2 SGD的优点和缺点: 四、随机梯度下降的分步说明五、…...
期权隐含波动率是什么意思?
财顺小编本文主要介绍期权隐含波动率是什么意思?期权隐含波动率(Implied Volatility)是根据当前期权市场价格,利用期权定价模型(如Black-Scholes模型)推导出的关于合约标的理论上的价格波动率。它反映了市场…...
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编程中,数组(Array)是一种非常重要的数据结构,它允许我们将多个值存储在一个单独的变量中。数组可以包含任意类型的元素,如数字、字符串、对象甚至是其他数组,并提供了丰富的内置方法来操作这些…...
英语---基础词汇库
〇、动词类(常见谓语表述) 1.show,indicate,find 认为,表明 2.improve,promote,boost,enhance,increase,advocate,strength 改善,提升,促进,增强࿰…...
ASCII 与 Unicode:两种字符编码的定义和不同
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: Java 文章目录 💯前言💯一、ASCII编码详解1.1 ASCII的组成1.2 ASCII的局限性 💯二、Unicode编码详解2.1 Unicode编码方式2.2 Unicode的字符范围 💯三、ASCII与Unicode的…...
Linux相关概念和易错知识点(28)(线程控制、Linux下线程的底层)
目录 1.线程控制 (1)pthread和thread库 (2)线程的创建、等待和分离 ①线程创建 ②线程等待 ③线程分离 ④线程替换(不可行) (3)线程的终止和取消 ①线程终止 ②线程取消 2…...
lighten() 函数被弃用:替代方案color.scale()或者color.adjust()
在 SCSS (Sass 的一个语法) 中,lighten() 函数用于调整颜色的亮度。然而,随着 Sass 语言的不断发展,一些旧函数被标记为弃用,以鼓励使用更现代、更灵活的 API。lighten() 函数就是其中之一。 1. 弃用通知 当您看到 lighten() is…...
【leetcode】双指针:有效三角形的个数 and 和为s的两个数
文章目录 1. 有效三角形的个数1.题目2.讲解算法原理3.代码 2.和为s的两个数1.题目2.思路3.代码 1. 有效三角形的个数 1.题目 示例1解析: 2.讲解算法原理 3.代码 class Solution { public:int triangleNumber(vector<int>& nums) {sort(nums.begin(), …...
IDEA通过Contince接入Deepseek
Deepseek 的出色表现,上期【Deepseek得两种访问方式与本地部署】 安装Continue插件 第一步、下载插件 在编辑栏【File】->设置【Settiings】或快捷键【CtrlAltS】,弹窗的左侧导航树,选择【plugins】,在marketplace 搜索【Continue】,点…...
grep如何排除多个目录?
在使用 grep 进行文本搜索时,有时候需要排除多个目录,避免在这些目录下进行搜索。下面介绍几种不同的实现方式。 目录 1.使用 -r 和 --exclude-dir 选项(GNU grep) 2.使用扩展正则表达式和 -P 选项(GNU grep&#x…...
Elasticsearch 数据建模:从原理到实战的降维打击指南
Elasticsearch 数据建模:从原理到实战的降维打击指南 🚀 第一章 数据建模的物理法则:倒排索引的奇妙世界 1.1 倒排索引:比字典更聪明的数据结构 当你在ES中存入"Hello World"时,背后发生了这些魔法&#…...
python defaultdict用法
摘要 使用 defaultdict 可以简化处理字典中缺失键的情况。以下是几个使用 defaultdict 的示例,展示了它在不同场景下的应用。 示例 1:分组文件 假设我们有一组文件名,想要根据文件扩展名将它们分组。我们可以使用 defaultdict 来实现这一点…...
Java 与设计模式(15):模板方法模式
一、定义 模板方法模式是一种行为设计模式,它定义了一个操作中的算法的骨架(也就是大致的步骤和流程),而将一些具体步骤的实现延迟到子类中。这样,子类可以不改变算法的结构即可重新定义算法的某些特定步骤。 二、Ja…...
ubuntu更新失败:apt-get install -f Transaction failed: 软件包系统已损坏
检查您是否使用了第三方源。如果是就禁用它们,它们常常导致问题。 然后在终端中运行以下命令:apt-get install -f Transaction failed: 软件包系统已损坏下列软件包未满足的依赖关系:sunloginclient: Depends: libappindicator3-1 但是 %%s 没…...
16-使用QtChart创建动态图表:入门指南
QtChart是Qt框架中的一个强大模块,用于创建各种类型的图表,如折线图、柱状图、饼图等。它提供了丰富的API和灵活的配置选项,使得开发者能够轻松地将数据可视化集成到应用程序中。本文将介绍如何使用QtChart创建一个简单的动态折线图ÿ…...
C++ | 虚函数
在 C 面向对象编程领域,多态性堪称核心概念,而虚函数则是实现运行时多态的关键所在。 一、虚函数的概念与作用 1.1 什么是虚函数 虚函数是 C 中用于实现动态多态的成员函数。在基类中使用virtual关键字声明虚函数后,派生类能够重写&#x…...
单元测试整理
在国外软件开发中,单元测试必不可少,但是国内并不太重视这一块,一个好的单元测试可以提前发现很多问题,也减去和测试battle的时间 Spring单元测试 JUnit4 RunWith 指明单元测试框架 e.g. RunWith(SpringJUnit4ClassRunner.cla…...
Delphi语言的软件工程
Delphi语言的软件工程 引言 在软件工程的历史长河中,Delphi语言作为一种快速应用程序开发(RAD)的工具,凭借其高效的开发环境和强大的编程能力,一直在软件开发领域占有一席之地。本文将探讨Delphi语言的历史背景、特性…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...
