Git commit打开空白文本文件,是做什么用的?


93

在我阅读的所有Git教程中,他们都说您可以做到:

git init
git add .
git commit

当我这样做时,我打开了一个大文本文件。这些教程似乎都没有解决这个问题,因此我不知道该文件应该怎么做或不知道要放入什么内容。

Answers:


124

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

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

git config --global core.editor "nano"

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


15
您是否不必添加--global更改默认值?
Znarkus 2012年

4
@Znarkus好点。有关更多信息,请参见此处。基本上,给出的答案只会更改当前项目的设置,而--global更改当前用户的设置,并--system更改该计算机上的每个人的设置。
马特·芬威克

24
尽管此答案提供了很好的信息,但并未解决实际的问题。
阿德里安·施密特

5
我不明白为什么这会增加两倍的投票率,因为某些答案实际上可以回答问题。这不是。
2014年

2
@Johan,您没看错,但是偶然发现了这个问题,我发现这个答案非常有帮助。所以我投票了。
Danation

65

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

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

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

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

这第二条线实际上已经无关,与你的问题,但我觉得它确实有用,所以我可以填充我的~/.gitignore文件,所有这些文件类型,我知道我将永远,永远,要提交到存储库。


36

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

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


嗨,娄,我也是GIt的初学者。我认为在存在或写入并存在文本文件之后,git实际上并没有提交我刚刚编写的阶段和提交消息。因此,如果在写完并退出后仍无法提交,将消息添加到此文本文件的含义是什么。(如果我错了,请纠正我,非常感谢)
SLN 2016年

@SLN您概述的场景不是很清楚。我要猜测一下,建议您可能尚未暂存任何要提交的文件,因此您的提交尝试无济于事。使用“ git add”到要提交的第一阶段文件,然后使用“ git commit”执行实际的提交。
Lou的

15

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

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

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


15

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

:x

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

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


9
如果您像我一样,则处于插入/替换模式(即,输入提交消息)。如果是这样,您必须先esc打入命令模式,然后再键入:x保存和退出。
马丁·卡尼

1
当然,假设他的编辑器默认为vi / vim。这不是每个人都正确。当然不适合这个emacs用户;)
haziz 2012年

这省了我很多麻烦。非常感谢你非常
Danation

12

就像大家都说过的那样,这只是添加提交注释的地方-但对于某些人来说,如果未配置编辑器设置,并且您不知道VI是什么,可能会使esp感到困惑:然后您可能会感到震惊,因为您会认为自己仍在GIT-Bash中

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


8
我知道在vi中结束总是让我感到震惊:)
罗伯逊(Robertson)将

1
现在事情变得更加有意义。+1
马特·艾伦


7

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

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

完成此操作后,保存并退出文本编辑器。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
#

托瓦尔兹先生在这里对做出好的承诺表示意见。

这里 Tpope做同样。

如其他几个答案所述,在命令行上更改默认编辑器是一种做法。

对于我的偏好:

git config --global core.editor "vim"

2
这应该是问题的公认答案。
mppfiles 2014年

6

输入完消息后,尝试Escape然后ZZ。正如其他人所说的那样,当您运行该commit命令时,它实际上会运行文本编辑器以将消息输入到其中。在我的情况下(OS X)是VI,经过深入研究后我才知道。在这种情况下,按Escape键进入“命令”模式(与INSERT模式相对),输入ZZ。我敢肯定还有其他方法可以完成任务,但这对我来说是成功的。从未使用过VI或emacs,这对我来说并不容易理解,在我使用的任何初学者指南中都没有提及。希望这会有所帮助。


4

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

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


2

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


或者您也可以使用:x保存并退出。
TJ Ellis 2010年

2

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

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

emacs没什么问题,但是出于好奇,为什么这不适用于gedit,有什么方法可以使它工作?

谢谢。


如果gedit已在运行,则执行“ gedit file.txt”将在现有窗口中打开文件并立即返回...您应该将其发布为实际问题,尤其是有关在git上使用gedit的问题。
araqnid

6
也碰到了这个 您可以通过将gedit设置为以“独立”模式运行来解决此问题:git config --global core.editor "gedit -s"
brittohalloran 2011年

2

对于那些使用OS XI的用户来说,此命令可以很好地工作:
git config --global core.editor "open -t -W"

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

Apple开发人员库-打开命令

您还可以尝试git config --global core.editor "open -e -W"是否要让git始终打开textedit而不管默认编辑器是什么。


1

是的,请确保您有一个明智的编辑器设置。不确定您将使用的默认编辑器是什么,但是像我一样,如果它是nano(在您键入commit后会在顶部附近显示),您只需要输入注释,然后按Ctrl-x即可完成。然后按y,然后按Enter确认提交。

另外,如果您想查看要提交的文件的简单列表,而不要事先查看大量的差异列表,请尝试

git diff --name-only

1

在进行版本控制时,应始终说明所做的更改。通常,您第一次收到诸如“初始提交”之类的评论。

但是,从长远来看,您希望为每次提交都提供良好的注释。您将需要某种形式的东西:

添加了实验功能x。

X将在条件Z下提高功能Y的性能。如果需要X,请使用-x或--feature-eks开关将其激活。此地址处理功能请求#1138。


1

也是Terminal的新手,“ Escape然后ZZ”对我来说很有效,几个月来我一直遇到这个问题,也找不到解决的办法。

感谢TheGeoff的简单建议!


0

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.