这不是this的重复,也不是我在SO(和外部)上找到的任何其他内容。
我从另一个仓库(我们称之为“上游”)创建了一个 github 分支(假设是“起源”)。时间过去了,我希望上游的起源发生变化。今天,github 有一个漂亮的“获取上游”按钮,可以更新分支 ,当我创建我的原始分支时就已经存在了
,并且单独更新它们。github docs
列出了据称相当于“获取上游”UI 的命令:$ git fetch upstream
...
$ git checkout main
...
$ git merge upstream/main
那么“获取上游”UI 不会尝试更新非默认分支?更不用说创造新的了?
通过命令行实现此目的的正确方法是什么? (我将原点和上游设置为遥控器,并做了
fetch --all
))。在我看来,这是一个有价值的潜在改进。如果您只有一个要同步的新分支并且知道其名称,那么真正简单快捷的方法是在 GitHub 中手动创建分支,然后只需点击“同步分叉”即可完成...
正如您在评论中指出的那样:
接受的答案[https://stackoverflow.com/q/6865302/1256452]说“fetch不会创建本地分支(跟踪远程分支),你必须手动执行此操作”
这是真的。 但是,无需创建“分支”名称。 你可以运行:
git fetch upstream
在本地(例如在您的笔记本电脑上)您自己的存储库中创建或更新
upstream/*
名称。 然后,对于您希望在 GitHub 分支上创建的每个此类名称,您可以使用
refspec
refs/remotes/upstream/name:refs/heads/name
告诉您自己的笔记本电脑 Git 软件,您希望使用的名称对是此处的 upstream/name
— 这就是git fetch upstream
刚刚创建或更新的远程跟踪名称,以及您的origin
的分支名称
name
。这些组装的参考规范位于
git push origin
或
git push -f origin
之后:git push origin refs/remotes/upstream/foobranch:refs/heads/foobranch
它根据您从调用的 Git 存储库获得的提交在 GitHub 分支 (
foobranch
) 中创建或更新分支
origin
。为自己编写一个小脚本,根据适用于您的任何标准来计算正确的名称集,然后使用该脚本,就完成了。 您可以通过以下方式查看这些名称:upstream
随后:
git fetch upstream
(您需要的不仅仅是这两个命令,但总的来说,在 sh/bash 中编写这样的脚本并不困难)。
TL;DR 在
2024 年 9 月按钮,为您的分支命名并选择来源上游存储库。 今天早些时候我发现自己遇到了同样的情况:前段时间,我创建了一个分叉,从那时起,一个新分支被添加到上游存储库中。我的叉子里没有分支,想以某种方式添加它。在阅读了 Olivier 的回答后,它说你可以在 GitHub 上创建一个同名的分支,然后单击
Sync fork,我去尝试 Olivier 描述的步骤,一旦我单击 Newbranch 按钮,我注意到源下拉列表(这可能是最近添加的): GitHub 的新分支窗口
选择了上游存储库和我有兴趣引入我的分支(“9.x”)的分支,为我的新分支使用相同的名称,单击创建新分支,就是这样。您不需要手动同步它,创建分支与上游分支是最新的,GitHub 在“分支主页”(也在分支列表中)告诉您:
GitHub 告诉我该分支与上游分支是最新的
改进了同步 fork 的 UI
我们更新了 Web UI,使分叉与其上游存储库保持同步更加直观。 “
”已重命名为“git for-each-ref refs/remotes/upstream
如果同步导致冲突,Web UI 会提示用户将更改贡献给上游、放弃更改或解决冲突。阅读有关使用叉子的更多信息。
Fetch upstream
”,更好地描述了按钮的行为。那么“获取上游”UI 不会尝试更新非默认分支?更不用说创造新的了?
其次,这是在 GitHub 端针对 GitHub 存储库中当前选择的分支执行的操作。它适用于该一个分支(无论是默认分支,还是您单击按钮时碰巧浏览的任何其他分支。
在本地复制的正确方法是:
Sync fork
这适用于您正在
不工作的任何分支,因为作为最佳实践,在分叉中工作意味着创建您的自己的
主题分支来隔离您的开发工作。