我已下载 C ++项目的源代码,而不是克隆在git://www.calatk.org/calatk.git
的git存储库使用这个源代码(没有git历史记录),我创建了一个git repo,在代码上工作了一段时间,并将我的所有工作/分支推送到我的github https://github.com/agirault/CalaTK
我现在想在calatk.git上发出拉取请求将我的代码合并到原始git存储库。
我想知道如何才能做到这一点,因为我没有从我的存储库中的先前提交中获得跟踪。此后calatk.org上的这个存储库不应该更新,这意味着他们的最后一次提交将与我在github上提供的第一次提交相同。
答案 0 :(得分:1)
假设您不介意将已发布的GitHub存储库替换为包含原始项目历史†的存储库,以下是我要尝试的内容:
将上游存储库添加为第二个远程:
git remote add upstream <clone-url>
从上游获取:
git fetch upstream
这应该生成新的分支指针,包括upstream/master
。 upstream/master
不应与您现有的提交共享历史记录。也就是说,您将有两个root提交:一个来自上游项目,另一个来自您的fork。
将您的工作重新定位到上游提交(假设我们只有master
担心):
git checkout master
git rebase upstream/master
此时您应该只有一个root提交:来自上游项目的提交。您的旧根提交的哈希值现在应该不再是根提交,应与上游项目(3cee904
)中显示的哈希值相匹配。
您可以使用git show 3cee904
之类的内容来确保提交正确。
强制将您的新历史记录推送到GitHub:
git push --force origin master
根据其贡献指南将您的更改提交到上游存储库。
由于它不在GitHub或BitBucket上,因此他们不太可能接受拉取请求(这是一项专有功能)。您应该能够请求推送访问权限或使用git format-patch
。上游维护者也可以从您的公共GitHub存储库fetch
。
†重要提示:如果您在GitHub项目中有合作者,这可能不是最佳选择。通常不鼓励在Git中修改共享提交。我只是推荐它,因为它听起来像你的GitHub存储库实际上是个人存储库。