繁体   English   中英

合并缺少提交历史记录的git存储库到保留历史记录的存储库

[英]Merge a git repository lacking commits history to a repository that preserved history

下载了C ++项目的源代码,而不是在git://www.calatk.org/calatk.git克隆其git存储库

使用此源代码(没有git历史记录),我创建了一个git repo,处理了一段时间,然后将所有工作/分支推送到https://github.com/agirault/CalaTK上的 github。

我现在想发出拉取请求,以将我的代码合并到 calatk.git上的原始git存储库中。

我想知道如何才能做到这一点,因为我的存储库中没有以前提交的内容。 从那以后就不应该更新calatk.org上的此存储库,这意味着它们的最后一次提交将与我在github上可用的第一次提交相同。

假设您不介意将发布的GitHub存储库替换为包含原始项目的历史记录†的存储库,请尝试以下操作:

  1. 将上游存储库添加为第二个远程数据库:

     git remote add upstream <clone-url> 
  2. 从上游获取:

     git fetch upstream 

    这将生成新的分支指针,包括upstream/master upstream/master不应与您现有的提交共享历史记录。 也就是说,您将有两个root提交:一个来自上游项目,另一个来自您的fork。

  3. 将您的工作基于上游提交(假设我们只需要担心master ):

     git checkout master git rebase upstream/master 

    此时,您应该只有一个根提交:上游项目中的一个。 您原来的根提交的哈希(现在不再是根提交)应与上游项目中显示的哈希匹配( 3cee904 )。

    您可以使用git show 3cee904来确保提交正确。

  4. 强制将您的新历史记录推送到GitHub:

     git push --force origin master 
  5. 根据他们的贡献准则将更改提交到上游存储库。

    由于它不在GitHub或BitBucket上,因此他们不太可能接受拉取请求(这是专有功能)。 不过,您应该可以请求推送访问或使用git format-patch 上游维护者也可以从您的公共GitHub存储库中fetch

重要说明:如果您在GitHub项目上有合作者,这可能不是最佳选择。 通常不建议在Git中修改共享提交。 我只推荐它,因为听起来您的GitHub存储库实际上是一个个人存储库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM