git checkout master 不切换分支 - 存储库坏了?

git checkout master does not switch branch - repository broken?

tl;dr: git checkout master 没有切换到 master 分支,没有给出任何错误或任何输出,我不知道为什么。任何其他分支都可以正常工作。

我有一个 git 存储库,它由分支 developmentmaster 组成。我做了一个新的存储库克隆,默认检查分支 development

$ git clone <REPO-URL> --branch development
$ git branch -a
* development
origin/HEAD -> origin/development
origin/development
origin/master
$ git show-ref 
656c781c2affc26792f857baf8e232de07101535 refs/heads/development
656c781c2affc26792f857baf8e232de07101535 refs/remotes/origin/HEAD
656c781c2affc26792f857baf8e232de07101535 refs/remotes/origin/development
cfee1a1761642453edf5d001565f23b50243ff09 refs/remotes/origin/master

ref master 指向的是正确的,该提交确实存在并且是我的 master 分支的最新提交。

到目前为止一切看起来都很正常,但是当我尝试切换到 master 时发生了这种情况:

$ git checkout master
$ git branch 
* development

没有来自结帐的消息,没有错误,什么都没有,分支没有切换。

到目前为止我尝试过的事情:

还有什么想法吗?我错过了什么?我的存储库坏了吗?我该如何解决这个问题?

您存储库中的本地 master 分支与您存储库中的任何其他本地分支没有区别。您将存储库克隆到开发分支,这是您拥有的唯一本地分支。因此,如果您尝试结帐到本地主分支,git 会说它不存在。

如果您希望 development 和 master 本地分支最初相同,您可以执行以下操作之一:

下载你的repo到master分支,并创建一个本地开发分支:

git clone <repo_url>
git checkout -b development

或者下载你的repo到开发分支,并创建一个本地master分支:

git clone <REPO-URL> --branch development
git checkout -b master

当源代码树中有一个文件夹 master 时,我看到了类似的东西。不幸的是,我没有找到一种方法来告诉 git 将该值解释为一个分支。重命名文件夹解决了我的问题。

如果你的 repo 有一个文件夹或文件名与分支名称相同,那么你将需要:git checkout xyz -- 并在末尾添加额外的 --。它告诉 git 使用分支或提交而不是尝试使用 folder/file 名称。

在另一个 Whosebug 上找到答案 post:Git change branch when file of same name is present

已接受的答案(重命名文件夹)有效。如果您不想这样做,这里有一个我在 git version 2.14.1.windows.1 上测试过的解决方法。

删除有问题的文件夹。

执行git branch <the branch you had trouble switching to>

执行git branch <your original branch>

执行git checkout -- .撤销删除。

现在您可以毫无问题地切换到所需的分支或从所需分支切换,即使在存储库中有一个与分支同名的文件夹也是如此。如果您执行 git branch

,您会注意到该分支出现在分支列表中