为什么学习练习警告git commit -am不足以将我的新.gitignore添加到存储库,即使git明确添加了它?

时间:2016-04-09 08:31:13

标签: git gitignore

我正在学习git并且来到this exercise

  

.gitignore文件提交到您的存储库。提示:运行git commit -am是不够的。为什么不呢?

我已经完成了git commit -am,这似乎已经足够了。

michael@michael:~/repos/website$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    deleted:    breaching_whale.jpg

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

    .gitignore

no changes added to commit (use "git add" and/or "git commit -a")
michael@michael:~/repos/website$ git add .
michael@michael:~/repos/website$ ls
images  index.html  README.md
michael@michael:~/repos/website$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   .gitignore
    deleted:    breaching_whale.jpg

michael@michael:~/repos/website$ git commit -am "Add gitignore"
[master e7cc08c] Add gitignore
 2 files changed, 1 insertion(+)
 create mode 100644 .gitignore
 delete mode 100644 breaching_whale.jpg
michael@michael:~/repos/website$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
nothing to commit, working directory clean

你能猜测我做错了什么,并帮助我理解教程中的含义以及为什么git commit -am还不够?

2 个答案:

答案 0 :(得分:2)

这不是你做错了什么的情况。 git commit -am将所有跟踪的文件添加到提交中,并将消息作为参数提供给m。您在此命令之前已经(可能自动)执行了git add .,它将当前目录中未跟踪的文件添加到提交中。

为清楚起见,跟踪文件是Git已经监视更改的文件,而未跟踪文件是Git可以看到的但没有历史记录的文件。只运行git commit -a本身不会将新文件添加到存储库,而只是将更改提交给Git已经知道的文件。

答案 1 :(得分:1)

来自git-commit的手册页:

  

-a   --all

     

告诉命令自动暂存已修改和删除的文件,但是没有告诉Git的新文件不会受到影响。

因此该命令仅记录对已跟踪文件的更改。 你“正确”(而不是“错误地”)做的是你使用git add添加新文件。