2012-12-23 32 views
0

如果我从Github下载了一些东西,并且我想在本地擦除在给定提交之后发生的所有事情,我该怎么做?删除特定之后的所有提交?或者在特定提交时克隆

或者相反,我可以在某个时间点下载/克隆仓库吗? (这将是几个月大,但我不希望任何一个特定的点后,在我的存储库中显示的任何更改)

我知道提交,说它是abc123def

+0

你可能没有找到这个,因为你的措辞有点不同,但你的问题本质上是一个dup,[在这里回答](http://stackoverflow.com/questions/10303665/how-to-clone-一个特定版本的git-repository):) –

回答

0

当您在Git中克隆存储库时,您无法选择特定的修订版。您需要克隆整个存储库。

如果你想将所有从头部的变化消灭一个特定的修订版本,你可以指望该修订和头部

$ git log --oneline abc123def..HEAD | wc -l 

然后运行复位传递一些承诺要与提交的数量删除(例如123)

$ git reset --hard HEAD~123 
+0

为什么不使用'checkout'(并且可能创建一个新的分支,如果新的提交将被添加)。在这种情况下,硬复位似乎有些苛刻,尽管我猜测它仍然有效(大概不会有新的变化会从上游引入)。 –

+0

'checkout'只会给他留下一个独立的头像,而且他必须要理清他的情况。而且他清楚地表明了'消灭' - 严厉的意图的苛刻方法:)。 – Chronial

0

克隆存储库涉及下载所有远程引用和所需的所有提交。 (至少我不知道的方式来限制这一点。)

一旦你克隆你可以自由地建立自己的分支机构任意提交的信息库。

您可能想要类似git clone -n $urlgit checkout -b mybranch abc123def

之后,你应该看到git branch -av有你的分支指向你的旧提交以及指向新提交的远程分支。

从您的分支点开始,所有更新的提交不再存在。这很可能是你想要的。

如果你真的想从你的仓库中清除所有较新的提交,你必须删除所有较新的引用(即分支和标签)并使用git gc来清理所有内容。

0

Simone基本上是正确的,但有一个更简单的方法。首先,如前所述,克隆将总是克隆所有内容,而你无法帮助克隆。但是,感谢git的极速,这通常不是问题。克隆后,只需看看你的分支和运行:

git reset --hard abc123def 

问题的SE优点:应该这样,而已经编辑到Simone的答案吗?

相关问题