我正在發佈一個私有存儲庫,以供公衆訪問。我需要發佈特定版本的回購(我的報告基於此),然後從此發佈的版本中刪除所有提交歷史記錄。克隆版本並刪除所有提交歷史記錄
一個簡單的解決方案是首先克隆版本,然後從克隆項目中刪除所有git腳印,並將其作爲新項目推送到某處。但我想知道是否有其他更專業的方法。
我正在發佈一個私有存儲庫,以供公衆訪問。我需要發佈特定版本的回購(我的報告基於此),然後從此發佈的版本中刪除所有提交歷史記錄。克隆版本並刪除所有提交歷史記錄
一個簡單的解決方案是首先克隆版本,然後從克隆項目中刪除所有git腳印,並將其作爲新項目推送到某處。但我想知道是否有其他更專業的方法。
我只想讓整個回購的副本,在需要的修改,然後執行以下操作上副本:
.git
目錄git init
我沒有看到任何這個問題。
這是我已經做了,但將它標記爲答案無論如何:) – user3639557
刪除.git文件夾可能會導致您的git存儲庫出現問題。如果你想刪除所有提交的歷史,但保持代碼在當前狀態下,它是很安全的做如下所示:
結帳
git checkout --orphan latest_branch
添加的所有文件
git add -A
提交更改
git commit -am "commit message"
刪除分支
git branch -D master
重命名當前分支掌握
git branch -m master
最後,力更新你的資料庫
git push -f origin master
希望這有助於。也不會阻止你的老提交歷史周圍:)
您可以使用git-rebase:
轉到你希望它是第一個版本。
git checkout yourRevision
看的第一個承諾(例如:AAAAAA)的SHA1
git checkout -b newMaster // temporal branch
git rebase -i aaaaaa // Your first SHA1
你的編輯器將打開。將每個「挑選」選項替換爲「壓扁」選項,但用「挑選」離開第一個(aaaaaa)選項。保存並退出。
僅會生成一個提交的新完整歷史記錄。
現在您必須添加其餘的提交。
git checkout yourRealMasterBranch
git rebase --onto newMaster yourRevision yourRealMasterBranch
這會重新生成其餘的歷史記錄。
現在,您可以克隆您的存儲庫,並且只有新的歷史記錄纔會有您創建的新歷史記錄。你仍然可以在你的原始歷史中獲得所有的歷史。
您可以將公共回購作爲遠程添加,爲該回購擁有專用分支,在準備發佈時將本地主分區合併到專用分支,並將專用分支推送到公共回購。
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
這是一個提交併推送這個單一合併提交給公衆回購將合併在本地的master分支到當地的公共主分支的所有更改。
在
Squash commit -- not updating HEAD
Automatic merge went well; stopped before committing as requested
的merge --squash
命令結果預計,你可以定製發佈之前提交。
然後,每個需要發佈在主
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
什麼是你所建議的解決問題的新的變化的時間?我認爲它確實是你想要的,而且很容易做到。 – FlyingFoX
我認爲有簡單的命令可以無痛地做到這一點。我在網上搜索了一段時間,無法達到這樣的命令。想知道他們是否真的存在:) – user3639557