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

use*_*626 27 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
Run Code Online (Sandbox Code Playgroud)

Dir1,Dir2filename.cpp肯定所有的同一个文件.我不得不filename.cpp再次添加以使其显示为要提交的更改(在它最初位于存储库之后).关于唯一可能导致问题的是我被藏起来了pull --rebase,然后弹出了stash.gitignore没有列出Dir1,Dir2filename.cpp在任何地方,模式不建议他们会抓住这个文件?

Cam*_*ner 31

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

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

"未更改的更改"部分显示索引与工作副本之间的差异.

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

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

那有意义吗?解释Git如何工作总是有点棘手.


ams*_*ams 11

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

不是那么GIT.

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

如果您更改文件两次,则必须"添加"两次.


Mat*_*ell 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
#
Run Code Online (Sandbox Code Playgroud)

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