git状态的奇怪行为

时间:2011-12-01 16:07:08

标签: git version-control

当我修改单个文件然后运行git status时,我得到:

# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   app/models/category.rb
#
no changes added to commit (use "git add" and/or "git commit -a")

为什么有(use "git add <file>..." to update what will be committed)行? 我的仓库中没有要添加的文件。

3 个答案:

答案 0 :(得分:1)

您还可以使用git add来修改提交的文件。

答案 1 :(得分:1)

git-add还用于将工作副本中的更改添加到索引中。索引用于在实际提交之前构建提交。

参见例如http://schacon.github.com/git/user-manual.html#how-to-make-a-commit

答案 2 :(得分:0)

正如其他人所说,这是因为git为这个过程增加了另一个阶段,比如颠覆。 git存储库的分支包含已提交的文件版本,git索引包含将要提交的更改,文件系统保存文件的实际当前状态。

即使已经跟踪了某个文件,当它被更改时,也不会明确地提交它,除非您将其标记为“是,请执行此操作”。有几种方法可以做到这一点:

git add someFile;git commit; #explicitly add and then commit marked files
git commit someFile -m "  Change to someFile."; #explicitly commit a list of files
git commit -am "  Latest set of changes to all tracked files"; #shotgun approach, commits all changes to all tracked files or added files

我建议使用

git commit someFile anotherFile aWholeOtherFile -m "  Commit message."

明确地说,直到你真正掌握了git中的提交并且可以更加意识到如何处理意外提交你不想要的东西,然后转向更简单的git commit -am " Commit message."方法