显示未在git中提交的更改

问题描述 投票:3回答:2

我有一个特殊的问题,我正在努力解决我没有为提交而进行的更改。

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

M  change1
M  change2
MM change3
 M change4
 M change5

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

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

git
2个回答
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
投票

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
$ 

我可以解析这个输出,但我想知道是否有更好的方法来显示'git status'的“更改未提交提交”中的文件。

您需要决定如何处理此状态下的文件,以及是否存在未合并状态的可能性 - 如果可能存在尚未解决冲突合并的文件,则这些是未合并的文件 - 如何为它们执行操作好。

但是,一般来说,如果你想要一个差异,请使用git diffdiff有许多子风格:您可以将树(例如HEAD的树)与索引或工作树进行比较,或将两棵树相互比较。有关详细信息,请参阅the documentation,但简而言之,git diff将索引与工作树进行比较,因此对应于状态输出的第二列。

要使diff仅发出文件名,请使用--name-only。因此,git diff --name-only将为您提供可以进行的更改。 (这对未跟踪文件没有帮助;请参阅Schwern's answer以获取使用git ls-files。)

© www.soinside.com 2019 - 2024. All rights reserved.