要从gitlab repo中删除最新的提交,并删除旧的本地提交

问题描述 投票:0回答:1

我想要实现两件事。首先删除我推送到gitlab的无用提交。其次,从我的电脑中删除所有旧提交(但它们必须保留在gitlab上)。

首先,我删除了旧的.git目录。然后我做了:

git init
git add .
git remote add origin [email protected]:asmf2/asmfrt.git
git reset --hard HEAD~1

那产生了

致命的:模糊的参数'HEAD~1':未知的修订或路径不在工作树中。使用“ - ”将路径与修订分开

如何将其添加到工作树中?那么还有别的吗?

然后,从gitlab删除最新的提交后,如何保持我的电脑没有旧的提交。仅仅修改代码,添加内容,为它创建提交然后推送到gitlab就足够了?

感谢您的关注。

git gitlab
1个回答
0
投票

这不是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

© www.soinside.com 2019 - 2024. All rights reserved.