Git提交打开空白文本文件,为了什么?

时间:2008-09-13 02:48:41

标签: git git-commit

在我读过的所有Git教程中,他们都说你可以这样做:

git init
git add .
git commit

当我这样做时,我会打开一个大文本文件。这些教程似乎都没有解决这个问题,因此我不知道如何处理该文件或者如果有的话,该怎么做。

17 个答案:

答案 0 :(得分:121)

您打算将提交消息放在此文本文件中,然后保存并退出。

您可以使用此命令更改git使用的默认文本编辑器:

git config --global core.editor "nano"

您必须将nano更改为通常打开文本编辑器的任何命令。

答案 1 :(得分:63)

正如Ben Collins所提到的,没有-m "..."参数来输入提交内联(这通常是一个坏主意,因为它鼓励你简短),这个打开的“大文本文件” up是一个用于输入提交消息的窗口。

通常建议在第一行写一个摘要,跳过一行,然后在下面写下更详细的注释;这有助于程序执行诸如使用适当的主题行通过电子邮件发送提交消息以及在正文中进行的完整更改列表。

您还可以通过在EDITOR文件中添加其他行来更改使用的编辑器,而不是更改~/.gitconfig shell变量:

[core]
    editor = emacs
    excludesfile = /Users/will/.gitignore

第二行实际上与你的问题无关,但我觉得它非常有用,所以我可以使用我知道的所有文件类型填充我的~/.gitignore文件我永远不会,永远,想要提交到存储库。

答案 2 :(得分:36)

正在打开的文本文件是当前提交操作的摘要。 git commit会将您放入此文件中,以便您可以在文件顶部添加提交消息。添加完消息后,只需保存并退出此文件即可。

此命令上还有一个“-m msg”开关,允许您在命令行上添加提交消息。

答案 3 :(得分:15)

假设您的编辑器默认为vi / vim,您可以通过输入以下命令退出提交消息编辑器:

:x

将保存并退出提交消息文件。然后你将回到正常的git命令部分。

更多vi命令:
http://www.lagmonster.org/docs/vi.html

答案 4 :(得分:14)

如果您使用的是Mac OS X并使用BBEdit,则可以将其设置为提交消息的首选编辑器:

git config --global core.editor "bbedit -w"

完成编辑后,保存并关闭文件,git会将其用于评论。

答案 5 :(得分:12)

正如所有人都说的那样,这就是你添加提交评论的地方 - 但对于某些人来说,如果你没有配置你的编辑器设置,你可能仍然会混淆esp,而你却不知道VI是什么:那么你可能会感到震惊,因为你会认为你还在GIT-Bash

在这种情况下,你实际上是在一个文本编辑器中,有一些有趣的处理方式,this set of commands可以帮助你,以便你可以通过你的第一次提交,然后配置你熟悉的编辑器或者将其作为学习如何使用它的机会。

答案 6 :(得分:11)

要提交的-m选项允许您在命令行上输入提交消息:

git commit -m "my first commit"

答案 7 :(得分:7)

当你创建一个新的提交时,git会启动一个文本编辑器并将一些内容写入其中。

使用此文本编辑器,您的目的是编写与您的feshly创建的提交相关联的提交消息。

完成此操作后,保存并退出文本编辑器。 Git将使用您编写的提交消息。

提交消息具有特定结构,如下所述:

提交消息的第一行用作消息头(或标题)。提交头的优先级长度少于40个字符,因为这是github在截断它之前在给定存储库的“提交”选项卡上显示的字符数,有些人觉得这些字符很烦人。

在编写标题时,对第一个单词使用大写的现在时单动词是常见的做法,尽管根本不需要。

一个换行符描述了邮件的标题和正文。

身体可以包含你喜欢的任何东西。您提交的更改概述是合理的。一些第三方应用程序使用包含提交消息体的信息来引发各种钩子(我在想Gerrit和Pivotal Tracker,两个名字)。

