我遇到一个特殊问题,我正在处理需要解析为提交而进行的 NOT 更改的位置。
如果你git status --porcelain
,你可以得到这样的输出:
M change1
M change2
MM change3
M change4
M change5
更改1和2分阶段,更改3到5不分阶段。 MM
意味着我尚未看到的其他内容。
我可以解析这个输出,但我想知道是否有更好的方法来显示" 未提交提交的更改" git status
的类别。
答案 0 :(得分:3)
您可以使用git diff --name-only
或git ls-files . -m
获取哪些跟踪的文件具有非暂停更改。
您可以使用git ls-files . --exclude-standard --others
获取未跟踪但未被忽略的文件。 (From this answer)。
将它们放在一起以获取所有未被忽略且未跟踪或未分级更改的文件。
git ls-files . --exclude-standard --others -m
答案 1 :(得分:1)
MM
状态表示暂时有一些变化,有些变化没有上演。
更确切地说,这意味着该路径的索引版本与HEAD
版本不同 - 这是第一个M
- 并且该路径的工作树版本与索引版本不同
例如,假设您有自述文件并进行更改:
$ echo stuff >> README; git add README; git status --porcelain
M README
现在您对同一个文件进行第二次更改。为了使其特别有趣,请删除添加的stuff
行:
$ ed README << 'end'
$d
w
q
end
2634
2628
$ git status --porcelain
MM README
现在,如果我们git add
该文件,则会分阶段工作树版本与HEAD
版本相同,并且:
$ git add README
$ git status --porcelain
$
我可以解析这个输出,但我想知道是否有更好的方法来显示&#34;更改没有为提交而进行的更改&#34; &#39; git status&#39;。
您需要决定如何处理此状态下的文件,以及是否存在未合并状态的可能性 - 如果可能存在尚未解决冲突合并的文件,则这些是未合并的文件 - 如何操作对他们来说也是如此。
通常,如果您想要 diff ,请使用git diff
。 diff
有许多子类型:您可以将树(例如HEAD
的树)与索引或工作树进行比较,或者将两棵树相互比较。有关详细信息,请参阅the documentation,但简而言之git diff
将索引与工作树进行比较,因此对应于状态输出的第二列。
要让diff仅发出文件名,请使用--name-only
。因此,git diff --name-only
会为您提供可以阶段所做的更改。 (这对未跟踪的文件没有帮助;有关使用git ls-files
的信息,请参阅Schwern's answer。)