3

我已经从一个仓库克隆了一个,例如: https://github.com/test1/project.git

这是另一个 repo 的克隆,有很多更改(+1000 次提交),然后我在本地项目中添加了 +200 次提交。

现在,我想切换到主仓库。https://github.com/main/project.git

我不想丢失我的更改,但我想从test:project本地项目中删除所有提交并切换到main:project不丢失我自己的提交和更改。

做这个的最好方式是什么?


真实例子:

我从

https://github.com/ElunaLuaEngine/ElunaTrinityWotlk

然后我在本地项目中进行了自己的更改和提交。

现在我想切换到:

https://github.com/TrinityCore/TrinityCore/tree/3.3.5

并保留我的提交并从中删除所有提交ElunaTrinityWotlk,我不想将提交从到合并ElunaTrinityWotlkTrinityCore我只想切换到TrinityCore仅合并我自己的提交。

ElunaTrinityWotlk是 TrinityCore 的一个克隆,用于添加一些新功能...查看 的提交ElunaTrinityWotlk,我不再需要ElunaTrinityWotlk功能想要切换到TrinityCore分支3.3.5,我只需要将我自己的更改与TrinityCore删除的提交合并ElunaTrinityWotlk

在此处输入图像描述

4

2 回答 2

3

你需要做2个分支

  1. 与 Eluna 的分支
  2. 与 TrinityCore 的分支

然后你需要做一个git cherry-pick从 Eluna 到 TrinityCore 的最简单的方法,通过一个按钮,比如gitkraken,在这种情况下,你只需要切换到 TC 分支,然后单击以提交你在 Eluna 分支中的更改并选择cherry-挑选。在控制台情况下,您需要在 TC 分支中使用该命令:

git cherry-pick -x *hash of commit in Eluna branch*
于 2019-08-01T00:18:15.357 回答
1

好的,当你说你想“切换到主仓库”时,我想到了几件事这可能意味着什么。这不是其中之一。

哎呀...这是先进的...

好的,这可能的,但这并不简单。做备份,以防万一你搞砸了,所以你可以再试一次。嗯,它不应该真的是必要的,但是有了这样的东西,安全总比后悔好。

TL; DR:创建另一个从 Trinity 分叉的 GitHub 存储库;在本地,在单个存储库中,从 Eluna 和 Trinity 存储库获取提交;从 Eluna 提交树中挑选你的提交到 Trinity 树;推回三位一体回购。

更详细地说:

如果您在 Windows 上,我建议使用TortoiseGit。这是我选择的武器,它既易于使用又先进。如果您不在 Windows 中,或者您有其他更熟悉的工具,则可以使用它。最终,这也可以在命令行中完成——只是更乏味。

所以,这里有几个步骤。

首先,您自己的 github 存储库是从 Eluna 派生的,所以这不会。创建另一个从 Trinity 分叉的。暂时保留第一个,它将作为备份,以防您搞砸并需要重新开始。

然后,转到所有更改所在的本地计算机上的本地副本。确保将所有更改推送到基于 Eluna 的 github 存储库。这是一项预防措施,这样您就不会失去工作。还要检查是否没有本地修改。为了更加安全,也请清理所有未版本控制的文件。让它看起来像是一个新克隆的 repo,没有任何修改。

或者,只需在不同的文件夹中复制基于 Eluna 的 github 存储库。有一个新的开始。

无论如何,下一步 - 制作一些标签。特别是,标记您自己的最新提交,以免丢失它。

然后 - 带来三位一体。在您的本地存储库中,创建另一个远程并使其指向您基于 Trinity 的 github 存储库。从该远程获取更改。不要拉!获取

现在,您的本地副本将包含来自基于 Eluna 的存储库和基于 Trinity 的存储库的提交混搭,并且每个都有自己的远程。

接下来,从 Trinity 提交创建一个新分支,在其上移动您自己的提交。

现在是困难的部分。您需要做的是挑选您自己的提交,并将它们移动到您的新分支。Cherry 按顺序选择提交,从最旧的开始。在 TortoiseGIT 中,您可以选择多个提交并一次将它们全部挑选出来。

时不时地,您将在其中提取最新的 Eluna 版本并将其合并到您自己的代码中进行合并提交。不要樱桃采摘这些。这只会带来整个 Eluna 项目。只挑选你自己的提交。

很有可能会出现合并冲突,或者您可能编辑了 Eluna 中的一些代码,但 Trinity 中没有。在这种情况下 - 祝你好运!您需要手动弄清楚如何正确挑选该提交。

最后,在几个小时(或几分钟或几天,取决于你在那里做了什么)之后,你将在最新的 Trinity 提交之上挑选出所有提交。呸!

现在检查该项目是否仍然有效。经过这么长时间的樱桃采摘,你很可能错过了一些东西。修复它并提交这些更改。

最后,你有一个基于 Trinity 提交的新分支,它现在还包含你所有精心挑选的提交和其他更改。将其推送到您的 Trinity github 存储库。你完成了!

擦除本地副本并重新克隆基于 Trinity 的 github 存储库以获得全新的状态。

于 2019-07-31T22:11:50.623 回答