如何使用Git提交文件?

115

所有的教程都没有用!
它们都假设我知道该怎么做。

目前,我的终端窗口是这样启动的...

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       deleted:    httpdocs/newsite/manifest/cache/0a432970ba6491fe65dad60b012e5c95_louloumay2011en-1-4dea3186b7f7b.jpg
#       deleted:    httpdocs/newsite/manifest/cache/0a61b5d7a9e97da78fe602e1ad41edb6_5-4dec7c3d57c80.jpg
#       deleted:    httpdocs/newsite/manifest/cache/0afb6a7716a85d0de46cdd03bb30f75f_fifa_panorama_full_page-01_thu-4dea3d1a0e0f5.jpg
#       deleted:    httpdocs/newsite/manifest/cache/0b3bc9be76a5d3e1e36af4b8dcf98658_free2-4df0e2e08761f.jpg
#       deleted:    httpdocs/newsite/manifest/cache/0b6342913b8e599fac76da452af98ec5_si-feb-2009-1-4dea3d1abcb61.jpg
#       deleted:    httpdocs/newsite/manifest/cache/0b9ddc587340f7744e03c4b2dafacf7f_lou-lou-winter-2009-cover-4dea3d1a9b1a0.jpg
#       deleted:    httpdocs/newsite/manifest/cache/0bf64ff8fc22720b3da20d0730fa6a04_chatelaine-dec-2009-4dea3d18daa30.jpg
#       deleted:    httpdocs/newsite/manifest/cache/0bf664e03eb0a2255b69b02aed85add0_summumfeb2011-2-4dea3188766aa.jpg

但是并没有办法知道如何按照这里所说的去做...
http://learn.github.com/p/normal.html

它只是说:

我们只需键入提交消息并退出编辑器。

这是什么意思?!
仅仅因为说了“只需”,并不意味着很简单...

当我开始输入时,会出现奇怪的东西,提示“recording”或“inserting”,有大约300个文件,还要求我用消息替换每一行?!?

救命啊!

我本来想使用他们方便的Mac应用程序进行操作,但如果超过20个文件左右,它就会卡住!
这是怎么回事?


16
这与我的问题无关。如果我问“如何滑雪下山”,那么你要告诉一个人如何滑雪,而不是说“好吧,你为什么在山上”。 - Kirk Strobeck
3
没有-m参数的提交会启动一个文本编辑器,您可以在其中添加您的注释。(在这种情况下,默认为vim。)教程作者假设您已经知道如何使用它。 - Alex Howansky
可能有比我更熟悉OSX的人可以告诉您如何将默认编辑器设置为其他内容。通常,在您的shell启动配置中是“export EDITOR=/path/to/whatever”。 - Alex Howansky
@Alex: git config --global core.editor '/path/to/editor' @Alex:git config --global core.editor '/path/to/editor' - knittl
6
-1 是因为 RT[F]M。问题似乎出在默认编辑器上,而不是缺乏阅读 git 文档。 - Philip Oakley
11个回答

109

当你运行 git commit 命令时,不添加任何参数,它会打开你的默认编辑器,以便你输入提交信息。保存文件并退出编辑器即可完成提交操作。

看起来你的默认编辑器是 Vi 或 Vim。 当你开始键入字符时出现“奇怪的东西”,这是因为 Vi 不会自动进入插入模式-你需要首先按下键盘上的 i 键!如果你不想这样做,可以将编辑器更改为更简单的选项,例如:

git config --global core.editor nano

假设你已经安装了Nano编辑器,当你提交时,它会自动加载Nano编辑器,对于那些没有使用过像Vi这样的模态编辑器的用户来说,这更加直观。

你在屏幕上看到的文本只是为了提醒你即将要提交的内容。这些行前面有一个#,意味着它们是注释,也就是说,Git会在保存提交消息时忽略这些行。你不需要每个文件都输入一条消息 - 只需在编辑器缓冲区的顶部输入一些文本即可。

如果想要绕过编辑器,可以提供一个作为参数的提交消息,例如:

git commit -m "Added foo to the bar"

当你说“忽略”时,这是否意味着它将保持暂存状态? - Kirk Strobeck
4
不,那些行不会影响即将提交的内容。即使您删除注释行,那些文件仍将被提交。它们只是提醒您在运行“git commit”命令时您的存储库的状态。 - Ben James
那么如果我运行提交,即使该行上有一个 #,更改也会被记录下来吗? - Kirk Strobeck
3
没问题。已经 git add 到索引里的内容就是被提交的内容。 - Ben James
另一个选项是,你可以运行 git commit -a -m "你的提交信息" 代替 git commit。这样就不会启动编辑器了。 - user4516901
显示剩余2条评论

61

在标准的 Vi 编辑器中,您应该执行以下操作:

  1. 按 Esc 键
  2. 输入 ":wq"(不用引号)
  3. 按下 Enter 键

1
这是我的情况。但按Esc键没有用,只有冒号。然后,我输入q!以不保存任何更改。当终端充满文本而没有提示符(美元符号)时,通常是Vi! - Francisco A. Cerda

