"Changes not staged for commit" 的意思是哪个?

328

我认为如果要跟踪文件,应该使用git add [要跟踪的文件]

我不知道为什么会收到消息Changes not staged for commit

如果这些文件没有被缓存,那么git不应该像这样向我展示这些文件是未跟踪的吗

enter image description here

我所做的只是从develop分支创建一个新的功能并在feature/change_excel_format分支上工作

我认为这些文件应该处于已缓存状态,

但是git status告诉我Changes not staged for commit

enter image description here

简而言之, 我只知道git中有3个阶段未跟踪已缓存已提交 有人可以告诉我,“Changes not staged for commit”是哪个阶段吗 enter image description here

所以,如果我修改了文件a(已经在仓库中)

然后输入git st,git会告诉我Changes not staged for commit

如果我执行git a,那么文件a将处于已缓存状态

现在如果我修改了文件a,那么在git中将有两种状态的文件a,对吗?

所以我必须决定是将已缓存a提交还是将未缓存a变为已缓存状态, 那么之前的已缓存文件a将被抛弃?

enter image description here


5
如果您收到此消息,并且想要提交此文件(a),请确保您在正确的目录路径中(添加所有项目根路径)进行git add操作。 - Sadee
12个回答

434

如果您更改了已经在代码库中的文件,想要将其提交到暂存区,您需要再次运行git add命令。

这使您可以仅提交自上次提交以来所做更改的某个子集。例如,假设您有文件a、文件b和文件c。您修改了文件a和文件b,但变更的性质非常不同,并且您不希望它们全部包含在一个提交中。您可以使用以下命令:

git add a
git commit a -m "bugfix, in a"
git add b
git commit b -m "new feature, in b"

顺便提一下,如果你想提交所有更改,只需键入

git commit -a

1
所以,如果这些文件已经在仓库中了,并且我已经对它们进行了更改,那么我也可以直接使用 git commit THEM 而不需要先添加它们,对吗? - newBike
1
当然。在这种情况下,只会提交列出的文件,而不管不同文件中是否存在已暂存的更改。 - Stefano Falasca
1
我也遇到了同样的问题,但我的问题也与子模块有关,因为存在未跟踪的文件。因此,在我的子目录中,我也使用git添加了所有更改,问题就解决了。 - eemrah
1
我已经执行了 git clean -fd,但仍然出现这个问题。我想要摆脱所有的更改。我还应该做些什么? - mfaani
4
git commit -a 命令只会提交更新过的文件,而不包括新建的文件。不会提交所有文件。 - Martin
显示剩余3条评论

93

如果不使用git add将更改内容放入暂存区,则无法提交。可以把它看作是告诉git哪些更改要提交。

git add -u :/ 将所有修改的文件更改添加到暂存区 git add * :/ 将所有修改和未被.gitignore忽略的新文件添加到暂存区


3
相比上面的答案,这个答案更为清晰简洁,这就是我喜欢它的原因。 ;) - mccurcio

23

这是Git另一种告诉你的方式:

嘿,我看到你对文件做了一些更改,但请记住,当你把页面写入我的历史记录时,这些更改不会出现在这些页面中。

如果您没有明确地使用 git add 对文件进行暂存(这是有意义的),则文件的更改不会被暂存。

因此,当您执行 git commit 时,这些更改将不会被添加,因为它们尚未被暂存。如果您想提交它们,则必须首先将它们暂存(即,使用git add 命令)。


3
但我没有改变它所引用的文件。 - Eoin
5
我不太明白这种行为的实际意义。如果我在设置存储库时通过 add . 告诉 Git 跟踪一个文件,而它可以检测到我对其进行了更改,那么为什么每次提交时都需要明确添加文件呢?只是为了更改一个文件,我必须执行 addcommit push。对我来说,commit 和 push 之间的分界线是有意义的,而 addcommit 之间的分界线似乎非常冗余。 - Hashim Aziz
2
@Hashim 我同意,我真的不理解这个逻辑。 - Herman Toothrot
@Prometheus; 注意:我在Git方面仍然是一个新手,所以这可能是错误的。在Git中,“提交”是一个两步骤的过程:1.使用“git add”告诉Git将包括哪些内容在“提交”中(默认情况下不是所有更改的文件),2.执行“提交”。在提交时,Git会忽略未明确“添加”的文件,即使该文件在本地存储库中并且已更改。不“添加”文件是告诉“提交”您现在不想将其发送到本地存储库的一种方式。 - mnemotronic
@Prometheus 这是因为Git基本上有三个“空间”。1.工作区,被视为临时的并且容易被删除。2.暂存区,在将文件放入仓库之前,文件会被放置在此处。3.仓库本身。这使您可以在将暂存区中的文件提交到仓库之前移动到历史记录中的不同提交(以及可能许多其他我不完全理解的事情)。如果您能找到Paola Perrotta的教程,我强烈推荐您阅读。 - Chuck Le Butt

