我在从远程存储库获取一个特定分支时遇到问题。
如果我做 git分支 -a,输出是:
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/release/2.0.23175_BBDDv10
...
没关系,我所有的分支机构都在远程,但只要我这样做
git fetch origin/release/2.0.23175_BBDDv10
我收到:
fatal: 'origin/release/2.0.23175_BBDDv10' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
我是存储库的所有者,我对其拥有权利,如果我这样做:
git remote -v
输出为:
origin https://xxxm@xxx.org/xxxxx/xxxxxxx.git (fetch)
origin https://xxx@xxx.org/xxxxx/xxxxxxx.git (push)
所以"起源"指向它必须去的地方。
在这一点上,我坚持能够获取一个特定的分支(尚未尝试获取 - 所有分支)
要添加一些以防万一的内容:
不确定这可能与它有关,但以防万一,如果它有任何帮助,我可以补充一点,我昨天错误地推送了两个非常大的文件,然后按照"BFG Repo Cleaner"说明(https://rtyley.github.io/bfg-repo-cleaner/)将它们都删除了。它们很容易遵循,我的大不需要的文件从本地和远程/历史记录中消失了。
git fetch
命令接受零个、一个或两个或多个参数:
git fetch
:调用默认遥控器(通常origin
)并获取所有内容git fetchremote
:调用指定的遥控器。 通常您必须在此处使用origin
。git fetchremotebranch1 ... branchN
:调用命名的远程,当它列出其分支时,只选择特定的命名分支。
您正在尝试使用这三种形式中的最后一种,但犯了两个单独的错误:
-
您必须提供远程数据库的名称,在本例中为
origin
。 -
Git中的
origin/*
名称是 Git 重命名其Git 分支名称的结果,因此它们不会与您自己的分支名称冲突。
因此,您想要的是:
git fetch origin release/2.0.23175_BBDDv10
它会调用他们的 Git,询问他们的release/2.0.23175_BBDDv10
分支,并更新您的origin/release/2.0.23175_BBDDv10
名称。
如果您觉得这令人困惑,请放心,这是令人困惑
的关于斜杠去哪里以及何时去的整个事情令人困惑,直到您意识到两件事:
- 第三个词——普通
origin
部分——不是分支名称(master
,release/2.0.23175_BBDDv10
),也不是远程跟踪名称(origin/master
,origin/release/2.0.23175_BBDDv10
)。 这是第三种名字,一个遥远的名字。 master
和release/2.0.23175_BBDDv10
等分支名称是每个存储库专用的,您可以使用git fetch
查看它们的分支名称,但您的git fetch
重命名它们以使您的远程跟踪名称像origin/release/2.0.23175_BBDDv10
.
所以你总是要记得问,当你有一个分支名称时,它是谁的分支名称:你的,还是他们的? 好吧,当你用git push
、git fetch
或git pull
(运行git fetch
)连接两个 Git 时,你只需要记住这一点:
使用
git push
,您将让您的 Git 要求他们的 Git 设置他们的分支名称之一。 你会根据需要向他们发送一些提交,然后你的 Git 会问他们:如果可以的话,请将 ______(分支名称)设置为 ______(提交哈希 ID)。(使用git push --force
将此礼貌请求转换为命令。使用
git fetch
,您将让他们的 Git 查看他们的分支名称,将他们中的任何新提交获取到您自己的 Git 中,然后更新您的远程跟踪(origin/*
)名称。git pull
运行git fetch
,所以它与git fetch
相同。 (git fetch
成功完成后,git pull
运行第二个 Git 命令,通常git merge
。 我通常建议在你真正了解git fetch
和第二个 Git 命令的工作原理之前避免git pull
,因为每个步骤本身都足够混乱,但这是你应该自己做出的个人选择。
旁白
对于大多数 Git 用户来说,这里有一个简单的规则:永远不要使用git fetch --all
。
(它不会破坏任何东西,但这并不意味着人们认为它意味着什么。
(高级 Git 用户的规则是暂时不要使用它。 等等,不,这是优化的规则。 )