微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

由于主/主更改,如何更新GitHub镜像? 术语说明假设您还没有克隆的指令假设您做具有本地克隆的指令您现在可能想要使用GitHub的Web界面来更改派生中的主要分支名称更新叉子

如何解决由于主/主更改,如何更新GitHub镜像? 术语说明假设您还没有克隆的指令假设您做具有本地克隆的指令您现在可能想要使用GitHub的Web界面来更改派生中的主要分支名称更新叉子

几年前,我镜像了一个GitHub项目。该项目参与了“主”到“主”分支的重命名我有一段时间没有碰过叉子了,叉子中有一个分支,还有叉子的本地副本。但是当源项目使用“ master”时,我的fork和special分支就是基于此的!如何将fork转换为使用“ main”,包括同步到源的“ main”?

解决方法

如果来源仍然相同,则可以重命名本地分支,以继续使用Github上的版本。

  1. 确保您在master分支中

git checkout master

  1. 重命名分支

git branch -m main

然后,您将可以继续使用以前的工作,但是可以使用main分支而不是master

,

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

包括同步到来源的“主”吗?

我们将把它留到最后。

术语说明

GitHub上的“ fork”本质上是具有某些额外功能的克隆。从这里开始,我将使用术语“ fork”来指代GitHub克隆,而使用术语“ clone”或“您的克隆”来指代本地的。

假设您还没有克隆的指令

(这些说明适用于其他人:您提到您已经有本地克隆。)

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

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,以便您的新克隆还没有 no 个分支。您拥有所有的 commits 没有分支

输入您刚刚创建的克隆:

cd repo

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

git push origin origin/master:main

您的GitHub分支现在为同一提交具有两个不同的名称:mastermain。现在,您可以通过Web界面或通过命令行删除GitHub fork的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来完成,因为这要短一些: / p>

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设置。

(所有这些都是可选的,它们只会使一些非致命性但奇怪的错误情况消失。)

更新叉子

现在该更新您自己的fork了。这是困难的部分,因为:

我已经有一段时间没有碰过叉子了,但是叉子上有一个分支……

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

您需要一个位于派生上游的派生名称-创建GitHub派生时使用的GitHub克隆。其标准名称为upstream。 (我认为这个名称有点令人困惑,因为每个分支也可以有一个上游集,谈论分支X的上游设置以及谈论远程命名上游的内容有点奇怪,但是让我们开始吧现在。)

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

git remote add upstream <url>

其中 url 是他们的fork的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操作之前,为您的旧分支提示提交 创建新的分支名称,以保存原始的一组提交:

git checkout xyzzy
git branch xyzzy.0
git rebase main

完成基准库后,您将拥有xyzzy.0(您的原始提交与以前一样)和xyzzy(新的和经过改进的提交副本)。如果在调整基准期间出现问题,现在回头查看原始提交相对容易。

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

git push -f origin branch

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。