Git 中的分支名称没有实际意义,可以随时更改。因此,有些工作(尽管这只是简单的部分)就是输入您自己的克隆并将其重命名master为main.
\n\n包括同步到源的“主”?
\n
我们将其留到最后。
\nGitHub 上的“分叉”本质上是具有一些额外功能的克隆。从这里开始,我将使用术语“fork”来指代 GitHub 克隆,并使用术语“克隆”或“您的克隆”来指代本地克隆。
\n(这些说明适用于其他人:您提到您已经有一个本地克隆。)
\nGitHub 不提供直接重命名分支的方法,因此如果您想重命名分支中的分支,您必须首先将其克隆到本地计算机:
\ngit clone --no-checkout <url>\nRun Code Online (Sandbox Code Playgroud)\n(例如,url其中 是ssh://git@github.com/name/repo.git、git@github.com:name/repo.git或 之一)在您自己的计算机上创建本地克隆。https://github.com/name/repo.git您需要为该机器安装 Git。注意:我们正在使用,--no-checkout以便您的新克隆还没有分支。您拥有所有提交,但没有分支。
输入您刚刚制作的克隆:
\ncd repo\nRun Code Online (Sandbox Code Playgroud)\n例如。您的克隆将有一个远程跟踪名称 ,origin/master您可以使用它在 GitHub 克隆中创建新名称:
git push origin origin/master:main\nRun Code Online (Sandbox Code Playgroud)\n现在,您的 GitHub 分支对于同一提交有两个不同的名称:bothmaster和main. master您现在可以通过 Web 界面或命令行删除 GitHub fork :
git push origin --delete master\nRun Code Online (Sandbox Code Playgroud)\n由于我们使用 创建了这个克隆--no-checkout,所以我们现在可以运行:
git checkout main\nRun Code Online (Sandbox Code Playgroud)\n在本地创建分支名称main,并将origin/mainset 作为其上游。
您的本地克隆可能已经有一个master. 让我们确保它与您的 fork 是最新的:
cd my-local-clone\ngit fetch origin # if needed\ngit checkout master # if needed\ngit rebase origin/master # if needed\ngit branch -m master main\nRun Code Online (Sandbox Code Playgroud)\n现在我们只需要在 GitHub 上创建名称main,与上面的示例相同\xe2\x80\x94,但我们将使用本地名称main来执行此操作,因为它有点短:
git push -u origin main && git push origin --delete master\nRun Code Online (Sandbox Code Playgroud)\n我们可以使用该-u选项来更新本地main引用,这完成了除了删除fork 中的origin/main名称之外的所有操作(请参阅上面的脚注 1),因此我们使用单独的步骤来完成此操作。master
我不确定 GitHub 是否有任何智能功能可以在您删除 name 时自动执行此操作master。我的猜测是他们没有。(我还没有用我的任何叉子尝试过。) 这个网页也暗示他们没有。 您需要进入设置页面并选择main作为默认分支。
git remote set-head完成此操作后,使用它来更新本地克隆并不是一个坏主意:
git remote set-head origin --auto\nRun Code Online (Sandbox Code Playgroud)\n这将使您origin/HEAD反映新的origin/main设置。
(所有这些都是可选的,它们只是让一些非致命但奇怪的错误情况消失。)
\n现在是时候更新你自己的 fork 了。这是最困难的部分,因为:
\n\n\n我有一段时间没碰我的叉子了,我的叉子里有一根树枝......
\n
您必须在此处准确决定要更新的内容以及更新方式。要记住的关键是 Git不关心分支名称。它只关心提交。使用git log --graph或某些提交图查看器来查看提交及其彼此之间的关系。
您需要一个位于 fork\xe2\x80\x94 上游的 fork 名称(您在创建 GitHub 分支时使用的 GitHub 克隆)。其标准名称是upstream. (我认为这个名称有点令人困惑,因为每个分支也可以有一个上游集,并且谈论分支 X 的上游设置并谈论名为上游的远程设备上的内容有点奇怪,但我们现在就这样吧。)
您可能已经有这个名称了。使用git remote或git remote -v查看现有的远程名称。假设您只有并且origin打算添加upstream,使用git remote add创建upstream:
git remote add upstream <url>\nRun Code Online (Sandbox Code Playgroud)\n其中url是他们的 fork 的 GitHub URL。然后运行:
git fetch upstream\nRun Code Online (Sandbox Code Playgroud)\n从他们那里获取任何新的提交,并upstream/main在克隆中创建您自己的名称和其他远程跟踪名称。
您现在可以合并、快进、变基或以其他方式更新您的main. 如果您还没有独自一人main:
git checkout main # or git switch main\nRun Code Online (Sandbox Code Playgroud)\n现在运行git merge --ff-only upstream/main、 或git rebase upstream/main,或者您可能想在这里执行的任何操作。如果你想放弃你拥有的任何main(旧的master)提交,那么它们不\xe2\x80\x94可能没有任何这样的提交,在这种情况下,合并或变基都会做同样的事情,这将\xe2 \x80\x94你可以使用:
git reset --hard upstream/main\nRun Code Online (Sandbox Code Playgroud)\n无论您使用其中哪一个,您自己的本地main名称现在都会标识与您相同的提交upstream/main:上游分支用其名称标识相同的提交main。现在您可以更新您的 GitHub 分支:
git push origin main # add --force if needed and desired\nRun Code Online (Sandbox Code Playgroud)\n--force仅当您在此过程中放弃某些提交时才需要该选项。
然后,您必须对自己的分支机构做出同样的决定。您想保留您拥有而他们没有的任何承诺吗?他们是否有一个具有此名称的分支?如果有,它是否与您的同名分支相关?(每个存储库都有自己的分支名称,并且不要求以相同的方式使用它们。)
\n假设他们没有删除任何提交\xe2\x80\x94如果有的话,你的Git现在会认为这些提交是你的提交,并尝试将它们用作你的分支的一部分\xe2\x80\x94你现在可以自行重新设置分支的基础,无论其名称是什么main:
git checkout xyzzy\ngit rebase main\nRun Code Online (Sandbox Code Playgroud)\n如果他们删除了一些提交,您可能需要git rebase --onto将这些提交排除在更新之外;请参阅其他 StackOverflow 问题以了解如何执行此操作。
复制您的提交时可能会出现合并冲突,具体取决于他们更改了代码的程度。如果是这样,您必须解决它们。如果存在很多大冲突,我建议在开始变基操作之前,通过为旧的分支提示提交创建新的分支名称来保存原始提交集:
\ngit checkout xyzzy\ngit branch xyzzy.0\ngit rebase main\nRun Code Online (Sandbox Code Playgroud)\n完成变基后,您将拥有xyzzy.0(之前出现的原始提交)和xyzzy(新的和改进的提交副本)。如果在变基过程中出现问题,现在可以相对容易地返回并查看原始提交。
无论哪种方式,您现在都可以使用:
\ngit push -f origin branch\nRun Code Online (Sandbox Code Playgroud)\n将新提交发送到您的 GitHub 分支并使您的 GitHub 分支 Git 存储库使用该名称branch来标识来自变基的新的和改进的提交。由您决定是否branch.0也在您的分叉上创建名称,以保留对原始提交的访问权限。
| 归档时间: |
|
| 查看次数: |
2097 次 |
| 最近记录: |