我的理解是这两个命令应该向我显示所有远程分支
git branch -a
git branch -r
但是当我执行这两个命令时,我没有看到最近创建的分支。
我可以在 Web 用户界面中看到这个分支。 但当我这样做时不会git branch -a
即使我可以在 Web UI 中看到这个分支。 当我尝试做
git 分支 --set-upstream-to=origin/feature/branch feature/branch it say
error: the requested upstream branch 'origin/feature/branch' does not exist
有趣的是,如果我删除本地目录并再次执行git clone
,则它可以看到新分支。
有谁知道为什么 git 命令行客户端看不到新分支?
Git 只通过非常特定的命令通过网络进行通信。 否则,它将使用任何远程存储库的本地缓存副本。 当您运行git branch -r
时,正在检查的是此本地缓存。 origin/feature/branch
是本地缓存中的"远程跟踪分支"。 因此,您的遥控器的本地副本已经过时了。
要更新,请运行 git fetch [remote-name]
。 这是一个完全安全的操作,不会影响您的本地分支,它只会使您的本地缓存与远程同步。 git pull
也会更新,因为它基本上是一个git fetch
加一个git merge
,但你必须担心合并。
稍微扩展一下@Schwern答案。Git 中几乎每个操作都是本地的。除非被告知它从不检查远程更改。您的本地副本有一个存储在 .git 文件夹中的数据库。当您运行像git branch -a
这样的命令时,它会检查本地数据库而不是远程数据库本身。
这就是为什么每当远程发生更改时,您都需要更新此本地数据库以获取最新更新,git fetch
执行此操作。它只更新您的本地 git 数据库,而不对代码本身进行任何修改。
这种情况经常发生在我身上。为了解决,我只是运行git pull
,所以 git 会意识到新分支。