来自不同存储库的请求

时间:2016-08-12 13:15:46

标签: github fork

这就是事情 - 我曾经非常愚蠢,不知道叉子和克隆是如何工作的。因此,为了复制别人的repo并对其进行处理,我下载了repo的文件(不使用SC),创建了我自己的新存储库,然后将这些文件提交给它。

现在我想把我的repo的主人请求拉到原始仓库,但我不能,因为它不是叉子。更进一步 - git甚至不知道它们来自同一个源,所以如果我要签出原始仓库,打开一个新的fork,将所有filse从我的私有仓库复制粘贴到新的fork,并提取请求它回来了,它会把它显示为一个巨大的提交,我将失去旧回购的所有提交和评论历史,这将是可怕的。

我是否有办法将请求我的更改请回原始仓库而不会丢失我复制的仓库的所有历史记录?

2 个答案:

答案 0 :(得分:3)

  1. 确保您在本地计算机上有一份更改副本(我将其称为“复制的仓库”)并在GitHub上删除该项目,如果您已创建该项目。
  2. 点击上游项目的GitHub页面上的“Fork”。
  3. 分叉过程完成后,将该存储库克隆到本地计算机(我将其称为“分叉存储库”)。
  4. 将所有已更改的文件从复制的仓库复制到分叉仓库中。
  5. 验证它是否按预期工作,然后使用git statusgit diff查看更改并提交。
  6. 将这些更改推送回GitHub。
  7. 片刻之后,横幅应出现在克隆回购的GitHub页面上,该页面提供了一个按钮,用于打开拉回请求回到上游回购。点击它并打开拉动。

答案 1 :(得分:1)

遗憾的是,没有办法合并两个没有共同祖先提交的分支。即使文件是相同的。

非常 hacky解决方法如下:

  1. 分叉并克隆原始仓库
  2. 在该回购中,签出您最初下载的提交。
  3. 在您的非分叉下载仓库中,结帐到您下载后的第一次提交。
  4. 将这些文件复制到forked repo中
  5. 在forked repo中重新创建提交
  6. 重复步骤3-5,但是每次连续提交。
  7. 完成后,您可以使用新创建的git历史记录打开拉取请求
  8. 这是一个费力的过程,你可能会创建一个工具来完成它,但如果它不是很多提交,或者你不介意将一些提交合并为一个。 (要做到这一点,在第3步中,只是跳过几个提交,之前提交的代码仍然存在)