如何更新 Github 分支,包括上游的新分支?

问题描述 投票:0回答:4

这不是this的重复,也不是我在SO(和外部)上找到的任何其他内容。

我从另一个仓库(我们称之为“上游”)创建了一个 github 分支(假设是“起源”)。时间过去了,我希望上游的起源发生变化。今天,github 有一个漂亮的“获取上游”按钮,可以更新分支 ,当我创建我的原始分支时就已经存在了

,并且单独更新它们。

github docs

列出了据称相当于“获取上游”UI 的命令:
$ git fetch upstream
...
$ git checkout main
...
$ git merge upstream/main

那么“获取上游”UI 不会尝试更新非默认分支?更不用说创造新的了?

通过命令行实现此目的的正确方法是什么? (我将原点和上游设置为遥控器,并做了
fetch --all

有没有一个地方可以让我们与 github 开发者自己讨论这个问题?我找不到合适的仓库(他们有 400+

)。在我看来,这是一个有价值的潜在改进。
git github
4个回答
9
投票

如果您只有一个要同步的新分支并且知道其名称,那么真正简单快捷的方法是在 GitHub 中手动创建分支,然后只需点击“同步分叉”即可完成...

1
投票

正如您在评论中指出的那样:

接受的答案[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 月

0
投票
Newbranch

按钮,为您的分支命名并选择来源上游存储库。 今天早些时候我发现自己遇到了同样的情况:前段时间,我创建了一个分叉,从那时起,一个新分支被添加到上游存储库中。我的叉子里没有分支,想以某种方式添加它。在阅读了 Olivier 的回答后,它说你可以在 GitHub 上创建一个同名的分支,然后单击

Sync fork

,我去尝试 Olivier 描述的步骤,一旦我单击 Newbranch 按钮,我注意到源下拉列表(这可能是最近添加的): GitHub 的新分支窗口

选择了上游存储库和我有兴趣引入我的分支(“9.x”)的分支,为我的新分支使用相同的名称,单击创建新分支,就是这样。您不需要手动同步它,创建分支与上游分支是最新的,GitHub 在“分支主页”(也在分支列表中)告诉您:

GitHub 告诉我该分支与上游分支是最新的

首先,自 2022 年 8 月起,该按钮现在称为“Sync Fork”:


-1
投票

改进了同步 fork 的 UI

我们更新了 Web UI,使分叉与其上游存储库保持同步更加直观。git for-each-ref refs/remotes/upstream

”已重命名为“

Fetch upstream
”,更好地描述了按钮的行为。

如果同步导致冲突,Web UI 会提示用户将更改贡献给上游、放弃更改或解决冲突。

Image of sync fork button -- https://i0.wp.com/user-images.githubusercontent.com/90000203/186034529-e590fa61-481d-4bfd-859f-e0efa7272b4a.png?ssl=1了解有关分支机构的更多信息。

阅读有关使用叉子的更多信息。
那么“获取上游”UI 不会尝试更新非默认分支?更不用说创造新的了?

其次,这是在 GitHub 端针对 GitHub 存储库中当前选择的分支执行的操作。

它适用于该一个分支(无论是默认分支,还是您单击按钮时碰巧浏览的任何其他分支。

在本地复制的正确方法是:

Sync fork

这适用于您正在

工作的任何分支,因为作为最佳实践,在分叉中工作意味着创建您的
自己的

主题分支来隔离您的开发工作。

© www.soinside.com 2019 - 2024. All rights reserved.