【问题标题】:Why does 'git commit' not save my changes?为什么“git commit”不保存我的更改?
【发布时间】:2011-12-04 00:07:36
【问题描述】:

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

我做错了什么?

【问题讨论】:

标签: git version-control git-commit


【解决方案1】:

正如消息所说:

没有添加到提交的更改(使用“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 命令将适当的文件添加到暂存区域,然后使用 @987654323 @ 预览即将添加的内容(记得注意使用的措辞)。

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


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

【讨论】:

  • @PeterBoughton 您的意思是“交互式添加”而不是“交互添加”吗?
  • 不,我的意思是交互添加。
  • 本地仓库在将代码推送到远程仓库之前本身就是一种暂存区。为什么要在提交更改之前添加另一个“层”,是不是有点过于复杂了?我是 git 新手,但我想 99,99% 的开发人员总是使用 commit -am,因为无论如何更改都不会超出他们的本地环境。
  • 我想我只是遇到了这个问题,因为我已经习惯了我的 IDE 为我处理它。也不知道为什么这是一个必要的步骤,但话又说回来,我不明白关于 git 的很多东西......我的意思是 git......
【解决方案2】:

您没有添加更改。通过

专门添加它们
git add filename1 filename2

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

git add .

或在提交时使用简写-a

git commit -a -m "message".

【讨论】:

  • 另外,我强烈建议用户使用交互式添加。尤其是当您尝试做出易于撤销的小型提交时。
【解决方案3】:

你应该这样做:

git commit . -m "save arezzo files"

【讨论】:

  • 这似乎是对 OP 问题的正确答案。他不想“添加”,他想提交修改过的内容。
【解决方案4】:

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

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

【讨论】:

    【解决方案5】:

    你可以这样做:

    git add -u -n
    

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

    git add -u
    

    添加刚刚修改的文件

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

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

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

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

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

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

        【讨论】:

          【解决方案8】:

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

          rm -rf .git
          

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

          【讨论】:

            【解决方案9】:

            如果你有更多文件,我有 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 KiB/s

            【讨论】:

              【解决方案10】:

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

              【讨论】:

                【解决方案11】:

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

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

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

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

                【讨论】:

                  【解决方案12】:

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

                  【讨论】:

                    猜你喜欢
                    • 2022-10-20
                    • 1970-01-01
                    • 2014-07-10
                    • 1970-01-01
                    • 2011-07-07
                    • 2013-03-24
                    • 2013-03-11
                    • 2017-09-23
                    • 2018-07-28
                    相关资源
                    最近更新 更多