Github:在派生的master上获取fork并对其进行重定位

时间:2019-02-13 16:25:18

标签: git github rebase git-history

我创建了一个项目的分支,并向 our func resizeImage(image: UIImage, targetSize: CGSize) -> UIImage { let size = image.size let widthRatio = targetSize.width / size.width let heightRatio = targetSize.height / size.height var newSize: CGSize if(widthRatio > heightRatio) { newSize = CGSize(width: size.width * heightRatio, height: size.height * heightRatio) } else { newSize = CGSize(width: size.width * widthRatio, height: size.height * widthRatio) } let rect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height) UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0) image.draw(in: rect) let newImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return newImage! } 添加了约40个提交。 在某个时间点,我无意间用强制推送重写了历史,因为我无法“毫无理由地”推送”,有时您只是想看看世界在燃烧。

现在一切都很好,但是在我的仓库中对master的最后100次提交也不再被认为是相同的:我看到“前面有240个提交” 代替“ 40承诺”。

是否可以获取上游主服务器并将其主服务器的提交重新建立基础,然后将其强制推回到主服务器,以便我们和他们的主机与除我的以外的所有先前提交同步?如果是这样,怎么办?请具体说明。

1 个答案:

答案 0 :(得分:1)

我假设您有一个干净的沙箱,其中origin指向您的fork,并且您可以通过其他URL访问上游仓库。我还假设您的沙箱中的origin/mastermaster是同步的。

基于这些假设,这应该可行:

git remote add upstream <upstream_url>
git fetch upstream
git checkout master
git rebase upstream/master

希望rebase可以工作,并且不会引入任何重复的提交。如果没有,它甚至可以突出显示您为什么必须首先强制推动。

在开始重新设置基准之前,git log --graph --decorate --all(或gitk -all或任何其他显示完整图形的可视Git日志替换)可能会告诉您为什么遇到麻烦。

编辑:另一种更保守的方法是使用git cherry-pick。变基解决方案依赖于Git认识到应该共通的历史记录由upstream/master上已经存在的提交组成。但是,您无需标识基础,就可以标识要保留的第一个提交的父级,如果您确实确实要保留40个提交,可以说origin/master~40,然后在upstream/master的末尾添加这些提交:

git remote add upstream <upstream_url>
git fetch upstream
git checkout master
git reset --hard upstream/master
git cherry-pick origin/master~40..origin/master

这为您提供了一个新的master,该地址明确地从upstream/master开始,并仅添加了您想要的新历史记录。

请注意--hard中的git reset --hard upstream/master:正如OP在注释中指出的那样,这是确保您在选择樱桃之前从干净状态开始的必要条件。但首先请确保您没有要保存的所有未提交内容。

健全性检查:在进行选择(或重新设置基准)之后,git diff master origin/master应该什么也不返回,或者再次指出您需要处理的其他问题。 结束编辑

一旦完成变基或选择后,您就完全相信自己要保留的新历史记录:

git push -f origin master

应该使您的分叉恢复到upstream之前只有40次提交。

注意:我没有测试过变基解决方案,但是根据您对情况的描述,我相当有信心它可以工作。但是,我使用成功的解决方案是类似的情况。如果您尝试使用任何一种方法,请报告您的成功或任何需要调整的错误。