2015-08-18 234 views
1

我正在發佈一個私有存儲庫,以供公衆訪問。我需要發佈特定版本的回購(我的報告基於此),然後從此發佈的版本中刪除所有提交歷史記錄。克隆版本並刪除所有提交歷史記錄

一個簡單的解決方案是首先克隆版本,然後從克隆項目中刪除所有git腳印,並將其作爲新項目推送到某處。但我想知道是否有其他更專業的方法。

+1

什麼是你所建議的解決問題的新的變化的時間?我認爲它確實是你想要的,而且很容易做到。 – FlyingFoX

+0

我認爲有簡單的命令可以無痛地做到這一點。我在網上搜索了一段時間,無法達到這樣的命令。想知道他們是否真的存在:) – user3639557

回答

4

我只想讓整個回購的副本,在需要的修改,然後執行以下操作上副本

  • 刪除.git目錄
  • git init
  • 提交所需的修訂

我沒有看到任何這個問題。

+0

這是我已經做了,但將它標記爲答案無論如何:) – user3639557

0

刪除.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 

希望這有助於。也不會阻止你的老提交歷史周圍:)

-1

您可以使用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 

這會重新生成其餘的歷史記錄。

  • 「--onto newMaster」是您要開始的起點。
  • 「yourRevision yourRealMasterBranch」是從什麼提交到什麼提交。

現在,您可以克隆您的存儲庫,並且只有新的歷史記錄纔會有您創建的新歷史記錄。你仍然可以在你的原始歷史中獲得所有的歷史。

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 

這是一個提交併推送這個單一合併提交給公衆回購將合併在本地的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 
相關問題