要从gitlab repo中删除最新的提交,并删除旧的本地提交
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了要从gitlab repo中删除最新的提交,并删除旧的本地提交相关的知识,希望对你有一定的参考价值。
我想要实现两件事。首先删除我推送到gitlab的无用提交。其次,从我的电脑中删除所有旧提交(但它们必须保留在gitlab上)。
首先,我删除了旧的.git目录。然后我做了:
git init
git add .
git remote add origin git@gitlab.com:asmf2/asmfrt.git
git reset --hard HEAD~1
那产生了
致命的:模糊的参数'HEAD~1':未知的修订或路径不在工作树中。使用“ - ”将路径与修订分开
如何将其添加到工作树中?那么还有别的吗?
然后,从gitlab删除最新的提交后,如何保持我的电脑没有旧的提交。仅仅修改代码,添加内容,为它创建提交然后推送到gitlab就足够了?
感谢您的关注。
这不是Git设计使用的方式(但最后会看到浅色克隆)。
Git存储库的目的是让所有内容始终触手可及。如果你随身携带笔记本电脑,露营,飞机,南极,或其他什么,你将拥有一切。
这意味着你永远不会丢弃提交,事实上,Git的设计是为了当你把两个Gits放在彼此附近并让他们说话时,他们倾向于互相给予彼此每次提交而另一个没有。 Git一直在尝试Borg up所有的提交。
当然,尽管有这样的设计,但仍然可以抛弃提交。这有多难取决于有多少Gits。如果你的Git是唯一拥有它的Git,这会让它变得容易多了。一旦你的Git把它交给另一个Git,那么......如果你的Git把它交给Bob的Git,而Bob的Git与Carol有关系,那么Carol现在也有它。如果她的Git与Dave的关系,现在Dave也得到了它!
所以:
我试图...删除我推送到gitlab的无用提交。
如果没有其他人的Git在Gitlab服务器上联系Git,你可以这样做。但是,除非您可以直接登录到Gitlap服务器,否则删除您的存储库将无济于事。你需要做的第一件事就是重新克隆,这样你就可以重新拥有整个东西了。
一旦你重新克隆,那么你可以使用git reset
故意丢弃一个提交。这只会从你的克隆中丢弃它,所以接下来,你必须使用一个“强制推送” - 一个具有命令力的推送,而不是礼貌请求的温和 - 给你的Gitlab服务器上的Git,告诉它同样地设置它的分支。当你这样做的时候,如果Bob和Carol和Dave存在 - 本质上,如果其他人已经拿起你想要的提交 - 你需要以某种方式联系他们并要求他们从他们的Gits中删除提交。一旦它从每个Git中消失,它就不会再次感染每个人。
由Gitlab服务器决定是否遵守此命令。如果他们不这样做,你就无法以这种方式摆脱提交。您真的必须直接登录到服务器。
(在这种情况下,一旦您登录到服务器,您可以导航到那里的Git存储库并在那里使用git reset
,就像在您自己的存储库中一样,强制他们的Git忘记提交。在这种情况下删除了自己的Git存储库是......过度杀伤,但不一定是坏事。)
Shallow clones
[和]我想...从我的电脑中删除所有旧提交
如上所述,这并不是Git的设计工作方式。但是,如果你真的想要,你可以使用Git所谓的浅层克隆,这是一个克隆,其中历史 - 从其他一些Git获得的提交只返回到目前为止。要制作浅层克隆,您可以使用git clone --depth=<n> <url>
或git clone --shallow-since=<date> url
。尽管现代Git(2.x)已经删除了旧Gits中仍然存在的一些更严格的限制,但是浅克隆对你可以用它们做些什么有一些限制。
一旦做成的浅层克隆,可以使用git fetch
的选项加深或进一步加深(如果这是一个动词);见the documentation。
以上是关于要从gitlab repo中删除最新的提交,并删除旧的本地提交的主要内容,如果未能解决你的问题,请参考以下文章