git ls-files --stage 即使在提交后也显示文件

Log*_*Lee 3 git indexing stage

我正在使用 git 命令来显示当前驻留在暂存区域内的所有文件(与索引相同吗?)。

首先,我从索引中删除了所有文件:

$ git rm --cached *
rm 'newfile'
rm 'os-list.txt'
rm 'remote_stuff'
rm 'removethis'
Run Code Online (Sandbox Code Playgroud)

现在我检查索引中的文件:

$ git ls-files --stage
100644 07e6e472cc75fafa944e2a6d4b0f101bc476c060 0       .gitignore
Run Code Online (Sandbox Code Playgroud)

您可以看到只剩下 .gitignore 文件。

然后我们更改newfile的内容。然后我们将 newfile 添加到索引中。

$ git add newfile
Run Code Online (Sandbox Code Playgroud)

检查状态:

$ git status -s
M  newfile
D  os-list.txt
D  remote_stuff
D  removethis
?? os-list.txt
?? remote_stuff
?? removethis
Run Code Online (Sandbox Code Playgroud)

我们可以看到 newfile 现在在索引中。

现在,当我们提交文件时,我们希望暂存区域为空。

$ git commit -m "TEST333"
[master 0adab53] TEST333
 4 files changed, 1 insertion(+), 13 deletions(-)
 delete mode 100644 os-list.txt
 delete mode 100644 remote_stuff
 delete mode 100644 removethis
Run Code Online (Sandbox Code Playgroud)

但即使在提交之后,我们看到 newfile 仍然在暂存区域中:

$ git ls-files --stage
100644 07e6e472cc75fafa944e2a6d4b0f101bc476c060 0       .gitignore
100644 76abab2928bdd7dfe157109666023bb0c5e4c465 0       newfile
Run Code Online (Sandbox Code Playgroud)

但是如果我们检查状态,我们会发现暂存区域中没有任何内容:

$ git status -s
?? os-list.txt
?? remote_stuff
?? removethis
Run Code Online (Sandbox Code Playgroud)

好吧,我想要的是显示暂存区域中所有文件的命令。该命令git ls-files --stage返回我不理解的输出。

谢谢!

tor*_*rek 5

\n

现在,当我们提交文件时,我们希望暂存区域为空。

\n
\n\n

那是你的错误。别指望这个!

\n\n
\n

...如果我们检查状态,我们会发现暂存区域中没有任何内容

\n
\n\n

git status不向您显示索引/暂存区域中的内容。相反,对于每个文件,它会比较索引/暂存区域中的内容与以下内容

\n\n
    \n
  • 里面有什么HEAD:如果不同,则文件“暂存以进行提交”;和
  • \n
  • 工作树中的内容:如果不同,则该文件“未暂存以进行提交”
  • \n
\n\n

\xe2\x80\x94 这就是为什么一个文件可以“暂存以进行提交”不暂存以进行提交”。这只是意味着索引副本(您在 中看到的副本)与其他两个副本git ls-files --stage不同

\n\n

每个文件都有三个活动副本1 当三个都相同时git status什么也不说。当文件F的某些副本不同时,git status告诉您有关文件F的信息的信息。这就是它的全部内容。

\n\n

索引/暂存区域始终保存2您计划(或 Git 计划)放入下一次提交中的内容。这就是为什么你必须在更改工作树副本后更新它:以便 Git 计划放入下一个提交中放入的内容将与工作树副本匹配。

\n\n
\n\n

1从技术上讲,最多三份副本,因为您可能会丢失一份或两份副本。当且仅当索引中存在文件的副本时才会跟踪HEAD文件(即使它位于提交中,也仅当它也在索引中时才会被跟踪)。如果工作树文件存在且不在索引中,则不会对其进行跟踪。(因此,在 后git rm --cached,工作树中和工作树中的文件HEAD将同时被删除和取消跟踪。)

\n\n

2请参阅脚注 1,然后查看冲突的合并情况。在冲突合并期间,索引最多保留每个文件的三个副本:合并基础副本、--ours副本和--theirs副本。如果您添加HEAD副本和工作树副本,这意味着在冲突合并期间,任何一个文件最多有五个活动副本。

\n