小工具      在线工具  汉语词典  css  js  c++  java

git删除已经提交到本地仓库的代码

# Git,git 额外说明

收录于:157天前

使用场景如下:在开发项目中,在第一个版本中编写了一个功能,但是在版本迭代过程中,该功能被丢弃,这意味着该功能的核心代码将被删除,但这部分代码已经提交到 如果您已经有本地仓库,如何删除本地仓库中记录的代码?

首先很多人会想到直接删除本地代码,提交,然后推送。然而,这可行吗?

实验

首先将一个项目代码提交到本地仓库,再推送到远程分支,如下图:

项目路径是`app/customer/cmd/rpc/internal/logic`

包含了如下的文件:

在这里插入图片描述

本地仓库和远程仓库是一致的

项目中使用`git ls-files -c`命令查看本地仓库文件

打印行数太多就不全部截图了(截取一部分)

在这里插入图片描述
如果只删除工作区文件,如下文件夹中的文件
在这里插入图片描述
就像下图所示,缓存区和本地仓库均还有,当有新代码提交时,只会把新代码merge到该分支上去,那些工作区删除的文件仍然存在。

alt

而如果你使用jetbrains的IDE,你会发现问题直接可视化了,如下

在这里插入图片描述
这些本地删除了的文件编程灰色,仍然存在缓存区,甚至可以再次提交,只是本地没有了该文件无法修改。

那么如何删除呢?

计划

由于缓存区和本地仓库一般是级联操作的,所以只需要使用git命令来删除本地仓库的内容即可。

  • git git revert切换代码版本实现内容删除

由于git是分布式多分支管理的代码仓库,git实现能够实现本地迭代也能切换不同的版本,git中HEAD指向某个分支,在更新版本是也会设置版本标签。

在这里插入图片描述
如上图所示,将版本回退就可以删除当前版本提交的代码了。要删除某些文件就会退到提交该文件的前一个版本。但是这样面临的问题是许多新增功能的代码与需要删除文件无关的代码也回退了,还需要重新编写再提交,如果代码更新了很多版本了就更麻烦了。(除非重大问题一般不推荐该方法)

  • git reset撤回文件

这种方法直接需要git的跟踪状态来将文件撤回到git add之前的状态,相当于从来没有提交过。

在这里插入图片描述
撤回操作时本地仓库和缓存区是联级的,自动一起撤回了,直接回到了git add之前的状态,本地仓库变成了新的没有任何内容的仓库,缓存区也清空了。现在只需要在文件夹中删除需要不需要的文件即可。再次git add,git commit,此时本地仓库更新完毕了。

在这里插入图片描述
如上图所示,从记录中也能看出最开始提交的文件已经删除,查看本地仓库:

git ls-files -c

在这里插入图片描述
如上图,原来app/customer/cmd/rpc/internal/logic目录下已经变成了全新的内容。

  • git rm --cached删除仓库文件

git rm --cached命令和git reset命令相似,在逻辑上不一样,rm是直接删除指定文件git相关的内容

在这里插入图片描述
通过git rm命令也是将仓库和缓存区指定文件删除,回到未git add的状态。

git rmgit reset是Git中两个不同的命令,它们在操作上有所不同:

  1. git rm 是用于从版本控制中删除文件的命令。它执行两个操作:从本地文件系统中删除文件并将删除记录到 Git 的版本历史记录中。这样,该文件将不再出现在您的代码库中,并且在提交更改后将无法恢复。您可以使用 git rm <filename> 命令指定要删除的文件。

  2. git reset 用于撤消提交或将 HEAD 指向不同的提交。它用于更改当前工作树和暂存区的状态。 git reset 可用于撤消提交并放弃其更改。它还可用于将分支指针移动到不同的提交,从而更改当前的代码库状态。

  3. 如果使用 git reset 命令指定一次提交,HEAD 将指向该提交,并且当前工作树和暂存区将恢复到该提交时的状态。如果使用 git reset --hard 命令指定一次提交,它会将 HEAD 指向该提交并完全丢弃对当前工作树和暂存区域的更改。

总而言之, git rm 用于删除文件,而 git reset 用于撤消或更改提交,并且可用于移动分支指针。这两个命令在Git中扮演着不同的角色,根据您的需要,选择合适的命令来执行所需的操作。

. . .

相关推荐

额外说明

Mysql设置索引的注意事项

在讲索引设置前先说说索引的原理。索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是一种数据结构。 一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。这样的话,索引

额外说明

Spring-session+Redis实现SSO及其源码简析及注意事项

本篇博客的讲述流程: 列出配置实现 对配置上的关键点做解释说明 讲述配置实现的注意事项 先看Redis连接池配置: import org.springframework.cache.CacheManager; import org.springframe

额外说明

Unity零基础到进阶 ✨ 使用 Vectrosity 插件 像德芙一样丝滑的画线

Vectrosity画线插件 ☀️ Unity画线插件Vectrosity - 在使用Unity进行开发的过程中,我们在某些时候需要使用到划线功能,使用Unity中的几种划线方法自然可行,但是我们可以用一种更方便的方式来进行划线操作,那就是我们的主角:V

额外说明

计算机网络实验: 使用Wireshark抓包工具进行网络层和链路层网络协议分析(IP部分)

目录 实验名称: 实验介绍: 实验目的: 背景知识和准备: 实验过程: 一、 IP协议分析 二、 Ethernet & ARP 协议分析 实验名称: 网络层和链路层网络协议分析 实验介绍: 本实验通过执行traceroute程序,探究IP协议,实现对IP

额外说明

一站式低代码开发平台iVX初探

       在数字化时代的浪潮中,低代码已经逐渐成为一种趋势和潮流。作为国内首个图形化通用无代码编程平台,iVX提供了一款强大、高效、易学的零代码开发语言和全生命周期一站式云原生应用开发工具,无疑为低代码界带来了一场革命。 1、什么是低代码?    

额外说明

Python面试:什么是GIL

1. GIL (Global Interpreter lock)可以避免多个线程同时执行字节码。 import threading lock = threading.Lock() n = [0] def foo(): with lock:

额外说明

YoloV5改进策略:SwiftFormer,全网首发,独家改进的高效加性注意力用于实时移动视觉应用的模型,重构YoloV5

文章目录 摘要 论文:《SwiftFormer:基于Transformer的高效加性注意力用于实时移动视觉应用的模型》 1、简介 2、相关研究 3、方法 3.1、注意力模块概述 3.2、高效的加性注意力 3.3、SwiftFormer 架构 4、实验 4

额外说明

多种方法解决There is no tracking information for the current branch的错误

文章目录 1. 复现错误 2. 分析错误 3. 解决错误 3.1 远程有分支 3.2 远程无分支 4. 总结 1. 复现错误 今天发布某版本的项目,准备创建个v0point1分支,后期如果修改该版本,直接在该分支上修改即可。 首先,使用git branc

额外说明

Windows系统缺少wtsapi32.dll文件出现错误问题

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个wtsapi32.dll文件

额外说明

wordpress界面汉化_WordPress用户界面的演变(2003 – 2019)

汉化wordpress界面 自 2003 年首次发布以来,WordPress 用户界面一直在稳步发展。WordPress 最初是一个简单的博客平台,现在已经发展成为一个成熟的 CMS 平台。在本文中,我们将带您回到过去,展示自 2003 年至今 Word

ads via 小工具