为什么'git commit'没有保存我的更改?

时间:2011-10-09 15:17:51

标签: git version-control git-commit

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

我做错了什么?

12 个答案:

答案 0 :(得分:384)

正如消息所说:

  

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

Git有一个“临时区域”,在提交文件之前需要添加文件,你可以read an explanation of it here


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

git commit -am "save arezzo files"

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

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

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


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

答案 1 :(得分:47)

您没有添加更改。要么通过

专门添加它们
git add filename1 filename2

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

git add .

或在提交时使用简写-a

git commit -a -m "message".

答案 2 :(得分:38)

你应该这样做:

git commit . -m "save arezzo files"

答案 3 :(得分:7)

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

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

答案 4 :(得分:7)

你可以做到:

git add -u -n

检查您修改和将要添加的文件(干运行:-n选项),然后

git add -u

添加刚刚修改过的文件

答案 5 :(得分:4)

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

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

帮助我理解索引的另一个信息来源是Scott Chacons“Getting Git”第259页并向前推进。

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

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

答案 6 :(得分:4)

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

答案 7 :(得分:4)

发生这种情况的原因是因为你有一个文件夹已被Git跟踪另一个文件夹,该文件夹也由Git跟踪。例如,我有一个项目,我添加了一个子文件夹。在我把一个放在另一个之前,他们都被Git跟踪了。为了停止跟踪内部的一个,找到它并删除Git文件:

rm -rf .git

在我的情况下,我有一个WordPress应用程序,我在里面添加的文件夹是一个主题。所以我必须转到主题根目录,并删除Git文件,以便现在由父WordPress应用程序跟踪整个项目。

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

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

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

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

答案 10 :(得分:0)

如果您有一个从其他git-Repository复制的子文件夹,则首先必须从子存储库中删除$ .git $文件: iframe.contentWindow 之后,您可以转到父文件夹并使用public Transform[] SpawnPoints; public Transform[] EffectPoints; public float spawnTime = 1.5f; public float effectSpawnTime = 1f; public GameObject Coins; public GameObject Effect; int a = Random.Range(0, 4); // Use this for initialization void Start() { InvokeRepeating("SpawnParticle", effectSpawnTime, effectSpawnTime); InvokeRepeating("SpawnCoins", spawnTime, spawnTime); } // Update is called once per frame void Update() { } void SpawnCoins() { int spawnIndex = Random.Range(0, 4); Instantiate(Coins, SpawnPoints[spawnIndex].position, SpawnPoints[spawnIndex].rotation); } void SpawnParticle() { int spawnIndex = Random.Range(0, 4); Instantiate(Effect, EffectPoints[spawnIndex].position, EffectPoints[spawnIndex].rotation); }

答案 11 :(得分:0)

如果我有更多文件,我有7000个图像文件当我尝试从项目的路径文件夹中添加它们时,它没有添加,但是当我转到图像文件夹时,一切正常。遍历目标文件夹并执行以下命令

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

git push origin master枚举对象:6574,已完成。计数对象:已完成100%(6574/6574)。增量压缩最多使用4     线程压缩对象:100%(6347/6347),已完成。编写对象:     28%(1850/6569),142.17 MiB | 414.00 KiB / s