【问题标题】:replay git commits on repo with different root使用不同的 root 重放 repo 上的 git 提交
【发布时间】:2014-01-02 16:02:56
【问题描述】:

我是 sourceforge 上FreeGLUT 项目的当前维护者之一。此代码存储在 SVN 存储库中,但为了激发其他人的贡献,我想提供一个 git 存储库。我已经在 github 上有一个 svn 主干的 git-svn 克隆,目前位于 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 存储库中已经有一些旧/错误克隆的提交。我想将这些转移到我的新仓库中,但由于磁盘上的根目录不同,here 概述的简单变基策略将不起作用(我认为)。

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

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

【问题讨论】:

标签: git smartgit


【解决方案1】:

好吧,原来是这样:

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

问题解决了!

【讨论】:

  • 不错的答案。我不这么认为这个问题。
【解决方案2】:

是的,你可以用补丁来做到这一点。

  1. 使用git reset --soft 'HEAD^' 重置上次提交。或者如果你有 3 个提交。做就是了 git reset --soft HEAD~3
  2. 打补丁。

我觉得this answer解释得很好。

【讨论】:

  • 感谢您的帮助!但是,我不明白为什么要重置头部然后打补丁,我的头部很干净,只有补丁可以应用。
猜你喜欢
  • 2014-03-28
  • 1970-01-01
  • 2013-10-04
  • 2013-04-07
  • 1970-01-01
  • 2019-07-31
  • 2014-01-26
  • 1970-01-01
  • 2013-10-16
相关资源
最近更新 更多