为本地分支创建远程跟踪分支,而不与远程通信

时间:2018-05-11 17:51:13

标签: git

我有一个本地分支A。我需要为它创建一个远程跟踪分支origin/A。是否可以在不与远程通信的情况下创建它?

1 个答案:

答案 0 :(得分:2)

是。具体而言,远程跟踪分支名称(如origin/A)实际上是本地实体,git branch --set-upstream-togit checkout --track 使用这个本地实体没有联系另一个Git。

请注意,refs/remotes/名称空间中的名称​​会自动创建或更新,有时会自动销毁git fetchgit push。从名称为origin远程提取或推送时,git fetchgit push将根据以下内容更新相应的远程跟踪名称获取或推送结果。更准确地说,运行git fetch origin将遵循remote.origin.fetch refspec。默认的refspec是+refs/heads/*:refs/remotes/origin/*。如果remote.origin.url中存储的网址中的Git具有origin/A,则会导致当时创建或更新refs/remotes/origin/A

如果您使用--prune选项或设置选择修剪的任何选项 - 我有时会配置fetch.prune = true - 例如 - 那么同样的git fetch origin删除refs/remotes/origin/A的Git上不存在refs/heads/A,则为您自己的origin

假设您不关心这些自动操作,只需要您自己的Git设置自己的Git为分支A设置两部分字段以使其上游为origin/A。该要求是您的本地存储库必须具有名为refs/remotes/origin/A的引用。如果你还没有,那么命令:

git update-ref refs/remotes/origin/A <valid-commit-specifier>

会创建它,而不会在URL上联系Git(因此无论现在该Git上是否有refs/heads/A)。但是,目前还不清楚您希望将其用作有效的提交说明符。理想值是refs/heads/Aorigin下存储的网址上的Git所解决的任何内容,并且要发现这一点,您必须联系该Git。但是,任何有效的提交说明符都可以,如果你不介意git status产生奇怪的前/后计数。