90

请注意,使用--depth=1参数会阻止将项目推送到新的存储库

4

3 回答 3

78

你可以做一个

git clone <git_url>

从您的文件夹中删除 .git 存储库。这将删除您的所有历史记录。

你可以做一个

git init 

这将为您创建一个全新的 git 项目。

这可能不是最好的方法。但这会起作用。希望能帮助到你。

于 2015-04-20T13:06:56.017 回答
40

只要您认为完全丢失历史没有问题,Ajay 建议的方法是完全有效的。但是如果你想保持你的浅克隆的历史,我有一个不同的建议。


浅克隆通过使用所谓的嫁接点来伪造“第一次”提交的父级,从而假装拥有完整的历史记录。如果我们假设我们有完整的历史可用,我们可以改写这个问题:我如何在特定修订之前丢弃历史?

这意味着我们可以使用嫁接点和git filter-branch(如链接问题中所建议的)的组合。但是您必须注意,这将重写您的完整历史记录,使新的历史记录与我们最初克隆的遥控器不兼容。因此,我们应该从我们的存储库中删除旧的远程。

git remote remove <old-remote-name>

现在我们可以开始重写了。假设我们想让当前的master提交存储库的新根。

git rev-parse --verify master >> .git/info/grafts
git filter-branch -- --all

这将重写我们存储库的完整历史记录,并将当前的主提交作为新的根。您可以通过删除refs/original. 此外,您现在可以删除该.git/shallow文件。

完成此操作后,您应该能够在新遥控器中推送现在未嫁接的历史记录。

于 2015-04-20T14:01:00.757 回答
1

尝试这样的事情:

mkdir -p /tmp/git-copy
cd /tmp/git-copy

# create another copy of your repository
git clone file:///path/to/cloned/repo

cd repo
git rebase -i (first-commit)

# in vim:
# :2,$s/^pick/squash
# :w

# Now wait, it will take a while...

git push --mirror git@github.com:username/new-repo.git

我刚才在这个存储库上试过了。似乎有效 - 没有历史记录,所有子模块都完好无损。

于 2016-01-04T20:06:50.807 回答