当我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行)
答案 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;:在您进行合并之前不要担心其他情况。