克隆存储库并结帐分支

时间:2020-03-26 12:58:06

标签: git github

我在本地克隆了一个私有存储库,该存储库具有3个分支-master,dev和staging。克隆后,我在master分支中。当我列出分支机构时:

git branch -a

我看到所有分支。当我跑步时:

git checkout dev

什么也没发生,我仍然在master分支中。我试图拉扯并取得其他分支没有运气。我不知道如何切换到其他任何分支。

3 个答案:

答案 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 switchgit 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” 它正在获取所有分支,并签出到我们指定的分支。