95

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

git init
git add .
git commit

当我这样做时,我会打开一个大文本文件。没有任何教程似乎解决了这个问题,所以我不知道如何处理该文件或在其中放入什么(如果有的话)。

4

17 回答 17

128

您应该将提交消息放入此文本文件中,然后保存并退出。

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

git config --global core.editor "nano"

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

于 2009-02-10T12:21:55.797 回答
66

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

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

除了更改EDITORshell 变量,您还可以通过在~/.gitconfig文件中添加附加行来更改使用的编辑器:

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

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

于 2008-09-13T03:44:02.287 回答
36

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

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

于 2008-09-13T03:00:52.450 回答
15

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

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

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

于 2009-09-06T08:54:44.533 回答
15

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

:x

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

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

于 2011-04-21T17:24:31.997 回答
12

正如所有人所说,这只是您添加提交评论的地方 - 但对于某些人来说,如果您没有配置编辑器设置,并且您不知道VI是什么,它可能仍然令人困惑:那么您可能会感到震惊, 因为你会认为你还在 GIT-Bash

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

于 2009-01-21T20:20:31.090 回答
11

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

git commit -m "my first commit"
于 2008-09-13T02:58:36.357 回答
7

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

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

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

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

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

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

一个换行符描述了消息的标题和正文。

身体可以由你喜欢的任何东西组成。您的提交引入的更改的概述是合理的。一些第三方应用程序使用包含提交消息正文的信息来触发各种钩子(我在想 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
#

在这里,一位 Torvalds 先生就什么是好的承诺发表了看法。

在这里, Tpope也是如此。

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

根据我的喜好:

git config --global core.editor "vim"
于 2013-03-20T17:28:13.067 回答
6

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

于 2009-09-23T06:53:48.100 回答
4

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

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

于 2008-09-13T02:56:32.477 回答
2

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

于 2010-06-07T09:00:36.243 回答
2

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

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

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

谢谢。

于 2011-01-11T13:25:38.903 回答
2

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

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

Apple 开发者库 - 打开命令

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

于 2012-04-07T02:11:34.940 回答
1

在进行修订控制时,您应该始终解释您所做的更改是什么。通常在您第一次收到诸如“Initial Commit”之类的评论时。

但是从长远来看,您希望对每次提交都做出良好的评论。您将需要以下形式的东西:

添加了实验功能 x。

X 将在条件 Z 中提高功能 Y 的性能。如果您需要 X 使用 -x 或 --feature-eks 开关激活它。这解决了功能请求 #1138。

于 2008-09-13T03:11:33.033 回答
1

是的,确保你有一个合理的编辑器集。不确定你的默认编辑器是什么,但如果像我一样nano(在你输入 commit 后它会在顶部附近的某个地方这么说)你只需要输入评论然后点击Ctrl-X即可完成。然后点击y,然后enter确认提交。

此外,如果您想查看您将提交的文件的简单列表,而不是事先尝试巨大的差异列表

git diff --name-only
于 2008-09-13T04:09:18.200 回答
1

作为终端的新手,“Escape and then ZZ”对我有用,我已经有这个问题好几个月了,也找不到解决方法。

感谢 TheGeoff 的简单建议!

于 2010-10-21T01:19:47.773 回答
0

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

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

当然,还有更详细的提交方式,但这应该可以帮助您入门。

于 2009-07-03T03:37:35.193 回答