为什么“ git commit”不保存我的更改?


251

我做了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")

我究竟做错了什么?


16
使用git commit -am "save arezzo files"自动添加的所有更改(WRT的.gitignore)。您可能只想添加特定的文件/目录:git add file.src
mbx 2011年

Answers:


400

消息说:

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

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


对于您的特定示例,可以使用:

git commit -am "save arezzo files"

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

另外,如果您想对添加到提交中的内容有更多的选择,可以使用git add命令将适当的文件添加到暂存区域,并使用git status预览要添加的内容(记住要注意使用的措词)。

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


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


@PeterBoughton您的意思是“交互式添加”而不是“交互式添加”?
djb 2012年

3
不,我是说互动添加。
彼得·布顿

2
在将代码推送到远程存储库之前,本地存储库本身就是一个过渡区域。为什么要在提交更改之前添加另一个“层”,这是否有点复杂?我是git的新手,但我想99,99%的开发人员总是使用commit -am,因为无论如何更改都不会超出本地环境。
PawelRoman 2014年

2
我想我刚遇到这个问题是因为我已经习惯了IDE为我照顾它。不知道为什么这是必要的步骤,但是再说一遍,关于git的很多事情我都没有得到……我的意思是git ...
trpt4him

49

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

git add filename1 filename2

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

git add .

-a在提交时使用速记:

git commit -a -m "message".

另外,我强烈建议用户使用交互式添加。尤其是当您尝试进行易于逆转的小型提交时。
jer

40

你应该做:

git commit . -m "save arezzo files"

4
这似乎是对OP问题的正确答案。他不想“添加”,他想提交已修改的内容。
VectorVortec

8

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

这有点愚蠢,但是值得检查的是,在没有提交的文件夹下没有.git文件夹。


7

您可能已经做过:

git add -u -n

要检查您已修改并要添加的文件(试运行:-n选项),然后

git add -u

添加仅修改的文件


4

我发现,当我做了一个出现此问题git add .的子目录下面在我的.gitignore文件生命(我的仓库的主目录,可以这么说)。请尝试更改目录到你最上面的目录并运行git add .之后git commit -m "my commit message"


4

也许很明显,但是...

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

帮助我理解索引的另一个信息来源是Scott Chacons的“ Getting Git”(第259页)及更高版本。

我开始使用命令行,因为大多数文档仅显示了...

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


3

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

rm -rf .git

以我为例,我有一个WordPress应用程序,我在其中添加的文件夹是一个主题。因此,我必须转到主题根目录,并删除Git文件,以便父级WordPress应用程序可以跟踪整个项目。


1

如果我有更多文件,当我尝试从项目的route文件夹中添加它们时,我有7000个图像文件尚未添加它们,但是当我转到图像文件夹时,一切正常。浏览目标文件夹并像下面一样命令

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 KiB /秒


0

commit --amend即使发布了git add .,我仍然遇到问题,但仍然无法正常工作。原来,我进行了一些.vimrc自定义,但编辑器无法正常工作。修复这些错误,以便vim返回正确的代码,从而解决了该问题。


0

我在同一错误消息中也遇到了非常相似的问题。“更改未上演提交”,但是当我进行比较时,它显示出差异。我终于发现,前一段时间我更改了目录大小写。例如 “ PostgeSQL”到“ postgresql”。我记得现在git有时会在旧的case目录中留下一两个文件。然后,您将对新案例提交新版本。

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

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

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


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.