【问题标题】:Git commit -a "untracked files"?Git commit -a“未跟踪的文件”?
【发布时间】:2012-01-18 05:23:18
【问题描述】:

当我执行git commit -a 时,我看到以下内容:

  # Please enter the commit message for your changes. Lines starting
  # with '#' will be ignored, and an empty message aborts the commit.
  # On branch better_tag_show
  # Changes to be committed:
  #   (use "git reset HEAD <file>..." to unstage)
  #
  # modified:   ../assets/stylesheets/application.css
  # modified:   ../views/pages/home.html.erb
  # modified:   ../views/tags/show.html.erb
  # modified:   ../../db/seeds.rb
  #
  # Untracked files:
  #   (use "git add <file>..." to include in what will be committed)
  #
  # ../assets/stylesheets/
  # ../views/pages/

那些未跟踪的文件是什么意思?所有的变化都确实被跟踪了。我不明白为什么 git 在这里警告我未跟踪的文件。

编辑

好的,我看到很多令人困惑的回复。这是我git commit -athis 之后发生的事情。

# On branch master
nothing to commit (working directory clean)

如您所见,除了应用了更改的这四个文件外,没有其他内容。

我的问题应该改写如下:为什么当这个提交中的所有更改都已被跟踪时,git 会警告我未跟踪的文件?

换句话说,git commit 消息中未跟踪的警告是否不必要

【问题讨论】:

  • (use "git add &lt;file&gt;..." to include in what will be committed)
  • zengr 这不是必需的,因为 git commit -a 将提交对已跟踪文件的所有更改。
  • 当文件从未被added 到现在时必要的。来自-a 的文档:告诉命令自动暂存已修改和删除的文件,但您没有告诉 git 的新文件不受影响
  • 你为什么说 git 是在“警告”你?正如我所看到的,“未跟踪”文件消息是信息性的。您可以查看是否需要管理这些文件并采取相应措施。
  • @sateesh 好吧,不管你怎么称呼它,我仍然认为这根本没有帮助。这是如何提供信息的?我应该做些什么?您是否阅读了我在“编辑”部分的帖子,我在其中写道,除了上面列出的文件之外,对任何其他文件都没有修改?如果您发现此信息,则相当于我告诉您,当您无需担心时,不会跟踪您的 repo 树上的任何随机文件夹。

标签: git git-commit


【解决方案1】:

顾名思义,“未跟踪文件”是 git 未跟踪的文件。它们不在您的暂存区,也不是任何先前提交的一部分。如果您希望它们被版本控制(或由 git 管理),您可以通过使用 'git add' 告诉 'git' 来实现。查看Progit 书中Recording Changes to the Repository 的这一章,它使用漂亮的视觉效果很好地解释了记录对 git repo 的更改,并解释了术语“已跟踪”和“未跟踪”。

【讨论】:

【解决方案2】:

确保您位于本地 git 的正确目录(存储库主文件夹)中,以便在您提交或添加文件之前它可以找到 .git 文件夹配置。

【讨论】:

  • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
【解决方案3】:

你应该在命令行中输入

git add --all

这将提交所有未跟踪的文件

编辑:

暂存文件后,它们已准备好提交,因此您的下一个命令应该是

git commit -am "Your commit message"

【讨论】:

    【解决方案4】:

    如果您在处理未跟踪的文件时遇到问题,这个 3 行脚本将为您提供帮助。

    git rm -r --cached .
    git add -A
    git commit -am 'fix'
    

    那就git push

    【讨论】:

    • 这对我来说很有效,因为我需要取消跟踪我现在忽略的跟踪文件。
    【解决方案5】:
    1. 首先您需要添加所有未跟踪的文件。使用这个命令行:

      git add *

    2. 然后使用这个命令行提交:

      git commit -a

    【讨论】:

      【解决方案6】:

      对于其他有同样问题的人,请尝试运行

      git add . 它将添加当前目录的所有文件进行跟踪(包括未跟踪的),然后使用

      git commit -a 提交所有跟踪的文件。

      正如@Pacerier 所建议的,一个做同样事情的班轮是

      git add -A

      【讨论】:

      • git commit -a 将提交所有跟踪的文件,而不是跟踪未跟踪的文件。 git add . 将跟踪当前目录中未跟踪的文件。 git add -a 将跟踪所有未跟踪的文件。
      • @matteo 是 git add -A,而不是 git commit -A。据我所知,没有任何开关可以传递给git commit,其中包括未跟踪的文件。
      • -a 现在似乎只被 A 弃用了。谢谢,都一样。 :)
      • 要进一步了解这些命令,您可以查看:stackoverflow.com/questions/572549/…
      【解决方案7】:

      git commit -am "msg"git add filegit commit -m "msg" 不同

      如果您有一些文件从未添加到 git 跟踪中,您仍然需要执行 git add file

      “git commit -a”命令是两步过程的快捷方式。后 你修改了一个已经被 repo 知道的文件,你仍然需要 告诉 repo,“嘿!我想将此添加到暂存文件中 最终交给你。”这是通过发出“git add”来完成的 命令。 “git commit -a”正在暂存文件并将其提交到一个文件中 一步。

      来源:"git commit -a" and "git add"

      【讨论】:

      • 但是,正如你所说的 git commit -a = git add 。 + git commit 为什么不自动将文件添加到跟踪区域??....
      • @Johnny: git commit -a 不等于 git add . + git commitgit add 步骤仅添加git status 中列为已修改的文件,而不是当前目录中的所有内容。
      • 是的,我今天发现了!
      猜你喜欢
      • 2021-06-30
      • 1970-01-01
      • 2011-04-01
      • 2017-11-05
      • 2017-03-15
      • 2015-04-21
      • 2015-01-11
      • 2022-01-01
      • 2021-02-13
      相关资源
      最近更新 更多