2014-02-13 28 views
0

我有一個git項目,我即將推向SourceForge。我本地回購的起源是一個共享文件系統回購協議,它爲我提供了備份功能。git推到遠程並失去所有的歷史

當我最終將SF添加爲另一個遠程時,我只是想將最新的(=版本化)提交作爲我在該回購代碼上的代碼的起始基礎,而不包括所有以前包含可能垃圾/敏感的提交/令人尷尬的代碼。

我的問題是類似this one,但問題是關於剛剛離開了一些歷史 - 我要離開了歷史的所有並擁有最新的承諾成爲該項目的代碼的起點上SF。重要的是,做完這些之後,即使原點和SF會有所不同,我也希望「向上遊推進」繼續工作。

這可能嗎?順便說一下,我通過Eclipse即可完成此操作。例如:It。

更新

我原來的問題應該是清晰的,但答案至今已幫助澄清正是我想要的目的。

我只想將合併提交推送到SF,代表發佈的版本。 這就是我想做的事:

[master] A--B--C--D--E--F--G--H--I... --> push to origin (private) 
       \   \ 
[public]   V1----------V2...  --> push to public remote repo 

@michas's答案我開始了與分支公共V1,但我無法弄清楚如何繼續以後的版本提交延長這個分支。我已經嘗試過rebase,但無法獲得我想要的結果。

回答

0

由@michas提供的答案不允許我隨後維護具有合併歷史記錄的分支。這需要使用git merge --squash。我最終想出的方案與described here相似。

只是整理所以問題有一個upvoted的答案。

0

這聽起來像你想開始一個新的回購。你爲什麼不刪除或重命名舊的回購並創建一個全新的回購。然後複製所有文件,提交併推送。

+0

我不想丟失本地或源文件的歷史,只是在SourceForge上。 – ceperman

0

那麼,你不能推送當前提交,因爲這個提交包含了整個「垃圾」歷史。

但是,您可以創建一個具有相同內容但沒有任何歷史記錄的新提交。

git checkout --orphan fresh # create a new branch called `fresh` without any history 
git commit     # add your work as a new commit 
git diff fresh master  # the both branches should contain the same content (assuming you original branch was called `master`) 
git log      # verify the current branch does not contain any history 
git push sf fresh   # push that branch 
git push sf fresh:master  # (or you might want to call that branch master on sf)