259

我做了一个git commit -m "message"这样的:

> git commit -m "save arezzo files"
# 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:   arezzo.txt
#       modified:   arezzo.jsp
#
no changes added to commit (use "git add" and/or "git commit -a")

但之后,当我这样做时,git status它会显示相同的修改文件:

> 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:   arezzo.txt
#       modified:   arezzo.jsp
#
no changes added to commit (use "git add" and/or "git commit -a")

我究竟做错了什么?

4

12 回答 12

417

正如消息所说:

没有添加到提交的更改(使用“git add”和/或“git commit -a”)

Git 有一个“暂存区”,在提交之前需要在其中添加文件,您可以在此处阅读有关它的说明


对于您的具体示例,您可以使用:

git commit -am "save arezzo files"

(注意标志中的额外内容a,也可以写成git commit -a -m "message"- 两者都做同样的事情)

或者,如果你想对提交的内容更有选择性,你可以使用git add命令将适当的文件添加到暂存区,并使用git status预览将要添加的内容(记住要注意使用的措辞)。

您还可以在git 文档页面上找到有关如何使用 git 的一般文档和教程,这将提供有关暂存/添加文件概念的更多详细信息。


另一件值得了解的事情是交互式暂存- 这允许您将文件的一部分添加到暂存区域,因此如果您进行了三个不同的代码更改(针对相关但不同的功能),您可以使用交互模式来拆分依次更改并添加/提交每个部分。像这样具有较小的特定提交可能会有所帮助。

于 2011-10-09T15:20:57.057 回答
53

您没有添加更改。要么通过专门添加它们

git add filename1 filename2

或添加所有更改(从项目的根路径)

git add .

或在提交时使用速记-a

git commit -a -m "message".
于 2011-10-09T15:21:11.260 回答
41

你应该做:

git commit . -m "save arezzo files"
于 2011-10-09T15:20:25.477 回答
8

我将我在 Git 源代码控制下的一个小子项目复制到另一个项目中,但忘记删除 .git 文件夹。当我去提交时,我得到了与上面相同的消息,直到我删除了文件夹才能清除它.git

这有点傻,但值得检查一下您在未提交的文件夹下没有 .git 文件夹。

于 2012-07-25T05:34:35.223 回答
7

你可以做一个:

git add -u -n

检查您修改了哪些文件将被添加(试运行:-n 选项),然后

git add -u

添加刚刚修改的文件

于 2013-05-22T19:08:02.347 回答
4

也许是显而易见的事情,但是...

如果索引有问题,请使用git-gui。您可以很好地了解索引(暂存区)的实际工作方式。

另一个帮助我理解索引的信息来源是 Scott Chacons “Getting Git” 第 259 页及以后。

我开始使用命令行是因为大多数文档只显示...

我认为 git-gui 和 gitk 实际上让我工作得更快,并且我摆脱了诸如“git pull”之类的坏习惯......现在我总是先获取......在我合并之前看看新的变化到底是什么。

于 2011-12-11T04:14:20.767 回答
4

当我在我的文件所在的子目录(我的存储库的主目录,可以这么说)git add .完成一个子目录时,我发现这个问题出现了。尝试将目录更改为最上面的目录并运行,然后运行​​..gitignoregit add .git commit -m "my commit message"

于 2014-04-15T15:03:53.600 回答
4

发生这种情况的原因是因为您有一个文件夹,该文件夹已经被 Git 跟踪,而另一个文件夹也被 Git 跟踪。例如,我有一个项目,我向它添加了一个子文件夹。在我将其中一个放入另一个之前,它们都被 Git 跟踪了。为了停止跟踪里面的那个,找到它并删除 Git 文件:

rm -rf .git

就我而言,我有一个 WordPress 应用程序,我在其中添加的文件夹是一个主题。所以我不得不去主题根目录,并删除 Git 文件,这样整个项目现在将被父级 WordPress 应用程序跟踪。

于 2017-03-21T22:05:22.727 回答
2

如果在我的情况下您有更多文件,当我尝试从项目的路由文件夹中添加它们时,我有 7000 个图像文件,它没有添加它们,但是当我转到图像文件夹时,一切正常。像 abows 一样浏览目标文件夹和命令

git add .
git commit -am "image uploading"
git push origin master

git push origin master 枚举对象:6574,完成。计数对象:100% (6574/6574),完成。使用最多 4 个线程的 Delta 压缩压缩对象:100% (6347/6347),完成。写入对象:28% (1850/6569),142.17 MiB | 414.00 千字节/秒

于 2019-02-24T20:56:50.153 回答
0

我有一个问题,commit --amend即使在发出 a 之后我也在做git add .,但它仍然无法正常工作。结果我做了一些.vimrc自定义,我的编辑器工作不正常。修复这些错误以便vim返回正确的代码解决了问题。

于 2015-03-06T21:59:56.723 回答
0

我有一个非常相似的问题,同样的错误消息。“未为提交进行的更改”,但是当我进行差异时,它会显示差异。我终于发现不久前我改变了一个目录案例。前任。“PostgeSQL”到“postgresql”。我现在记得有时 git 会在旧的案例目录中留下一两个文件。然后,您将向新案例提交一个新版本。

因此 git 不知道该依赖哪一个。所以要解决它,我不得不去 github 的网站。然后您可以查看这两种情况。并且您必须删除不正确的大小写目录中的所有文件。确保您保存了正确的版本或保存在正确的大小写目录中。

删除旧案例目录中的所有文件后,整个目录将消失。然后做一个提交。

此时,您应该能够在本地计算机上执行拉取操作,而不再看到冲突。因此能够再次提交。:)

于 2018-11-08T23:47:00.043 回答
0

如果你有一个从其他 git-Repository 克隆的子文件夹,首先你必须从 child-Repository 中删除 $.git$ 文件: rm -rf .git 之后你可以更改为父文件夹并使用git add -A.

于 2018-11-18T12:49:35.280 回答