关于git删除远程commit

569 查看

额,怎么开头呢,从文章的定位开始吧。这篇文章的目的就是定位给完全的小白,像我这样,对于互联网知识不了解的人,但是特别渴望学习,小白文章小白文章小白文章!重要的事情说三遍,大神绕行!

先说下环境:

运行环境:mac os
编程工具:android studio
代码托管平台:开源中国git@cos

好了,先来模拟下可能需要用到这篇文章的地方。我们的代码都在远程服务器托管。 很多原因可能会导致我们想删掉远程服务器上提交的版本。下面就来说下怎么删除,应该有不同的方法去实现删除。

1.1假设我们服务器上的commit记录为:

commit4
commit3
commit2
commit1

我们所提交的commit4为你想删除的。那应该从哪入手?
至少我用的android studio我不知道如何下手。而多数用git的人都是用的命令行控制,很显然,我们也要用命令行控制。具体操作:

1.2在哪里输入命令行
打开mac上的终端(windows好像也有个cmd还是啥的吧,输入命令行的,都一样的)。然后多少有点开发经验的应该都知道命令行的cd指令。在终端中,cd到你的项目目录下。正常来说,如果你的项目是一个git项目,那么在你的目录下面会有个.git的隐藏文件夹。比如我的项目叫Test,在硬盘的develop文件夹下。在终端中输入“cd developer/Test/”回车,此时已经定位到你的项目下了。这时候你操作的就是当前项目的git,不会影响其他的git库。

1.3输入什么?
我们去网上看人家的教程,人家往往都直接给出"get reset --hard..."之类的代码,这时候我们就可以在当前的终端中输入了。下面主要说一下删除的命令行。拿上面的例子。commit4为你想删除的,首先在终端中输入"git reset --hard HEAD~1",接下来会提示"HEAD is now at commit3"就是说你当前的代码是commit3提交的内容。然后通过"git push --force"命令提交到远程库。这里一定要注意注意再注意!

注意:提交到远程库之后,commit4的代码会直接从远程库里面删除。 也就是修改的记录没了。下面要讲的,跟刚才输入的第一个命令"git reset --hard HEAD~1"有关,这里至关重要的是后面那个数字。1代表你当前在git上最新的那个版本。2,代表的是最新版本的上一个版本,以此类推。也就是当你输入"git reset --hard HEAD~2"的时候,会把commit3以及以后的都删掉,也就是远程仓库只有commit2修改后的代码!

通过上文看到,这种用法还有一点局限性,那就是我想要只删除中间的commit3版本,但是想保留commit4修改的内容。这种需求是无法满足的。

该文章虽为原创,但是里面用到的方法是我在SegmentFault社区的一篇文章上看到的:http://segmentfault.com/a/1190000004071116
还得多谢一直支持我的大神,让我知道如何操作git代码!多谢!