克隆版本并删除所有提交历史记录

时间:2015-08-18 10:07:22

标签: git

我发布了一个公共可访问的私有存储库。我需要发布一个特定版本的repo(我的报告所基于的版本),然后从这个发布的版本中删除所有提交历史记录。

一个简单的解决方案是首先克隆版本,然后从克隆项目中删除所有git足迹并将其作为一个新项目推送到某个地方。但我想知道是否还有其他方法可以做到更专业。

4 个答案:

答案 0 :(得分:4)

我只需要在所需版本中复制整个仓库,然后在副本上执行以下操作:

  • 删除.git目录
  • 执行git init
  • 提交所需的修订

我没有看到任何问题。

答案 1 :(得分:0)

删除.git文件夹可能会导致git存储库出现问题。如果要删除所有提交历史记录但保持代码处于当前状态,则执行此操作非常安全,如下所示:

结帐

git checkout --orphan latest_branch

添加所有文件

git add -A

提交更改

git commit -am "commit message"

删除分支

git branch -D master

将当前分支重命名为master

git branch -m master

最后,强制更新您的存储库

git push -f origin master

希望这会有所帮助。这也不会保留你的旧提交历史:)

答案 2 :(得分:0)

您可以将公共仓库添加为远程仓库,为该仓库设置专用分支,在准备发布时将本地主仓合并到专用分支,并将专用分支推送到公共仓库。

git remote add public <url-to-public-repo>
git fetch public
git checkout -b public-master public/master
git merge --squash master
git add .
git commit -m "Publish changes to public repo"
git push public public-master:master

这会将本地主分支中的所有更改合并为本地public-master分支作为一个提交,并将该单个合并提交推送到公共存储库。

merge --squash命令导致

Squash commit -- not updating HEAD
Automatic merge went well; stopped before committing as requested

是预期的,您可以在发布之前定制提交。

然后,每次您需要在主

中发布新的更改时
git checkout -b public-master public/master
git pull
git merge --squash master
git add .
git commit -m "Publish more changes"
git push public public-master:master

答案 3 :(得分:-1)

您可以使用git-rebase

转到您希望它成为第一个的修订版。

git checkout yourRevision

查看第一个提交的SHA1(例如:aaaaaa)

git checkout -b newMaster // temporal branch
git rebase -i aaaaaa // Your first SHA1

您的编辑将会打开。将每个“选择”选项替换为“压缩”选项,但将第一个选项(aaaaaa)替换为“选择”。保存并退出。

将生成仅一次提交的新完整历史记录。

现在你必须添加其余的提交。

git checkout yourRealMasterBranch 
git rebase --onto newMaster yourRevision yourRealMasterBranch

这会重建历史的其余部分。

  • “ -​​ on newMaster”是您想要开始的起点。
  • “yourRevision yourRealMasterBranch”来自提交内容。

现在,您可以克隆您的存储库,而新存储库将只具有您创建的新历史记录。你仍然可以拥有原始历史记录。