我很好奇如果
git
抱怨该分支缺乏跟踪信息,它如何知道该分支是最新的?
git pull -v --rebase=merges
POST git-upload-pack (155 bytes)
From https://github.com/org/repo
= [up to date] PLTFM-541_POSTGRES_PASSWORD_is_leaked -> origin/PLTFM-541_POSTGRES_PASSWORD_is_leaked
There is no tracking information for the current branch.
Please specify which branch you want to rebase against.
See git-pull(1) for details.
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=<remote>/<branch> PLTFM-541_POSTGRES_PASSWORD_is_leaked
从上面的输出中我们可以看到我的分支已绑定到原始存储库:
PLTFM-541_POSTGRES_PASSWORD_is_leaked -> origin/PLTFM-541_POSTGRES_PASSWORD_is_leaked
但是从下面的下一条消息中我们看到事实并非如此:
If you wish to set tracking information for this branch you can do so with
我很好奇如果 git 抱怨的话,它如何知道分支是最新的 关于缺乏该分行的跟踪信息?
它没有 - 正如你正确写的那样。您误解了 git 的输出。
从上面的输出中我们可以看到我的分支已绑定到原始存储库:
PLTFM-541_POSTGRES_PASSWORD_is_leaked -> 原点/PLTFM-541_POSTGRES_PASSWORD_is_leaked
不,这是一个误会。完整的输出是:
= [最新] PLTFM-541_POSTGRES_PASSWORD_is_leaked -> origin/PLTFM-541_POSTGRES_PASSWORD_is_leaked
仅打印此输出,因为您使用了
git pull -v
- 如果没有 -v
,则不会打印该输出。此输出只是告诉您:
这并没有说明您的 local 分支“PLTFM-541_POSTGRES_PASSWORD_is_leaked”,即使此本地分支与远程分支具有相同的名称。
要理解的关键是:
Git 有本地分支和远程跟踪分支。两个分支实际上都存储在您的本地存储库中(因此从某种意义上来说都是本地的),但它们仍然不同。
但是,您可以通过将远程跟踪分支设置为本地分支的所谓“上游分支”或“跟踪分支”,将本地分支“链接”到远程跟踪分支。这就是命令
git branch --set-upstream-to=...
的作用,以及克隆存储库时“master”分支默认发生的情况。
您可以在例如的输出中看到此“跟踪信息” “git分支-vv”:
$ git branch -vv
feature/do-stuff b234657 [origin/feature/do-some-stuff] fix issues
* master 44ea3fa [origin/master] implement stuff
mylocalbranch 54ad3ea do local stuff
在这里,您有三个本地分支:“feature/do-stuff”、“master”、“mylocalbranch”。前两个有远程跟踪分支作为其跟踪/上游分支(在尖括号中显示),第三个没有上游分支(就像您的情况一样)。
欲了解更多解释,请参见Git 书籍,章节 3.5 Git 分支 - 远程分支