我发布了一个公共可访问的私有存储库。我需要发布一个特定版本的repo(我的报告所基于的版本),然后从这个发布的版本中删除所有提交历史记录。
一个简单的解决方案是首先克隆版本,然后从克隆项目中删除所有git足迹并将其作为一个新项目推送到某个地方。但我想知道是否还有其他方法可以做到更专业。
答案 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
这会重建历史的其余部分。
现在,您可以克隆您的存储库,而新存储库将只具有您创建的新历史记录。你仍然可以拥有原始历史记录。