【发布时间】:2021-06-12 12:10:33
【问题描述】:
这里的 Git 很新。远程分支是什么意思?它们在本地可用(假设没有互联网)?
例如,这里是我所有的分支,我想知道我的本地机器是否具备从我的gh-pages 分支获取信息所需的一切?
$git branch -a
* main
remotes/origin/gh-pages
remotes/origin/main
【问题讨论】:
标签: git git-branch
这里的 Git 很新。远程分支是什么意思?它们在本地可用(假设没有互联网)?
例如,这里是我所有的分支,我想知道我的本地机器是否具备从我的gh-pages 分支获取信息所需的一切?
$git branch -a
* main
remotes/origin/gh-pages
remotes/origin/main
【问题讨论】:
标签: git git-branch
是的,它们在本地可用。
它们是您上次运行 git fetch 或 git pull 时远程服务器上内容的本地副本。
如果你想更新远程视图:运行git fetch。
与git pull不同,git fetch只会更新这些远程分支,不会尝试更新你自己的本地分支。
如果出于某种原因您想查看远程服务器上存在哪些分支而不下载其内容:使用git ls-remote
无论如何,即使您的远程本地视图已过时,git push 也会在更新任何内容之前确保两个视图一致
【讨论】:
fetch 或pull 以来,非常重视。我不止一次地发现自己向同事解释说,不,他们在本地没有那个特定的远程分支。此外,在最基本的示例中,您只有一个遥控器,称为origin,并且在拉动时不更改分支的名称,那么您应该能够找到yourBranch 和origin/yourBranch在存储库中。一个是您的本地副本,另一个代表您从该分支上的远程检索到的最新信息。
在 Git 中大部分时间都需要注意 3 种类型的分支。它们是:
gh-pages 分支。这些分支保存在本地,您可以在其中进行实际工作。remotes/origin/gh-pages。这些也是本地分支,但它们主要作为存在于 Git 存储库(例如 Bitbucket 和 GitHub)上的真正远程分支的代理而存在。每当您执行git fetch 时,都会更新这些(本地)远程跟踪分支gh-pages 分支。当您对分支执行 git push 或完成将此分支作为目标的拉取请求时,您将更新这个真正的远程分支。现在来回答你的问题:
我想知道我的本地机器是否具备从我的 gh-pages 分支获取信息所需的一切?
通常,您只需从 gh-pages 分支输入 git status。您得到的响应将告诉您来自远程跟踪分支的前面/后面有多少次提交。上一句中的关键词是“跟踪”,因为您的本地git status 命令不会将您本地的gh-pages 与远程的内容进行比较。相反,它将与 local 远程跟踪分支进行比较。因此,要获得最准确的状态报告,您应该执行以下步骤:
# from gh-pages
git fetch
gig status
您从上面看到的输出将真正告诉您本地分支的位置,以及可能进入远程分支的任何新工作。
【讨论】:
是的,当您克隆存储库时,您会获得远程存储库的完整副本,其中包含所有分支。因此,本地存储库中的 remote 分支通常也称为 remote-tracking 分支。它们本地存储在您的存储库中,但跟踪远程存储库中的分支(使用git fetch 之类的操作)。
编辑:正如 iBug 在他们的回答中提到的那样,clone 命令有一些标志,它不会创建远程存储库的精确副本,而只会下载其中的一部分,所以如果你使用这些标志,你需要检查)。
【讨论】:
假设您没有在git clone、git pull 或类似命令中添加--depth,那么是的,您的本地存储库包含远程分支的所有内容。
要查看它们,您只需git checkout -b new-branch origin/main。您还可以使用git log origin/main 查看他们指向的提交。
【讨论】: