git推送到远程并丢失所有历史记录

时间:2014-02-13 21:12:06

标签: eclipse git

我有一个git项目,我即将推送到SourceForge。我本地仓库的原产地是一个共享文件系统仓库,它为我提供备份工具。

当我最终将SF添加为另一个远程时,我只想将最新的(=版本化的)提交作为我的代码在该repo上的起始基础,并且不包括所有先前包含可能垃圾/敏感/的提交令人尴尬的代码。

我的问题类似于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,但无法得到我想要的结果。

3 个答案:

答案 0 :(得分:0)

听起来你想要从一个新的回购开始。为什么不删除或重命名旧的仓库并创建一个全新的仓库。然后复制所有文件,提交它们并推送。

答案 1 :(得分: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)

答案 2 :(得分:0)

@michas提供的答案并不允许我随后使用合并历史来维护分支。这需要使用git merge --squash。我最终想出的方案类似于described here

只是整理一下,这个问题就得到了一个好评。