我在使用 Git 时遇到了问题,根据我对 Git 工作原理的了解,这个问题永远不会发生。
我正在尝试 clone
来自 Bitbucket 的存储库,位于干净的目录中。克隆后,项目显示对存储库的未提交更改 - git status
显示几个修改过的文件。这些更改对应于当前仍在等待修订并由另一位开发人员在所述存储库中取消 merge 的 pull 请求。
我从中克隆的 URL 没有任何内容表明它指向任何特定的提交或 pull 请求,并且存储库 HEAD 在 master 中。此外,使用 rm -rf
删除目录甚至切换到完全不同的目录,然后再次克隆会重现该问题。但是,我的同事无法在他们的本地机器上重现该问题。
所有常用措施,如 git reset --hard
或者 stash 更改只会让我回到克隆时的存储库,包括我提到的未提交的更改。
什么可能导致这种奇怪的行为?
最佳答案
一个可能的问题可能是:您的文件系统区分大小写。
在您的系统上:检查您使用的文件系统的设置是否与您同事的相同——他们的主分区是 HFS+ 吗?或 HFS+ 区分大小写?或一些 ext*
格式 ?
在您的存储库中:检查是否存在仅大小写不同的路径(例如: Readme.json
和 README.json
在同一目录中,或 src/testdata/foo.json
和 src/TestData/foo.json
)
您可以在 git status
报告为“已修改”的文件上进行检查。 : 检查 git status
提到的路径上的文件名和目录名是否大小写与您在磁盘上看到的完全相同(在终端中为 ls
,或使用 Finder)。
您可以使用 git ls-tree
查看由 git 存储的提交内容。 :
# view the content of the root of your repo :
git ls-tree --name-only HEAD
# view the content of directory 'src/demo' :
git ls-tree --name-only HEAD:src/demo
# view the complete list of files under a directory :
git ls-tree -r --name-only HEAD
git ls-tree -r --name-only HEAD:src/demo
HEAD
表示“当前提交”,您可以将其替换为任何内容(提交哈希、分支或标签名称、 HEAD~4
、 stash@{2}
... )这是一个简单的帖子,给出了由于文件系统区分大小写而可能发生的情况的说明性示例:
https://www.hanselman.com/blog/git-is-casesensitive-and-your-filesystem-may-not-be-weird-folder-merging-on-windows
关于git - Git 是否为克隆带来了未提交的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55811151/