显示未在git中提交的更改

Geu*_*uis 3 git

我有一个特别的问题是我的工作,我需要解析这些变化连续上演提交。

如果这样做,git status --porcelain您将获得如下输出:

M  change1
M  change2
MM change3
 M change4
 M change5
Run Code Online (Sandbox Code Playgroud)

更改1和2已上演,更改3到5没有上演。MM表示我还没看过的东西。

我可以解析此输出,但是我想知道是否有更好的方法来仅在“的更改未针对提交进行更改 ”类别中显示文件git status

Sch*_*ern 6

您可以使用或来获取哪些跟踪文件具有未暂存的更改。git diff --name-onlygit ls-files . -m

您可以使用来获取未跟踪但未被忽略的文件git ls-files . --exclude-standard --others。(从这个答案)。

将它们放在一起,以获取所有不会被忽略且未跟踪或具有未暂存更改的文件。

git ls-files . --exclude-standard --others -m
Run Code Online (Sandbox Code Playgroud)


tor*_*rek 2

状态MM意味着有些变化已上演,有些变化尚未上演。

\n\n

更准确地说,这意味着该路径的索引版本与版本HEAD\xe2\x80\x94(这是第一个M\xe2\x80\x94)不同,并且该路径的工作树版本与索引版本不同。

\n\n

例如,假设您有一个自述文件并进行了更改:

\n\n
$ echo stuff >> README; git add README; git status --porcelain\nM  README\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在您对同一文件进行第二次更改。为了使它特别有趣,让我们删除添加的stuff行:

\n\n
$ ed README << \'end\'\n$d\nw\nq\nend\n2634\n2628\n$ git status --porcelain\nMM README\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,如果我们的git add文件,这会暂存与版本相同的工作树版本HEAD,并且:

\n\n
$ git add README\n$ git status --porcelain\n$ \n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

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

\n
\n\n

您需要决定如何处理处于此状态的文件,如果可能存在未合并状态\xe2\x80\x94,如果可能存在尚未解决冲突合并的文件,则这些是未合并文件\xe2\ x80\x94也该为他们做什么。

\n\n

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

\n\n

要使 diff 仅发出文件名,请使用--name-only. 所以git diff --name-only会给你带来可以上演的改变。(这对未跟踪的文件没有帮助;请参阅Schwern 的答案来使用git ls-files它。)

\n