Git提示当前分支无跟踪信息却显示已更新,原因是什么?
疑问:Git提示当前分支缺少跟踪信息时,它是如何得知该分支已处于最新状态的?
执行命令 git pull -v --rebase=merges 后,输出如下:
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
从输出里能看到,Git显示本地分支PLTFM-541_POSTGRES_PASSWORD_is_leaked和远程分支origin/PLTFM-541_POSTGRES_PASSWORD_is_leaked是[up to date]状态,但紧接着又提示当前分支没有设置跟踪信息,这看起来有点矛盾,原因其实是Git的两个独立逻辑在运作:
判断分支是否同步的逻辑:
执行git pull时,Git会先和远程仓库通信,同步所有远程分支的最新引用(也就是更新本地的origin/*这类远程跟踪分支)。这时候它会自动把本地分支和同名的远程分支做提交哈希对比——只要两者的哈希完全一致,就会标记为[up to date]。这一步完全依赖分支名称的匹配,不需要分支预先设置跟踪关系。跟踪信息的作用:
分支的跟踪信息(即上游分支设置)是用来告诉Git:当你不带参数执行git pull、git push这类命令时,默认要和哪个远程分支交互。如果没有设置跟踪信息,Git就不知道你默认要拉取哪个远程分支的内容,所以即便本地分支和同名远程分支已经完全同步,它还是会提示你指定分支或者设置跟踪关系。
内容的提问来源于stack exchange,提问作者Eugen Konkov
相关产品推荐
相关产品推荐

