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

时间:2014-06-27 16:00:34

标签: git github version-control merge pull-request

已下载 C ++项目的源代码,而不是克隆git://www.calatk.org/calatk.git

的git存储库

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

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

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

1 个答案:

答案 0 :(得分:1)

假设您不介意将已发布的GitHub存储库替换为包含原始项目历史†的存储库,以下是我要尝试的内容:

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

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

    git fetch upstream
    

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

  3. 将您的工作重新定位到上游提交(假设我们只有master担心):

    git checkout master
    git rebase upstream/master
    

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

    您可以使用git show 3cee904之类的内容来确保提交正确。

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

    git push --force origin master
    
  5. 根据其贡献指南将您的更改提交到上游存储库。

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

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