【问题标题】:reruning git status does not work properly重新运行 git status 无法正常工作
【发布时间】:2021-08-06 15:21:34
【问题描述】:

我在桌面的 myproject 文件夹中初始化了 git 当我输入 git status 命令时,我得到了这个

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        newfile.txt

nothing added to commit but untracked files present (use "git add" to track)

在我重新运行 git status 后,它应该像这样弹出:

On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

但我的仍然说没有提交和未跟踪的文件我应该如何解决这个问题? 非常感谢

【问题讨论】:

  • git status 不会改变 repo 的状态,只显示当前状态。为了得到你所期望的,你必须git add未跟踪的文件,然后git commit
  • 你能说得更详细一点吗?在第一个 git status 之后你会做什么?您应该确保在正确的分支中,然后执行 git add .git commit -m "Initial commit"

标签: git git-commit


【解决方案1】:

Initial commitNo commits yet 代表来自 git status 的同一事物。旧版本的 Git 说的是前者;新版本的 Git 说的是后者。当 Git 人员发现 Git 新手发现 No commits yet 消息更容易理解时,他们改变了它。既然你说的是No commits yet,那么你的 Git 版本比你写指令的人要新。


未跟踪的文件是不在 Git 的 索引 中的文件。如果您希望该文件出现在您的下一次提交中,您必须使用git add 将文件添加Git 的索引。

在 Git 中,索引是一件大而复杂的事情,但作为一个 Git 新手,现在有一个简单的方法可以考虑它:Git 的索引包含您的建议的下一次提交。这个索引的东西太重要了,它有三个名字:

  • 索引(正如我在上面使用的那样);或
  • 暂存区:这描述了您将如何使用索引;或
  • 缓存

这个姓氏现在非常罕见,主要作为各种 Git 命令的标志出现,例如 git diff --cachedgit rm --cached。但是这三个名字都指的是同一个东西,真的。1

这里要意识到的是,一旦您进行提交,您存储在提交的文件将永久存储只读存档2所以它们变得“安全”:如果你搞砸了,你可以把它们拿回来。这些文件的已提交存档 版本实际上无法更改,即使 Git 本身也无法更改。它们以特殊、只读、压缩和去重格式存储,您的计算机本身也无法读取:只有 Git 可以读取它们,没有任何东西可以写入它们(除了每次提交仅发生一次存档创建)。

因为提交的文件确实不能使用,所以您必须先让Git 将它们从提交中复制出来,然后才能使用提交。这就是git checkout 或新的(Git 2.23 或更高版本)git switch 所做的:它复制提交的文件,以便您可以查看和使用它们。

您可以看到和使用的副本存在于 Git 称之为您的工作树的地方。这些文件是普通的日常文件,每个程序都可以正常读写。这些是您用来完成工作的文件。

棘手的一点——Git 的索引出现在哪里——是,Git 在任何时候都为每个文件保留一个第三个​​副本。提交中有一份副本,而您的工作树中每天都有一份。但是在这两者之间,Git 拥有每个文件的额外索引 副本。这个索引“副本”是预先去重的,因此git commit 会快速运行,并且实际上不会为与旧的、已提交的文件相同的文件占用任何空间。但是每个文件的每个索引副本始终存在。它就在那里,准备好了,准备在下一次提交中提交。

这就是使索引成为您建议的下一次提交的原因:它保存了每个文件的副本,准备提交。当您运行git commit 时,Git 不会查看您的工作树 文件。它查看并保存为新的存档/提交 Git 索引中的副本。

在您运行git add 之前,任何给定文件的索引副本都与您签出的提交副本相匹配。如果没有检出提交的副本,则该文件甚至还没有索引中。因此,如果您在工作树中创建了一个新文件,但它不在 Git 的索引中,Git 会将其列为未跟踪3


1一个 Git 命令 git apply 在其 --index--cached 标志之间进行了额外区分,但对于 git diff--staged--cached同样的事情。

2从技术上讲,只要提交本身存在,它们就会被存储,但通常是“永远”。稍后再担心此规则的例外情况。

3最终,您会发现一长串未跟踪的文件很烦人。有一种方法可以让git status 对一些未跟踪的文件闭嘴。但留到以后再说吧。

【讨论】:

    猜你喜欢
    • 2021-08-03
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 2017-11-30
    相关资源
    最近更新 更多