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

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

# Git,git 额外说明

收录于:112天前

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

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

实验

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

项目路径是`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中扮演着不同的角色,根据您的需要,选择合适的命令来执行所需的操作。

. . .

相关推荐

额外说明

Axure RP软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 Axure RP是一款专业的原型设计工具,它能够帮助用户创建高保真度的交互式原型。 Axure RP具有以下特点: 强大的交互设计功能:Axure RP提供了丰富的交互设计工具,用户可以通过拖拽和链接来创建

额外说明

Composer配置国内源

https://developer.aliyun.com/composer

额外说明

彻底弄懂session,cookie,token

简述 我在写之前看了很多篇session,cookie的文章,有的人说先有了cookie,后有了session。也有人说先有session,后有cookie。感觉都没有讲的很清楚,泛泛而谈。希望本篇文章对大家有所帮助 注:本文需要读者有cookie,se

额外说明

管理学原理历年真题

好不容易在网上搜刮过来,留着给自己给有需要的人,备用。 类型:全国卷 课程代码:00054  

额外说明

自我管理能力提升-角色定位

1.管理者的角色是什么了? 很多人,做上管理思维很难改变,就是俗话说的屁股变了,脑袋还没有跟上。 管理者应该是做到承上启下。 2. 管理者怎么做到承上启下了? 对上级应该是能扛得住目标和责任。 对同事应该是拢得住需求和服务。 对下级应该是罩得住成长和发展

额外说明

C# 44.DataGridView 禁用排序

for (int i = 0; i < dataGridView1.Columns.Count; i++) { dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode

额外说明

Shell流程控制语句

1. if #!/bin/bash score=60 if [ $score -lt 60 ];then echo '小于60' elif [ $score -ge 60 ] && [ $score -lt 70 ];then ech

额外说明

网络编程Java Socket(UDP/TCP 套接字)

Socket是什么? 想知道Socket是什么就先得了解一下什么是网络编程 网络编程,通过代码来控制两个主机的进程之间能够进行数据交互。 操作系统就把网络编程的一些相关操作,封装起来了,提供了一组API供程序员使用。操作系统提供的功能,访问网络核心的硬件

额外说明

系统因缺失acctres.dll程序无法运行如何解决?

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

额外说明

没有自我Ping –防止WordPress将Ping发送到您自己的站点

Everybody knows that internal linking is good for SEO. It is also good for user experience because it helps the user relate to

ads via 小工具