在做git status -s时,几个文件名前面的空格是什么意思?

时间:2017-06-20 11:06:04

标签: git git-status

当我git status -s时,我得到以下输出:

 M package.json
D  public/ewew.js
 M script.sh
M  src/TaskList.js
 D test.js
AD test2.js

几行开头的空间是什么意思? (第1,第3和第5行)

2 个答案:

答案 0 :(得分:3)

git status -s在文件名前显示两个字母的状态代码,您可以在the documentation中找到解释:

X          Y     Meaning
-------------------------------------------------
          [MD]   not updated
M        [ MD]   updated in index
A        [ MD]   added to index
D         [ M]   deleted from index
R        [ MD]   renamed in index
C        [ MD]   copied in index
[MARC]           index and work tree matches
[ MARC]     M    work tree changed since index
[ MARC]     D    deleted in work tree
-------------------------------------------------
D           D    unmerged, both deleted
A           U    unmerged, added by us
U           D    unmerged, deleted by them
U           A    unmerged, added by them
D           U    unmerged, deleted by us
A           A    unmerged, both added
U           U    unmerged, both modified
-------------------------------------------------
?           ?    untracked
!           !    ignored
-------------------------------------------------

在您的情况下,X是空格,因此适用:

X          Y     Meaning
-------------------------------------------------
          [MD]   not updated

答案 1 :(得分:3)

除了它做的其他事情外,git status还运行两个(不是一个,但两个git diff命令。因此,在向您显示--short-s状态输出时,需要汇总两个差异的结果 - 这就是为什么有两个每个可能的状态字母的位置。

请记住,Git在任何时候都拥有每个文件的三个副本。 1 有一个例子,例如{{1}在package.json提交中,索引中的第二个版本HEAD(也称为暂存区缓存),以及工作树中的第三版package.json

当前提交中的package.json版本永远不能更改,因为任何提交中的文件都不能更改。 (您可以更改哪个提交是当前的,这将通过更改package.json本身来更改文件的HEAD版本:例如,而不是HEAD为HEAD,也许现在HEAD是ac0ffee。但是存储在这些提交中的文件总是永远存储在那些提交中。)

存储在索引中的feeddad版本,但您可以随时更改。你不能很好地看到它,因为它存储在一个内部的,只有Git的形式,但是你可以把它从索引中拿出来看看,或者放点东西只要你喜欢,就可以与索引不同。

存储在工作树中的package.json版本,您可以随时更改。您可以看到并轻松更改它,因为它以您计算机用于任何文件的普通格式存储。

图解地:

package.json

HEAD index work-tree -------- -------- -------- package.json package.json package.json public/ewew.js script.sh script.sh script.sh : : test2.js 命令首先将git status版本与索引版本进行比较,然后将索引版本与工作树版本进行比较。

例如,此HEAD的状态为test2.js:这意味着AD中的缺少,因此{{1} - vs-index,它已被添加,然后它在工作树中再次缺少 ,因此对于index-vs-work-tree,它具有已删除

HEAD的状态是space-M,因此HEAD中的版本和索引匹配(空格),但索引和工作树中的版本不同(script.sh )。 HEAD的状态是M-space,因此M中的版本与索引中的版本不同,索引中的版本与工作树中的版本相同。< / p>

如果您现在要进行提交,那么进入提交的内容是现在索引中的任何内容。要立即查看索引中的所有,请使用src/TaskList.js。但是,通常情况下,HEAD和索引之间的差异,即文件&#34;暂停提交&#34;或者简短状态的第一列 - 更有趣。同样,索引和工作树之间的区别,即你可能提交的文件 - 之间的区别很有意思,这就是为什么有第二列的原因。

1 从技术上讲,Git在任何时候都有最多五个副本的任何一个文件,尽管有时只有一个。这是因为在执行冲突文件合并解析时(即,当您处于冲突合并的中间时)也会使用索引/暂存区域。在这种情况下,它包含一个文件的三个副本:合并基础版本,git ls-files --stage版本和HEAD版本。但对于这个特定的答案,只需将其视为&#34;三个副本&#34;:在您进行合并之前不要担心其他情况。