重播git使用不同的根提交repo

时间:2014-01-02 16:02:56

标签: git smartgit

我是sourceforge上FreeGLUT项目的当前维护者之一。这段代码存储在SVN仓库中,但为了激发其他人的贡献,我想提供一个git repo。我已经在github上有一个git-svn克隆的svn trunk目前在github(通过SmartGit制作,实际上与git-svn并不真正兼容)。

我是通过克隆https://svn.code.sf.net/p/freeglut/code/trunk/freeglut来实现的。但是,我现在发现我应该克隆https://svn.code.sf.net/p/freeglut/code并让SmartGit的svn桥找出分支和主干。

我在本地制作了这个新的正确克隆。现在的问题是:我已经在我的本地git repo中提交了一些旧的/错误的克隆提交。我想将这些转移到我的新repo,但由于磁盘上的根目录不一样,所以here概述的简单rebase策略不起作用(我认为)。

我可以使用补丁来完成,因为git apply具有--directory参数来为补丁文件中的路径添加前缀以使事情有效,但是我必须通过提交来提交它。至少,我还没有找到一种方法将多个提交放在一个补丁文件中(不用压缩),并在我的HEAD之上重放它们。

如何最好地解决我的问题?

2 个答案:

答案 0 :(得分:6)

好的,结果是:

  1. git format-patch可以生成包含一系列提交的文件,例如整个分支。
  2. 带有--directory选项的
  3. git am可以逐个重播补丁文件中包含的提交(see here)并为我提交。
  4. 问题解决了!

答案 1 :(得分:0)

是的,你可以用补丁来做。

  1. 使用git reset --soft 'HEAD^'重置上次提交。或者如果您有3次提交。做就是了 git reset --soft HEAD~3
  2. 做补丁。
  3. 我认为this answer解释得很清楚。