git commit -a“未跟踪的文件”?


92

当执行时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 -a

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

如您所见,除了已应用更改的这四个文件之外,没有其他任何东西。

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

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


1
(use "git add <file>..." to include in what will be committed)
zengr 2011年

1
不需要zengr,因为git commit -a会将所有更改提交到已跟踪的文件。
消失的

3
当文件从未必要add主编至今。从文档中获取-a告诉命令自动暂存已修改和删除的文件,但是您未告知git的新文件不受影响
Noufal Ibrahim 2011年

为什么说git在“警告”您?如我所见,“未跟踪”文件消息是信息性的。您可以查看是否需要管理这些文件并采取相应的措施。
sateesh 2011年

@sateesh好吧,无论您想调用它什么,我仍然认为这真的没有帮助。这如何提供信息?我应该做些什么?您是否在“编辑”部分中阅读了我的文章,我在那儿写道,除上面列出的文件以外,其他任何文件都没有修改?如果您发现此信息有用,则相当于我告诉您,在无需担心的情况下,不会跟踪回购树上的任何随机文件夹。
消失的

Answers:


105

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

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

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

正如@Pacerier所建议的,执行相同操作的一种衬板是

git add -A


4
git commit -a将提交所有跟踪的文件,而不跟踪未跟踪的文件。 git add .将跟踪当前目录中未跟踪的文件。 git add -a将跟踪所有未跟踪的文件。
这里

@matteo git add -A,不是git commit -A。据我所知,没有可以传递给的开关git commit,包括未跟踪的文件。

1
-a似乎仅被弃用了A。谢谢,都一样。:)
tcratius

有关这些命令的进一步了解,您可以查看:stackoverflow.com/questions/572549/...
Onat Korucu

30

git commit -am "msg"git add file和不相同git commit -m "msg"

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

“ git commit -a”命令是两步过程的快捷方式。修改存储库已知的文件后,您仍然必须告诉存储库“嘿!我想将其添加到暂存文件中,并最终将其提交给您。” 这是通过发出“ git add”命令来完成的。“ git commit -a”将暂存文件并一步提交。

来源:“ git commit -a”和“ git add”


但是,正如您所说的git commit -a = git add。+ git commit为什么不将文件自动添加到跟踪区域?....
Johnny,

1
@Johnny:git commit -a不等于git add .+ git commit。该git add步骤添加在您中列出的已修改文件git status,而不添加当前目录中的所有文件。
索伦·比约恩斯塔德

是的,我今天发现了!
KansaiRobot

9

您应该在命令行中输入

git add --all

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

编辑:

暂存文件后,它们就可以提交了,因此您的下一个命令应为

git commit -am "Your commit message"

5
这将暂存所有文件,而不是提交它们。您仍然必须单独执行此操作。
Saeb Amini

8
  1. 首先,您需要添加所有未跟踪的文件。使用以下命令行:

    git add *

  2. 然后使用以下命令行提交:

    git commit -a


7

如果您遇到未跟踪文件的问题,此3行脚本将为您提供帮助。

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

然后就 git push


这对我来说很实用,因为我需要取消跟踪我现在忽略的文件。
spyder man

2

顾名思义,“未跟踪的文件”是git不会跟踪的文件。它们不在您的暂存区中,也不属于任何先前的提交。如果要对它们进行版本控制(或由git管理),可以通过使用“ git add”告诉“ git”来实现。检查这一章,在Progit书中记录对存储库的更改,它使用漂亮的视觉效果很好地说明了如何记录对git repo的更改,还解释了术语“已跟踪”和“未跟踪”


0

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


这不能为问题提供答案。要批评或要求作者澄清,请在其帖子下方发表评论。- 评分
sampathsris

-1
git add --all

这将解决未跟踪的文件。感谢@travis delly,将所有文件添加到目录中


已经提出了这个答案。
Per Svensson

能否请你删除downvote。那么我将删除我的答案
熔岩
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.