Git在已有回购协议的基础上重新确定了复杂历史的基础,几乎从一开始就存在细微的差异(由于签名)。见图纸 情况:

Git在已有回购协议的基础上重新确定了复杂历史的基础,几乎从一开始就存在细微的差异(由于签名)。见图纸 情况:,git,github,rebase,Git,Github,Rebase,1) 我提出了一份“原始”回购协议,并开始与其他人一起研究“分叉”回购协议 2) FastForward ~250次提交,我更改我的github用户名,并获得一封新的无回复电子邮件 3) 我重新设置所有历史记录的基础,在每次提交时替换我的姓名和电子邮件(相信我只是影响了我的提交) 4) 强行推进远程分叉回购,所有其他队友从头开始克隆它,我们继续前进 问题: 当尝试向原始回购提交拉取请求(步骤1)时,我意识到我的重新基础删除了我们从原始回购克隆的提交中所做的所有签名。这导致几乎整个历史都发生了更改

1) 我提出了一份“原始”回购协议,并开始与其他人一起研究“分叉”回购协议

2) FastForward ~250次提交,我更改我的github用户名,并获得一封新的无回复电子邮件

3) 我重新设置所有历史记录的基础,在每次提交时替换我的姓名和电子邮件(相信我只是影响了我的提交)

4) 强行推进远程分叉回购,所有其他队友从头开始克隆它,我们继续前进

问题: 当尝试向原始回购提交拉取请求(步骤1)时,我意识到我的重新基础删除了我们从原始回购克隆的提交中所做的所有签名。这导致几乎整个历史都发生了更改,因为签名是提交散列的一部分。现在我领先500次,落后原版/大师版约250次

预期结果:

我想要达到的目标: 我想在“forked”(提交时间约为250次后)中获取我们工作的整个历史,并在“original”(这次,不更改提交)的基础上对其进行重新设置,以便将其合并到“original”中

在最终版本中,我希望保持历史原样。所有由作者编写的提交、无挤压合并提交等。有没有办法做到这一点

尝试: 1)合并--允许取消相关历史记录

=>导致了一个有效的解决方案,但几乎重复了我希望避免的所有原始提交(没有签名)

2)rebase

=>导致了有效的解决方案,但整个“分叉”历史被撕开并替换为一行提交(所有合并都会丢失,所有不同的轨迹都会丢失)。例如,几乎我所有的队友协作都丢失了,因为git将每个提交都解释为我所做的。他们甚至算不上贡献者

导致了有效的解决方案,但整个“分叉”历史被撕开并替换为一行提交(所有合并都会丢失,所有不同的跟踪都会丢失)

这是因为您已经完成了一个简单的重基

尝试,最好使用最新的Git版本


这将移植提交图的整个拓扑。

谢谢!这就解决了问题。我在ubuntu 18.04上安装了Git2.17(默认情况下是这样的),但该命令不可用。我添加了git的ppa,并将git升级到2.22
sudo-add-apt-repository-ppa:git-core/ppa;sudo-apt更新;sudo apt升级
,我能够it@NahuelArjona做得好。正如我的链接()所示,
git-rebase-rebase-merges
是在git2.18中引入的。但即使是Git2.22也在改进它。
git clone original-url
git remote add new-repo forked-url
git checkout -b new forked/master
git checkout master
git merge new --allow-unrrelated-histories
git clone original-url
git remote add new-repo forked-url
git checkout -b new forked/master
git rebase -i master
git rebase --rebase-merges master