31

看起来这里唯一的问题是启动了一个你不熟悉的默认编辑器vi或者vim。(快速提示,要想在不保存更改的情况下退出编辑器,按几次Esc,然后输入:q!Enter。)

有几种方法可以设置默认编辑器,而且你也没有说明使用的操作系统,因此很难推荐特定的方法。我建议使用:

 git config --global core.editor "name-of-your-editor"

... 这将为特定编辑器设置全局 git 偏好设置。或者,您可以设置$EDITOR环境变量。


你的 vim 小抄非常有价值,特别是对于那些来自“一个图标胜过千条命令行 ;-)"社区的人们。 - Philip Oakley
1
我刚刚发现http://www.viemu.com/a-why-vi-vim.html在解释为什么vi/vim仍然存在方面非常有帮助。然后迁移到键盘速查表http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html。 - Philip Oakley

21

提交所有更改文件的命令:

git commit -a -m 'My commit comments'

-a参数表示提交所有被编辑的文件。

-m参数后接的字符串将被作为注释添加到提交中。

这将提交你本地驱动器/文件夹中的存储库。如果你想要将更改推送到一个Git服务器/远程托管服务器,那么在上述命令之后输入以下命令:

git push

GitHub的备忘单非常方便。


史诗级的兄弟,不错,谢谢。 - myworldbox

17
我不知道你的系统环境是怎样的,但看起来你输入了以下内容:
git commit

你的默认编辑器已经启动。在最坏的情况下(对你来说),它可能是vim :)

如果你不知道如何退出vim,请使用:q。

如果您遇到进一步的问题,可以使用

git commit -m 'Type your commit message here'

有没有办法选择一个不同的编辑器来打开它?比如nano? - Kirk Strobeck
1
当然:这将把默认编辑器更改为nano:git config --global core.editor nano - pkk
"消息" - Prabs

4

看起来所有的编辑已经包含在索引中了。因此,只需使用commit命令提交即可。

git commit -m "My Commit Message"

通过查看您的消息,我的直觉告诉我您可能不希望将缓存文件包含在您的仓库中。特别是如果这是在运行程序时动态生成的内容。如果是这样的话,您应该将以下行添加到您的.gitignore文件中:

httpdocs/newsite/manifest/cache/*

这是一个子项目,整个目录将被删除。 - Kirk Strobeck
要查看git有哪些命令,请键入“git --help”,这将为您提供所有命令,例如“commit”、“push”、“pull”、“clone”等。要获取特定命令的帮助以及可用的开关,请键入“git commit --help”、“git push --help”,这应该适用于Linux和Mac命令行。如果您想要一个好的命令行应用程序,我建议使用与github相同的“git-scm”链接在此页面上。http://help.github.com/mac-set-up-git/ - Ali

3
当你尝试使用以下命令提交时,如果没有添加消息,就会发生这种情况:
git commit

它启动了一个编辑器环境。输入:q!并按下回车键退出。

这将使您返回终端而不进行提交,请确保再次尝试,这次传递消息:

git commit -m 'Initial commit'

1
这实际上比被接受的答案更有帮助,因为它解释了背景、正在发生的事情以及如何使“奇怪的东西”再次变得正常。 - timmackay

3
Git使用“索引”来准备提交。在提交之前,您可以向索引中添加和删除更改(在您的粘贴中,您已经使用git rm删除了约10个文件)。当索引看起来符合您的要求时,运行git commit
通常这会启动vim。要插入文本,请按i<esc>返回正常模式,按ZZ保存并退出(按ZQ退出而不保存)。voilà,您的提交就完成了。

2
我遇到了相同的问题,我通过输入:q!然后按下Enter键来解决它。这解决了我的问题。之后运行以下命令:git commit -a -m "your comment here"。这应该解决你的问题。

1
那个答案已经在这里给出了(https://dev59.com/b2w05IYBdhLWcg3wsz7N#7080907)...实际上有两次,所以我们不需要再多一个。 - Asons
当我尝试合并分支时,我遇到了这个问题。如果你想继续而不添加提交信息,只需输入:q(不要加!)并按回车键,它将继续提交,并生成一个自动生成的提交信息,说明这两个分支已经合并。相比编写自己的提交信息,这种方式更好,也更清晰。 - tcanbolat

0
  1. 按下 Esc
    重要提示:按下 Esc 后你不会看到任何变化,看起来好像什么都没发生。但请相信已经有所变化

  2. 接下来,输入 :wq
    注意编辑器底部的波浪线下方出现了 :wq,这表明在输入之前按下 Esc 让你进入了下一步。

  3. 按下回车键

为了避免将来出现这些额外步骤,可以通过以下方式进行提交:

git commit -m "关于你所做的某个提交消息"

其中的 -m ‹提交消息› 是关键之处。


喜欢这些修改!感谢您让我在 Stack Overflow 的第一篇帖子更加清晰简洁。 - zadkaj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接