我在本地克隆了一个私有存储库,该存储库具有3个分支-master,dev和staging。克隆后,我在master分支中。当我列出分支机构时:
git branch -a
我看到所有分支。当我跑步时:
git checkout dev
什么也没发生,我仍然在master分支中。我试图拉扯并取得其他分支没有运气。我不知道如何切换到其他任何分支。
答案 0 :(得分:3)
这是一个猜测,但我已复制了行为:
sh-3.2$ mkdir txx
sh-3.2$ cd txx
sh-3.2$ git init
Initialized empty Git repository in ...
sh-3.2$ echo test branch name thing > README.md
sh-3.2$ git add README.md
sh-3.2$ git commit -m initial
[master (root-commit) 7dc0be2] initial
1 file changed, 1 insertion(+)
create mode 100644 README.md
sh-3.2$ echo this is a file named dev > dev
sh-3.2$ git add dev
sh-3.2$ git commit -m 'add file named dev'
[master ac01ba6] add file named dev
1 file changed, 1 insertion(+)
create mode 100644 dev
sh-3.2$ git remote add origin .
sh-3.2$ git update-ref refs/remotes/origin/master master
sh-3.2$ git update-ref refs/remotes/origin/dev master
sh-3.2$ echo foo >> dev
sh-3.2$ git checkout dev
这里似乎什么都没发生,但实际上发生了什么:dev
文件被破坏性地检出。其内容如下:
sh-3.2$ cat dev
this is a file named dev
这是我们仍然在master
上的确认信息:
sh-3.2$ git status
On branch master
nothing to commit, working tree clean
working tree clean
是销毁更新的dev
的结果,将其替换为git checkout
从索引中提取的副本。
请注意,所有这些都需要稍旧的Git版本:
sh-3.2$ git --version
git version 2.20.1
更现代的一个告诉我们这个问题。在Git 2.24中执行相同的操作会产生:
$ git checkout dev
fatal: 'dev' could be both a local file and a tracking branch.
Please use -- (and optionally --no-guess) to disambiguate
这种情况是git checkout
现在是两个单独的命令git switch
和git restore
的原因。使用git switch
:
$ git switch dev
M dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.
Switched to a new branch 'dev'
做所需的事情。
答案 1 :(得分:-1)
我的猜测是您尚未获取远程分支。默认情况下,git checkout仅获得一个分支。您需要结合使用
git fetch
之后
git checkout开发者
在那之后,您应该看到一条消息
切换到分支“ dev”
您的分支机构的最新信息是“ origin / dev”
答案 2 :(得分:-1)
您可以尝试下面的命令,看看它是否有效 “ git clone --branch url” 它正在获取所有分支,并签出到我们指定的分支。