为什么'git承诺'不保存我的更改?

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

我做错了什么?

322926 次浏览

你应该:

git commit . -m "save arezzo files"

正如这条信息所说:

提交时不添加任何更改(使用"git add"和/或"git commit -a")

Git有一个“暂存区”,在提交文件之前需要添加文件,你可以在这里阅读它的解释

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

git commit -am "save arezzo files"

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

或者,如果你想更有选择性地向提交中添加什么,你可以使用< a href = " http://gitref.org/basic/添加" > git添加< / >命令将适当的文件添加到staging区域,并使用git status来预览将要添加的内容(记住注意使用的措辞)。

你也可以找到关于如何在git文档页上使用git的通用文档和教程,其中将详细介绍暂存/添加文件的概念。

< p >
另一件值得了解的事情是交互分期 .——它允许你将文件的部分添加到staging区域,所以如果你已经做了三个不同的代码更改(对于相关但不同的功能),你可以使用交互模式来分割这些更改并依次添加/提交每个部分。像这样更小的特定提交是有帮助的

您没有添加更改。或者专门添加它们通过

git add filename1 filename2

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

git add .

或者在提交时使用缩写-a:

git commit -a -m "message".

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

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

另一个帮助我理解索引的信息来源是Scott Chacons的《Getting Git》第259页。

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

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

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

这有点傻,但值得检查一下你的文件夹下是否有一个不能提交的。git文件夹。

你可以这样做:

git add -u -n

要检查哪些文件已修改并将被添加(预演:-n选项),然后

git add -u

添加修改过的文件

我发现当我在我的.gitignore文件生活的子目录下面(我的存储库的主目录,可以这么说)中做了git add .时出现了这个问题。尝试将目录更改为你的目录,然后运行git add .git commit -m "my commit message"

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

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

rm -rf .git

在我的例子中,我有一个WordPress应用程序,我在里面添加的文件夹是一个主题。所以我必须转到主题根目录,删除Git文件,这样整个项目就会被父级WordPress应用程序跟踪。

我有一个非常类似的问题,同样的错误消息。“更改没有为提交而上演”,然而当我做diff时,它显示了差异。我终于发现,之前我改变了一个目录大小写。前女友。“postgresql”改为“postgresql”。我记得有时候git会在旧的case目录下留下一两个文件。然后您将向新案例提交一个新版本。

因此git不知道该依赖哪一个。所以为了解决这个问题,我不得不登陆github的网站。然后你就可以看到两种情况了。并且必须删除不正确的套管器目录中的所有文件。确保保存了正确的版本或在正确的大小写目录中。

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

此时,您应该能够在本地计算机上执行Pull操作,并且不再看到冲突。因此能够再次承诺。:)

如果你有一个子文件夹,它是从其他git-Repository克隆的,首先你必须删除$。get $ file from child-Repository rm -rf .git 之后你可以切换到父文件夹并使用git add -A。< / p >

如果你有更多的文件在我的情况下,我有7000图像文件当我试图从项目的路由文件夹中添加它们时,它还没有添加他们,但当我去图像文件夹一切都是好的。通过目标文件夹和命令,像俯视图

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

git push origin master枚举对象:6574,完成。计数对象:100%(6574/6574),完成。Delta压缩使用高达4 线程压缩对象:100%(6347/6347),完成。写作对象: 28% (1850/6569), 142.17 MiB | 414.00 KiB/s

删除所有项目中的每个.git文件

您可以使用该命令

rm -rf .git