Git列出了相同的文件修改而不是为提交暂存?

时间:2012-05-20 18:48:32

标签: git

出于某种原因,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

Dir1Dir2filename.cpp绝对是同一个文件。我不得不再次添加filename.cpp以使其显示为要提交的更改(在它最初位于存储库之后)。关于唯一可能导致问题的是我隐藏了pull --rebase,然后弹出了stash.gitignore未在任何地方列出Dir1Dir2filename.cpp,且模式不建议他们会抓住此文件?

3 个答案:

答案 0 :(得分:29)

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

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

“未分阶段更改”部分显示索引与工作副本之间的差异。

您可以重现您所看到的内容:

  • 编辑filename.cpp
  • 运行git status。你会看到“没有上演的变化”。
  • 运行git add filename.cpp
  • 运行git status。您将看到“要提交的更改”。
  • 再次编辑filename.cpp
  • 运行git status。您将看到“未更改的更改”和“要提交的更改”。

这有意义吗?解释Git如何运作总是有点棘手。

答案 1 :(得分:10)

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

不是GIT。

在git中你没有“添加文件”,你“添加了一个更改”(有时它被称为“阶段变化”)。

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

答案 2 :(得分:4)

如果您修改文件,添加它们并重新修改文件,您将得到此行为。当您执行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行。