【问题标题】:git ls-files --stage shows files even after committinggit ls-files --stage 即使在提交后也显示文件
【发布时间】:2020-06-24 02:51:52
【问题描述】:

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

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

$ git rm --cached *
rm 'newfile'
rm 'os-list.txt'
rm 'remote_stuff'
rm 'removethis'

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

$ git ls-files --stage
100644 07e6e472cc75fafa944e2a6d4b0f101bc476c060 0       .gitignore

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

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

$ git add newfile

查看状态:

$ git status -s
M  newfile
D  os-list.txt
D  remote_stuff
D  removethis
?? os-list.txt
?? remote_stuff
?? removethis

我们可以看到新文件现在在索引中。

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

$ 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

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

$ git ls-files --stage
100644 07e6e472cc75fafa944e2a6d4b0f101bc476c060 0       .gitignore
100644 76abab2928bdd7dfe157109666023bb0c5e4c465 0       newfile

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

$ git status -s
?? os-list.txt
?? remote_stuff
?? removethis

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

谢谢!

【问题讨论】:

    标签: git indexing stage


    【解决方案1】:

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

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

    ...如果我们检查状态,我们会看到暂存区没有任何东西

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

    • HEAD 提交中的内容:如果不同,则文件“为提交暂存”;和
    • 工作树中的内容:如果不同,则文件“未暂存以进行提交”

    ——这就是为什么一个文件可以“为提交暂存”“不为提交暂存”。这只是意味着 index 副本,即您使用 git ls-files --stage 看到的副本,与 其他两个副本都不同

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

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


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

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

    【讨论】:

      猜你喜欢
      • 2021-06-19
      • 1970-01-01
      • 2020-08-06
      • 2019-08-08
      • 2013-07-28
      • 2020-01-03
      • 1970-01-01
      • 1970-01-01
      • 2016-08-13
      相关资源
      最近更新 更多