由于主/主更改,我如何更新我的GitHub镜像? [英] How do I update my GitHub mirror due to the master/main change?

查看:11
本文介绍了由于主/主更改,我如何更新我的GitHub镜像?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我模仿了几年前GitHub的一个项目。本项目参与了主分店的更名仪式。我有一段时间没碰我的叉子了,我的叉子上有一根树枝,还有一把本地的叉子。但我的叉子和特殊分支是在源项目使用主分支时创建的!如何将分叉转换为使用";Main,&q;包括同步到源的&Quot;Main&Quot;?

推荐答案

分支名称在Git中没有实际意义,可以随时更改。因此,尽管这只是简单的部分,但部分工作是只输入您自己的克隆,并将它们的master重命名为main

包括同步到源的&Quot;Main&Quot;?

我们将把它留到最后。

术语说明

GitHub上的A&fork";本质上是带有一些额外功能的克隆。从现在开始,我将使用术语&fork";来指代GitHub克隆,并使用术语&克隆&或您的克隆&来指代本地克隆。

假定您还没有克隆的说明

(以下是针对其他人的说明:您提到您已经有一个本地克隆。)

GitHub不提供直接重命名分支的方法,因此如果要重命名分支中的分支,必须首先在本地将其克隆到您自己的计算机上:

git clone --no-checkout <url>

(其中urlssh://git@github.com/name/repo.gitgit@github.com:name/repo.githttps://github.com/name/repo.git之一)在您自己的计算机上创建本地克隆。对于这台机器,您需要安装Git。注意:我们使用--no-checkout,因此您的新克隆还没有分支。您拥有所有提交无分支

输入您刚刚创建的克隆:

cd repo
例如

。您的克隆将有一个远程跟踪名称origin/master,您可以使用该名称在您的GitHub克隆中创建新名称:

git push origin origin/master:main
您的GitHub分支现在对同一提交有两个不同的名称:mastermain。现在,您可以通过Web界面或命令行删除GitHub分支的master

git push origin --delete master

由于我们使用--no-checkout创建了此克隆,现在我们只需运行:

git checkout main

在本地创建分支机构名称main,并将origin/main设置为其上游。

假定您确实具有本地克隆

的说明 您的本地克隆可能已经有master。让我们确保您的叉子是最新的:

cd my-local-clone
git fetch origin                  # if needed
git checkout master               # if needed
git rebase origin/master          # if needed
git branch -m master main

现在我们只需要在GitHub上创建名称main,与上面的示例相同-但我们将使用本地main来完成该操作,因为这会稍微短一些:

git push -u origin main && git push origin --delete master

我们可以使用-u选项将我们的本地main更新为引用origin/main,这将完成除删除分叉中的名称master以外的所有操作(请参阅上面的脚注1),因此我们使用单独的步骤完成此操作。

现在,您可能希望使用GitHub的Web界面更改分支中的主分支名称

我不确定GitHub是否有什么智能功能可以在您删除名称master时自动执行此操作。我的猜测是它们没有。(我还没有尝试过我的任何分支。)This web page also implies that they don't.您需要进入设置页面并选择main作为默认分支。

完成此操作后,使用git remote set-head更新本地克隆不失为一个好主意:

git remote set-head origin --auto

这将使您的origin/HEAD反映新的origin/main设置。

(所有这些都是可选的,它们只是让一些非致命但奇怪的错误案例消失了。)

更新叉子

现在是更新您自己的分支的时候了。这是最难的部分,因为:

我有一段时间没碰过叉子了,叉子里有根树枝……

您必须在此处准确决定要更新的内容以及更新方式。需要记住的关键是,Git不关心分支机构名称。它只关心提交。使用git log --graph或某个提交图查看器来查看提交及其相互之间的关系。

您需要为您的fork上游的fork命名-您在制作giHub fork时使用的GitHub克隆。它的标准名称是upstream。(我认为这个名称有点令人困惑,因为每个分支也可以有一个上游集,而且谈论分支X的上游设置以及名为upstream的远程服务器上的内容有点奇怪,但我们现在就用它来说明一下。)

您可能已经有了一个名称。使用git remotegit remote -v查看您现有的远程名称。假设您只有origin并打算添加upstream,则使用git remote add创建upstream

git remote add upstream <url>

其中url是其分支的GitHub URL。然后运行:

git fetch upstream

从它们获取任何新的提交,并在克隆中创建您自己的upstream/main和其他远程跟踪名称。

您现在可以合并、快进、更改基准或以其他方式更新您的main。如果您还不是一个人main

git checkout main    # or git switch main
现在运行git merge --ff-only upstream/maingit rebase upstream/main,或者您可能想在这里执行的任何操作。如果您想丢弃您拥有的任何main(旧的master)提交--可能没有任何这样的提交,在这种情况下,合并或重新基址都将执行与此相同的操作--您可以使用:

git reset --hard upstream/main
无论您使用其中的哪一个,您自己的本地main名称现在都标识与您的upstream/main相同的提交:上游分支使用其名称main标识的相同提交。现在您可以更新您的GitHub分支:

git push origin main    # add --force if needed and desired

如果要在此过程中丢弃某些提交,则只需要--force选项。

然后,您必须对您自己的分支机构做出相同类型的决定。你想保留任何你有但他们没有的承诺吗?他们有没有这个名字的分支机构,如果有,它与你的这个名称的分支机构有关系吗?(每个存储库都有自己的分支名称,并且不要求以相同的方式使用它们。)

假设它们没有丢弃任何提交-如果它们丢弃了,您的Git现在会认为这些提交是您的提交,并尝试将它们用作分支的一部分-您现在可以根据自己的main

重新设置分支的基础,无论分支的名称是什么
git checkout xyzzy
git rebase main

如果他们丢弃了一些提交,您可能需要git rebase --onto以便将这些提交排除在您的更新之外;请参阅其他StackOverflow问题以了解如何做到这一点。

复制提交时可能会出现合并冲突,具体取决于它们更改代码的程度。如果是这样的话,你将不得不解决它们。如果有很多较大的冲突,我建议您在开始REBASE操作之前为旧的分支提示COMMIT创建一个新的分支名称来保存原始提交集:

git checkout xyzzy
git branch xyzzy.0
git rebase main
完成rebase后,您将拥有xyzzy.0(原始提交与以前显示的一样)和xyzzy(新的和改进的提交副本)。如果在重新建立基地的过程中出了问题,现在可以相对容易地回去查看您最初的提交。

无论哪种方式,您现在都可以使用:

git push -f origin branch
要将新提交发送到您的GitHub fork并使您的GitHub fork Git存储库使用名称branch来标识来自rebase的新提交和改进的提交。是否也在您的分支上创建名称branch.0,以保留对原始提交的访问权限,这由您自己决定。

这篇关于由于主/主更改,我如何更新我的GitHub镜像?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