31

出于某种原因,Git 告诉我我有一个文件既“要提交”又“不准备提交”?这没有意义:

% git status 
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   Dir1/Dir2/filename.cpp
#
# 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:   Dir1/Dir2/filename.cpp

Dir1Dir2并且filename.cpp绝对都是同一个文件。我不得不filename.cpp再次添加回来以使其显示为要提交的更改(在它最初位于存储库中之后)。可能导致问题的唯一原因是我隐藏了 , pull --rebase,然后弹出了stash? .gitignore没有列出Dir1Dir2或者filename.cpp任何地方,并且模式不建议他们会捕获这个文件?

4

3 回答 3

37

这意味着您对 进行了更改filename.cpp,添加了该更改(使用git add),然后进行了另一个尚未添加的更改。

“要提交的更改”部分意味着 Git 已通过更改更新了其索引。运行时git commit,对索引的更改将用于创建新的提交对象。

“未暂存的更改”部分显示了索引和您的工作副本之间的差异。

您可以像这样重现您所看到的:

  • 编辑文件名.cpp
  • 运行git status。您会看到“未上演的更改”。
  • git add filename.cpp
  • 运行git status。您将看到“要提交的更改”。
  • 再次编辑 filename.cpp
  • 运行git status。您将看到“未暂存的更改”和“要提交的更改”。

那有意义吗?解释 Git 的工作原理总是有点棘手。

于 2012-05-20T19:00:19.800 回答
12

在 CVS、SVN、BZR 以及毫无疑问的十几种其他工具中,一旦添加了一个文件,就意味着它将包含在下一次提交中。

不是那么GIT。

在 git 中,您不是“添加文件”,而是“添加更改”(有时称为“进行更改”)。

如果您更改文件两次,则必须“添加”两次。

于 2012-05-25T13:32:00.850 回答
5

如果您修改文件,添加它并且他们重​​新修改文件,您将获得此行为。当您执行 git add 时,它会将更改添加到该点,然后在不重新添加的情况下提交仅提交第一组添加的更改。

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

matthewfarwell (master)
$ vi foo.txt <-- add lines 1,2,3 here

matthewfarwell (master)
$ git add foo.txt

matthewfarwell (master)
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   foo.txt
#

matthewfarwell (master)
$ vi foo.txt <-- add lines 4,5,6, here

matthewfarwell (master)
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   foo.txt
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   foo.txt
#

因此,如果我现在提交,则只会提交第 1、2、3 行。

于 2012-05-20T18:56:48.343 回答