这是一个简短而又甜蜜的例子。前导#表示评论。

Gitignore index.pyc

Ignore gunicorn generated binary file
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch dev
# Your branch is ahead of 'origin/dev' by 10 commits.
#   (use "git push" to publish your local commits)
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   .gitignore
#

Here一位托瓦尔兹先生就什么做出了很好的承诺。

here Tpope同样如此。

如其他几个答案中所述,更改默认编辑器是命令行上的一行代码。

根据我的喜好:

git config --global core.editor "vim"

答案 8 :(得分:6)

完成输入消息后,尝试Escape然后尝试ZZ。 正如其他人所说,当你运行该提交命令时,它实际上运行一个文本编辑器来输入消息。 在我的情况下(OS X)它是VI,我在经过一些挖掘后想出来了。 在这种情况下,按Escape进入“命令”模式(与INSERT模式相反)进入ZZ。我确信还有其他方法可以完成任务,但这样做对我而言。 从未使用过VI或emacs,这对我来说并不是很明显,并且在我使用的任何初学者指南中都没有提及。 希望这会有所帮助。

答案 9 :(得分:3)

git commit命令将打开EDITOR环境变量中指定的编辑器,以便您输入提交注释。在Linux或BSD系统上,默认情况下应该是vi,尽管任何编辑器都应该工作。

只需输入您的评论并保存文件即可。

答案 10 :(得分:2)

我很困惑,因为我一直试图在VIM中输入一个文件名:w。这不会触发提交。相反,我不断收到消息“由于空提交消息而中止提交”。不要在:w之后放置文件名。 :w默认将文件保存到.git / COMMIT_EDITMSG。然后:q退出以完成提交。你可以用git log看到结果。

答案 11 :(得分:2)

现在我已将编辑器更改为emacs,一切正常。

但在我设置之前,“git commit -a”确实打开了gedit,但也立即以“由于空提交消息而中止提交”结束。从gedit保存文件没有任何效果。用“git config --global core.editor”gedit“”显式设置编辑器有相同的结果。

emacs没有任何问题,但出于好奇,为什么这不适用于gedit,有没有办法让它工作?

感谢。

答案 12 :(得分:2)

对于那些使用OS X的人,我发现这个命令运行良好:
git config --global core.editor "open -t -W"

将强制git打开默认文本编辑器(在我的情况下为textedit),然后等待您退出应用程序。请记住,在提交完成之前,您需要“保存”然后“退出”textedit。您可以使用本页详细介绍的其他一些命令:

Apple Developer Library - Open Command

如果您希望git始终打开textedit而不管默认编辑器是什么,您也可以尝试git config --global core.editor "open -e -W"

答案 13 :(得分:1)

是的,确保你有一个明智的编辑器。不确定你的默认编辑器是什么,但如果像我一样,它是nano(在你输入提交后会说到顶部附近),你只需输入注释然后点击Ctrl-x即可完成。然后点击y,然后按回车确认提交。

另外,如果你想看一个你要提交的文件的简单列表,而不是事先尝试一个巨大的差异列表,试试

git diff --name-only

答案 14 :(得分:1)

对终端也不熟悉,“Escape然后ZZ”为我工作,我已经有好几个月的问题了,也无法找到解决方法。

感谢Geoff的简单建议!

答案 15 :(得分:1)

在进行修订控制时,您应该始终解释您所做的更改。通常是您第一次有评论,例如“初始提交”。

但是从长远来看,你想为每次提交做出好评。你会想要一些形式的东西:

  

添加了实验性功能x。

     

X会提高性能   条件Z中的Y特征。你应该   需要X用-x或激活它   --feature-eks开关。这解决了功能请求#1138。

答案 16 :(得分:0)

以下可能是提交所有更改的最简单方法:

git commit -a -m "Type your commit message here..."

当然有更详细的提交方式,但这应该让你开始。