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

使用场景如下:在开发工程中第一版编写了一个功能,可在版本迭代的过程中该功能被舍去了,这就意味着该功能的核心代码都要删除,可以该部分代码早已提交到本地仓库了,那么该如何删除本地仓库记录的代码呢?

首先很多人都会想到直接删除本地的代码,在提交,再推送,然而这样行的通吗?

实验

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

项目路径是`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 <文件名>命令指定要删除的文件。

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

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

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

猜你喜欢

转载自blog.csdn.net/xwh3165037789/article/details/132121676