显示未在git中提交的更改

时间:2015-10-29 23:03:04

标签: git

我遇到一个特殊问题,我正在处理需要解析为提交而进行的 NOT 更改的位置。

如果你git status --porcelain,你可以得到这样的输出:

M  change1
M  change2
MM change3
 M change4
 M change5

更改1和2分阶段,更改3到5不分阶段。 MM意味着我尚未看到的其他内容。

我可以解析这个输出,但我想知道是否有更好的方法来显示" 未提交提交的更改" git status的类别。

2 个答案:

答案 0 :(得分:3)

您可以使用git diff --name-onlygit 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 diffdiff有许多子类型:您可以将树(例如HEAD的树)与索引或工作树进行比较,或者将两棵树相互比较。有关详细信息,请参阅the documentation,但简而言之git diff将索引与工作树进行比较,因此对应于状态输出的第二列。

要让diff仅发出文件名,请使用--name-only。因此,git diff --name-only会为您提供可以阶段所做的更改。 (这对未跟踪的文件没有帮助;有关使用git ls-files的信息,请参阅Schwern's answer。)