为什么git checkout会为某些未更改的文件打印“ M”?

时间:2019-02-10 04:23:49

标签: git

这只是发生了:

[
    2019-02-09 12:00:00 +0000 to 2019-02-09 13:00:00 +0000,
    2019-02-09 14:00:00 +0000 to 2019-02-09 16:00:00 +0000,
    2019-02-09 17:00:00 +0000 to 2019-02-09 18:00:00 +0000
] 

我的理解是,$ git branch * master ...lots of other branches... $ git checkout -tb feat/bandwidthprelude M MANIFEST.in M lint.sh M setup.py M ...some other source files... Branch 'feat/bandwidthprelude' set up to track local branch 'master'. Switched to a new branch 'feat/bandwidthprelude' $ git status On branch feat/bandwidthprelude Your branch is up to date with 'master'. Untracked files: (use "git add <file>..." to include in what will be committed) ...[redacted]... nothing added to commit but untracked files present (use "git add" to track) 在切换分支时将在文件进行本地修改时打印git checkout。但是在这种情况下,根据M(和我的记忆),文件没有本地修改,尽管它们是我最近编辑并提交的文件。我确认我所做的最后编辑没有丢失。 发生了什么事?

如果我重复在master和git status上,则不会发生同一件事。

1 个答案:

答案 0 :(得分:1)

这似乎是由文件元数据更改触发的误报(修改是真实的,但不是Git跟踪的信息)。

特别是,我做的不寻常的事情是意外关闭了我的编辑器(在macOS上为TextMate),这导致它编写了一些信息来打开文件的元数据,从而更新了它们的修改时间。然后,随后的git checkout -tb <branchname>(但出于某种原因而不是git checkout -b切换到现有分支的git checkout)将产生伪造的M行。

如果我只是touchgit checkout -b个文件,就会发生完全相同的事情。

所以,只是一个很小但几乎无害的git bug。