git - 为什么 git 将我的分支名称前缀大写?

标签 git

我有一组非常简单的 git 命令,它们会导致一些奇怪的行为:

显示我当前的本地分支,并看到我在 release/beta1 上:

$ git branch
  develop
  master
* release/beta1

release/beta1 创建一个 bugfix/somefeature 分支:

$ git checkout -b bugfix/somefeature
Switched to a new branch 'bugfix/somefeature'

到目前为止还不错吧?好吧,再给我看看本地的分支机构:

$ git branch
  BUGFIX/somefeature

问题:

  • 为什么我的分支的 bugfix 前缀变成了大写的 BUGFIX
  • 相关的,为什么没有用星号标记为我当前的分支?

我在 OS X 10.8.2 上通过 Homebrew 使用 git 版本 1.8.1.5,无论有没有我非常温和的 ~/.gitconfig 都会发生这种情况。似乎每个 bugfix/... 分支都会发生这种情况。

最佳答案

分支以文件的形式存储在.git 目录中。单个分支是一个文件,其中包含分支指向的提交对象的哈希值。

因此,正如您可能猜到的那样,在创建分支 foo/bar 时,这将对应于包含文件的目录。所以 Git 将创建一个文件夹 foo 和一个文件 bar 然后指向提交。

这意味着当您添加另一个分支 foo/baz 时,它将创建一个文件 baz 并将其添加到文件夹中。

现在对于不区分大小写的文件系统,分支名称不区分大小写。这意味着 FOO/barfoo/bar 是相同的。但实际的内部 名称取自原始文件夹和文件名。因此,当您的 bugfix 分支类别的文件夹以大写字母书写时,分支将被识别为大写字母 BUGFIX

要解决此问题,只需进入 .git/refs/heads 并将文件夹名称更改为您喜欢的方式即可。

关于git - 为什么 git 将我的分支名称前缀大写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15371866/

相关文章:

git - stash@{1} 不明确?

python - 如何删除行 [DEBUG] pip.vcs : Registered VCS backend: *** from log file

git - 在 Gitlab 中获取贡献

linux - 在 Windows 机器上 checkout 时,保留某些文件的 unix 行结尾 (LF)

ruby-on-rails - Elastic Beanstalk - Rails - git deploy 和部署钩子(Hook)

php - 在 GitHub 上 stash 公共(public)协作的数据库登录信息的最佳方法是什么?

git - 使用 Git 的常见反模式有哪些?

git - 如何摆脱git中的本地提交?

GitHub:接受 pull 请求,但只有一些提交

gitkraken - 如何比较 2 个分支