我正在努力实现两件事。首先删除我推送到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就足够了吗?
感谢您的关注。
答案 0 :(得分:0)
这不是Git的设计方式(但最后请参见浅层克隆)。
Git存储库的 intent 是指随时随地所有内容。如果你带着你的笔记本电脑露营,或乘坐飞机,或者南极,或者其他什么,你将拥有一切。
这意味着你永远不会丢弃提交,事实上,Git的设计是为了当你把两个Gits放在彼此附近让他们说话时,他们倾向于互相给予彼此他们拥有的每一个提交,而另一个没有& #39;吨。 Git一直在尝试Borg up所有提交。
当然,尽管有这样的设计,但 可能会抛弃提交。这有多难取决于有多少Gits。如果你的Git是只有的 Git,那么它就会变得容易多了。一旦你的Git把它交给另一个Git,那么......如果你的Git把它交给了Bob的Git,而Bob的Git和Carol有关系,那么Carol' s现在也有。如果她的Git与Dave的关系,现在Dave也得到了它!
所以:
我正在尝试...删除我推送到gitlab的无用提交。
你可以这样做,提供没有其他人的Git已经在你的Gitlab服务器上联系了Git。但是,除非您可以直接登录到Gitlap服务器,否则删除您的存储库不会有帮助。你需要做的第一件事就是重新克隆,这样你就可以重新拥有整个东西了。
重新克隆后,然后可以使用git reset
故意丢弃一个提交。这只会从你的克隆中丢弃它,所以接下来,你必须使用强制推送&#34; -a具有命令力的推送,而不是礼貌请求的温和性 - 对你的Gitlab服务器上的Git,告诉它类似地设置其分支。当你这样做的时候,如果鲍勃和卡罗尔和戴夫存在 - 本质上,如果其他人已经拿起了你想要的提交 - 你需要以某种方式与他们联系并要求他们从<去除提交他们的 Gits。一旦它从每个Git中消失,它就不会再次感染每个人。
由Gitlab服务器决定是否遵守此命令。如果他们赢了,你就无法以这种方式摆脱提交。您真的必须直接登录到服务器。
(在这种情况下,一旦您登录到服务器,您可以导航到那里的Git存储库并在那里使用git reset
,就像在您自己的存储库中一样,强制他们的Git忘记提交。在这种情况下,删除自己的Git存储库是......过度杀伤,但不一定坏。)
[和]我想...从我的电脑上删除所有旧提交
如上所述,Git的设计并非如此。但是,如果你真的想要,你可以使用Git所谓的浅层克隆,这是一个克隆,其中历史 - 从其他一些Git获得的提交只返回到目前为止。要制作浅层克隆,您可以使用git clone --depth=<n> <url>
或git clone --shallow-since=<date> url
。尽管现代Git(2.x)已经删除了旧Gits中仍存在的一些更严格的限制,但是浅克隆对你可以用它们做些什么有一些限制。
浅层克隆一旦制作,可以使用git fetch
的选项加深或进一步加深(如果这是一个动词);见the documentation。