Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GIT-切换到另一个远程(不丢失提交)_Git_Github_Eluna Lua Engine - Fatal编程技术网

GIT-切换到另一个远程(不丢失提交)

GIT-切换到另一个远程(不丢失提交),git,github,eluna-lua-engine,Git,Github,Eluna Lua Engine,我从回购协议中复制了一个副本,例如: https://github.com/test1/project.git 这是另一个回购协议的克隆,有很多更改(+1000次提交),然后我在本地项目上添加+200次提交 现在,我想切换到主回购https://github.com/main/project.git 我不想丢失我的更改,但我想删除本地项目中test:project的所有提交,并切换到main:project,而不丢失我自己的提交和更改 最好的方法是什么 实例: 我从中复制了一个 然后,我在本

我从回购协议中复制了一个副本,例如:
https://github.com/test1/project.git

这是另一个回购协议的克隆,有很多更改(+1000次提交),然后我在本地项目上添加+200次提交

现在,我想切换到主回购<代码>https://github.com/main/project.git

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

最好的方法是什么


实例:

我从中复制了一个

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

现在我想切换到:

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

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


好的,当你说你想“切换到主回购”时,我脑子里有几件事,那可能意味着什么。这不是其中之一

天哪。。。这是先进的

好的,这是可能的,但不会很简单做好备份以防出错,这样你就可以再试一次。好吧,这应该不是必须的,但有了这样的东西,安全总比后悔好

TL;DR:从Trinity获得另一笔GitHub回购;在本地,在单一回购中,从Eluna和Trinity回购中获取承诺;樱桃从艾露娜承诺树到三位一体树中挑选你的承诺;回到三位一体回购协议

更详细的信息:

如果您使用的是Windows,我建议您使用。这是我选择的武器,它既容易使用又先进。如果您不在Windows中,或者您有另一个更熟悉的工具,您可以使用它。最终,这一切也可以在命令行中完成——这只是更繁琐而已

因此,这里有几个步骤

首先,您自己的github存储库是从Eluna派生出来的,所以这样做不行。创建另一个从Trinity分叉的。把第一个留到现在,它将是一个备份,以防你搞砸了,需要重新开始

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

或者,只需在另一个文件夹中克隆另一个基于Eluna的github存储库。有一个新的开始

无论如何,下一步-做一些标签。特别是,标记您自己的最新提交,这样您就不会丢失它

然后-带上Trinity。在本地repo中,创建另一个远程站点,并将其指向基于Trinity的github repo从远程获取更改。不要拉获取

现在,您的本地副本将有一个来自基于Eluna的存储库和基于Trinity的存储库的提交的mashup,每个提交都有自己的远程提交

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

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

您将不时地进行合并提交,其中您已提取了最新的Eluna版本,并将其合并到您自己的代码中不要用樱桃采摘这些。这将带来整个艾露娜项目。只有樱桃选择你自己的承诺

很可能会有合并冲突,或者您可能已经编辑了一些在Eluna中的代码,但不在Trinity中。那样的话,祝你好运!您需要手动找出如何正确地选择提交

最后,经过几个小时(或几分钟,或几天,取决于您在那里做了什么),您将在最新的Trinity commit上选择所有提交。呸

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

最后,您有了一个基于Trinity提交的新分支,它现在还包含了您所有的cherry-picked提交和其他更改。把它推到你的Trinity github repo。你完了


擦除本地副本并重新克隆基于Trinity的github repo,以获得一个全新的版本。

您需要创建两个分支

  • 艾露娜枝
  • 三位一体的分支
  • 然后你需要做一个从Eluna到TrinityCore的
    git cherry pick
    ,最简单的方法是通过一些GUI,比如一个按钮,在这种情况下,你只需要切换到TC分支,然后点击提交你在Eluna分支中的更改并选择cherry pick。 在控制台中,您需要在TC分支中使用该命令:

    git cherry-pick -x *hash of commit in Eluna branch*
    

    现在检查问题,我想,现在清楚了,谢谢。@Amin.MasterkinG-好的,更新了答案。看看。@Amin.MasterkinG-Hmm,是什么让你更改了复选框?:)两个答案都是正确的