将缺少历史记录的git存储库合并到保留历史记录的存储库 < > 下载的C++程序的源代码,而不是克隆> 其Git存储库

将缺少历史记录的git存储库合并到保留历史记录的存储库 < > 下载的C++程序的源代码,而不是克隆> 其Git存储库,git,github,version-control,merge,pull-request,Git,Github,Version Control,Merge,Pull Request,使用此源代码(没有git历史记录),我创建了一个git repo,编写了一段时间的代码,并将所有的工作/分支推送到我的github上 我现在想发出一个请求,将我的代码合并到calatk.git上的原始git存储库中 我想知道如何才能做到这一点,因为我的存储库中没有以前提交的跟踪。calatk.org上的此存储库此后不应更新,这意味着他们的最后一次提交与我在github上的第一次提交相同。如果您不介意将发布的github存储库替换为包含原始项目历史的存储库†,我将尝试以下操作: 将上游存储库添加为

使用此源代码(没有git历史记录),我创建了一个git repo,编写了一段时间的代码,并将所有的工作/分支推送到我的github上

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


我想知道如何才能做到这一点,因为我的存储库中没有以前提交的跟踪。calatk.org上的此存储库此后不应更新,这意味着他们的最后一次提交与我在github上的第一次提交相同。

如果您不介意将发布的github存储库替换为包含原始项目历史的存储库†,我将尝试以下操作:

  • 将上游存储库添加为第二个远程存储库:

    git remote add upstream <clone-url>
    
    这将生成新的分支指针,包括
    上游/master
    <代码>上游/master不应与现有提交共享历史记录。也就是说,您将有两个根提交:一个来自上游项目,另一个来自您的fork

  • 将您的工作重定为上游提交(假设我们只需要担心
    master
    ):

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

    您可以使用类似于git show 3cee904的东西来确保提交是正确的

  • 强制将新历史推送到GitHub:

    git push --force origin master
    
  • 根据上游存储库的贡献准则将您的更改提交到上游存储库

    因为它不在GitHub或BitBucket上,所以它们不可能接受拉取请求(这是一项专有功能)。不过,您应该能够请求推送访问或使用git格式修补程序。上游维护人员还可以
    从您的公共GitHub存储库中获取


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

    “这意味着他们的最后一次提交将与我在GitHub上的第一次提交相同”,只是他们的哈希值不同,所以就Git而言,他们根本不一样。
    git checkout master
    git rebase upstream/master
    
    git push --force origin master