我不知道分叉和克隆是如何工作的。因此,为了复制别人的存储库并对其进行处理,我下载了存储库的文件(不使用源代码控制),创建了我自己的新存储库,然后将这些文件提交给它。
我想将我的存储库的主控请求拉到原始存储库,但我不能,因为它不是分叉。此外 - git 甚至不知道它们来自同一源,因此如果我签出原始存储库,打开一个新的分支,将所有文件从我的私人存储库复制粘贴到新的分支,然后将其请求拉回来中,它将显示为一个巨大的提交,并且我将丢失旧存储库上的所有提交和评论历史记录,这将是可怕的。
有没有办法让我将我的更改拉回原始存储库而不丢失我复制的存储库的所有历史记录?
git status
和 git diff
查看更改并提交它们。不幸的是,没有办法合并两个没有共同祖先提交的分支。即使文件相同。
一个非常的黑客解决方法如下:
这是一个费力的过程,您可能可以创建一个工具来完成它,但如果它不是很多提交,或者您不介意将一些提交合并为一个。 (为此,在步骤 3 中,只需跳过几次提交,之前提交的代码仍然存在)
您需要首先通过以下方式将旧存储库 OLD(包含正确的 git 历史记录)连接到新存储库(已断开连接,但包含修改):
git checkout $(git rev-list --max-parents=0 HEAD | tail -n 1)
rsync -avrI . /path/to/NEW
git checkout main && git format-patch -1 $(git rev-list --max-parents=0 HEAD | sed 'x;$!d')
如果 PR 是一次或几次提交,则更简单的方法是从 Github 下载补丁文件:
commits
选项卡github.com/<org>/<repo>/pull/0000/commits/<sha>
.patch
git am < ~/Downloads/<patch>