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

are*_*zzo 250 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")
Run Code Online (Sandbox Code Playgroud)

但之后,当我这样做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")
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Pet*_*ton 394

正如消息所说:

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

Git有一个"临时区域",在提交之前需要添加文件,你可以在这里阅读它的解释.


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

git commit -am "save arezzo files"
Run Code Online (Sandbox Code Playgroud)

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

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

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


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

  • 不,我的意思是互动添加. (3认同)
  • 在将代码推送到远程存储库之前,本地存储库本身就是一种暂存区域.为什么在提交更改之前添加另一个"层",是不是有点过于复杂?我是git的新手,但我想99,99%的开发人员总是使用commit -am,因为无论如何这些更改都不会超出本地环境. (2认同)
  • 我想我刚刚碰到这个因为我已经习惯了我的IDE为我照顾它.不知道为什么它也是必要的步骤,但是又一次,有很多关于我没有得到的git ...我的意思是git ... (2认同)

Fem*_*ref 49

您没有添加更改.要么通过特别添加它们

git add filename1 filename2
Run Code Online (Sandbox Code Playgroud)

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

git add .
Run Code Online (Sandbox Code Playgroud)

或者-a在提交时使用速记:

git commit -a -m "message".
Run Code Online (Sandbox Code Playgroud)


Bap*_*net 39

你应该做:

git commit . -m "save arezzo files"
Run Code Online (Sandbox Code Playgroud)

  • 这似乎是OP问题的正确答案.他不想"添加",他想提交修改后的东西. (4认同)

Sim*_*son 7

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

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


Alb*_*upp 7

你可以做到:

git add -u -n
Run Code Online (Sandbox Code Playgroud)

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

git add -u
Run Code Online (Sandbox Code Playgroud)

添加刚刚修改过的文件


drj*_*nco 6

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

rm -rf .git
Run Code Online (Sandbox Code Playgroud)

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