【发布时间】:2019-06-10 12:03:46
【问题描述】:
我在使用 git 时注意到一个奇怪的行为。
假设我在 this repository 工作,这只是一个具有多个分支的存储库的示例。
我将仅显示命令序列和相关答案,然后简要解释一下我不明白的地方:
>git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
>git branch
* master
>git checkout develop
error: pathspec 'develop' did not match any file(s) known to git.
>git checkout Develop
Switched to a new branch 'Develop'
Branch 'Develop' set up to track remote branch 'Develop' from 'origin'.
>git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
>git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
>git branch
Develop
* master
>git checkout develop
Switched to branch 'develop'
>git branch
Develop
master
>git status
On branch develop
nothing to commit, working tree clean
我基本上签出了一个远程分支,但在名称大小写上犯了一个错误。如果我没有跟踪远程的本地分支(因此,如果我没有与我想用不同大小写结帐的分支相同的分支),它会失败,否则我最终会处于这种状态,我在一个不存在的分支上(它不是一个大写字母,因为 git branch 没有用星号标记它)。这是怎么回事?
编辑:解决重复标志和 cmets:我知道这是分支区分大小写的问题,但事实并非如此。我的问题更具体:为什么第二次错误结帐并没有失败,而是把我带到了这种奇怪的情况?
评论中要求的输出是:
>git branch -av
Develop 4fc788f pdf added3
master 4fc788f pdf added3
remotes/origin/Develop 4fc788f pdf added3
remotes/origin/HEAD -> origin/master
remotes/origin/master 4fc788f pdf added3
>git --version
git version 2.17.1.windows.2
【问题讨论】:
-
您是否在 Windows 上使用 Git(文件名不区分大小写)?
-
是的,它在 Windows 上
-
请显示 git branch -av 的结果
-
在 Windows 上,您甚至可以将
git运行为GIT(全部大写),这不是 Git 问题。同样的情况也发生在 macOS 上。当您将文件系统称为git或GIT或Git时,文件系统会找到(相同的)Git 可执行文件。当git checkout develop正在寻找.git/refs/heads/develop文件时也会发生同样的事情,因为Git 将引用(分支、标签)保存在文件中。本地Develop分支保存在.git/refs/heads/Develop,本地foo/bar分支保存在.git/refs/heads/foo/bar,远程origin/Develop分支保存在.git/refs/remotes/origin/Develop等等。
标签: git