ChatGPT解决这个技术问题 Extra ChatGPT

GitHub 上的 origin 和 upstream 有什么区别?

GitHub 上的 originupstream 有什么区别?

执行 git branch -a 命令时,它显示的某些分支具有前缀 origin (remotes/origin/..),而其他分支具有前缀 upstream (remotes/upstream/..)。


V
VonC

这应该在 GitHub forks 的上下文中理解(您在 GitHub 上创建一个 GitHub 存储库,然后在本地克隆该分支)。

上游通常是指您分叉的原始存储库(有关上游术语的更多信息,另请参见“下游”和“上游”的定义)

origin 是你的 fork:你自己在 GitHub 上的 repo,克隆 GitHub 的原始 repo

从 GitHub 页面:

当一个 repo 被克隆时,它有一个名为 origin 的默认远程指向你在 GitHub 上的 fork,而不是它被 fork 的原始 repo。要跟踪原始仓库,您需要添加另一个名为 upstream 的远程

git remote add upstream https://github.com/<aUser>/<aRepo.git>

(带有 aUser/aRepo 的原始创建者和存储库的参考,您已分叉)

注意:since Sept. 2021,GitHub 不再支持端口 9418 上的未经身份验证的 git 协议 (git://...)。

您将使用 upstream从原始存储库中获取(以使您的本地副本与您想要贡献的项目保持同步)。

git fetch upstream

(默认情况下,单独的 git fetch 将从 origin 获取,这不是这里需要的)

您将使用 origin拉取和推送,因为您可以为自己的存储库做出贡献。

git pull
git push

(同样,没有参数,默认使用'origin')

您将通过创建 pull request 回馈 upstream 存储库。

https://i.stack.imgur.com/cEJjT.png


它还有助于了解 upstream 通常是什么:stackoverflow.com/questions/2739376/…
@MaxRydahlAndersen 是的,但我喜欢使用没有包装器的 Git,所以我现在将保留该约定(上游与起源)。
到目前为止,我所见过的关于分叉如何工作的最佳解释。你得到我的支持。
视觉上的伟大工作。非常直接且易于理解的答案。这正是我想要的。
@iamrudra 如果 git remote -v 为源站和上游显示相同的 url,那么是的,您正在推送到同一个远程仓库。
T
TUSqasi

一言以蔽之。

产地:叉子

上游:分叉的


J
Jude Ukana

克隆一个分叉后,您必须显式添加一个远程上游,使用 git add remote “您从分叉的原始仓库”。这成为您的上游,您主要从上游获取和合并。任何其他业务,例如从本地推送到上游,都应该使用拉取请求来完成。


不能从本地做拉取请求,本地首先必须上传到存储库/远程..
N/B - 我在上面的评论中提到的拉取请求意味着从你的 git 上的分叉版本对原始仓库做出贡献(在这种情况下是你本地的上游)
我在 github 上创建了一个 repo,将其克隆到我的本地,然后创建了一个分支(本地),对代码进行了一些更改,当我尝试从新创建的分支推送到远程时,它说 fatal: The current branch branchName has no upstream branch. push the current branch and set the remote as upstream, like - git push --set-upstream origin branchName .这里没有与 fork 相关的内容,那么这里的 upstream 是什么?任何人都可以帮忙吗?
你试过 - “git push -u origin ”吗?
@Md.HabiburRahman 如果您创建了一个新的本地分支,请搜索将推送您新创建的分支以及同时创建一个新的远程分支的 git 语法。还要回答您对上游的评论,在这种情况下没有上游,因为您没有分叉回购。