15

尝试在Git Bash中执行以下操作:

1. git add -u :/

2. git commit -m "你的提交信息"

  1. git push -u origin master

注意:如果您还未初始化您的仓库。

首先

git init 

按照上述步骤进行操作即可。 这对我起了作用。


1
这个问题对我有用,在一个Git冲突中,我无法从本地存储库中删除文件并从本地存储库提交到远程主分支。 - Siwoku Adeola
1
WuOoo运行良好。非常感谢。 - Bang Andre

12

使用Git版本2.x.x(当前版本)

“Changes not staged for commit” 表示 有一些更改未暂存

因此,要完美地将所有更改暂存,请运行以下命令:

git add -A

然后运行这个命令:

git commit -m "Update"

另外,当出现"Changes not staged for commit"时,只需按照我上面已经提到的运行此命令即可完美地将所有更改暂存:

```git git add . ```
git add -A
如果你运行这些命令,所有更改都不会被完全暂存:
git add .
git add --ignore-removal .
git add -u  

这张表格展示了我在 Git 版本 2.x.x(当前版本) 中提到的命令之间的差异:

命令新文件修改文件删除文件说明
git add -A✔️✔️✔️将所有(新文件,修改后的文件,删除的文件)文件添加到暂存区
git add .✔️✔️✔️将当前文件夹中的所有(新文件,修改后的文件,删除的文件)文件添加到暂存区
git add --ignore-removal .✔️✔️只将新文件和修改后的文件添加到暂存区
git add -u✔️✔️只将修改后的文件和删除的文件添加到暂存区

5
假设您保存了一个新的文件更改。(例如navbar.component.html)
运行:
ng status
modified:   src/app/components/shared/navbar/navbar.component.html

如果您想上传该文件的更改,您必须运行以下命令:
git add src/app/components/shared/navbar/navbar.component.html

然后:

git commit src/app/components/shared/navbar/navbar.component.html -m "new navbar changes and fixes"

并且:

git push origin [your branch name, usually "master"]

---------------------------------------------------------------

如果您想上传所有更改(多个/全部文件):

git commit -a

如果你在git commit时没有输入消息(-m)将会出现提示信息"Please enter the commit message for your changes."

  • 你将看到这条消息
  • 你可以通过以下两步来解决:
  • 1.a. 输入多行消息以进行提交。
  • 1.b. 留空以中止提交。
    1. 按下"esc"键,然后输入":wq"并按回车键保存你的选择。完成!

接下来:

git push

然后,就完成了!


2
就像我之前所说的一样:git commit -a并不会上传所有更改,它不包括新文件。它只会提交对现有文件的更新。 - Martin

4
我成功的方法是进入根文件夹,即.git/所在的位置。我之前在子文件夹中操作,导致出现了错误。

1
当您在将代码提交时,如果您添加了新文件但没有对其进行暂存(添加),则可能会看到此错误。
为了解决这个问题,您可以先使用git add命令(git add your_file_name.py)将文件添加,然后再提交更改(git commit -m "Rename Files" -m "Sample script to rename files as you like")。

1

按照以下步骤操作:

1- git stash
2- git add .
3- git commit -m "你的提交信息"


10
Git stash移除了我所有的更改,其中包括我10小时的工作 :( - Vinicius Aquino
16
如果你使用了 "git stash",它会把那些更改放到一个 "临时位置",要将它们取回,只需输入 "git stash pop" 就可以从 "临时位置" 获取你的更改。 - Cyrus Zei
14
在阅读 @viniciussvl 和 Cyrus 的评论之前,请勿使用 git stash。 - shabby
4
在这种情况下,我为什么要使用git stash? - Tobias Kaufmann
这样的帖子如何获得赞?应该警告一下git stash。 - KenobiBastila

1

我犯了一个愚蠢的错误。我试图在一个没有初始化git的文件夹中运行这个命令。确保你有.git文件夹或者运行这个命令。

git init

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接