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

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

git init git add . git commit 

当我这样做,我得到一个大文本文件打开。 这些教程似乎没有解决这个问题,所以我不知道如何处理这个文件,或者如果有什么需要的话。

你的意思是把提交信息放在这个文本文件中,然后保存并退出。

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

 git config --global core.editor "nano" 

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

正如Ben Collins所提到的那样,没有-m "..."参数来键入commit inline(这通常是一个坏主意,因为它鼓励你简洁),这个打开的“大文本文件”就是一个窗口在其中键入提交消息。

通常build议在第一行写一个总结,跳过一行,然后在下面写下更详细的注释; 这有助于程序执行某些操作,例如通过电子邮件提交适当的主题行和正文中所做更改的完整列表。

除了改变EDITORshellvariables外,还可以通过在~/.gitconfig文件中添加额外的行来更改编辑器:

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

第二行实际上与你的问题没有任何关系,但是我发现它非常有用,所以我可以使用所有这些文件types填充我的~/.gitignore文件,我知道我永远不会想要提交到一个存储库。

正在打开的文本文件是当前提交操作的摘要。 git commit把你放到这个文件中,所以你可以在文件的顶部添加一个提交消息。 一旦你添加了你的消息就保存并退出这个文件。

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

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

 :x 

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

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

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

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

一旦完成编辑,保存并closures文件,git将使用它的评论。

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

 git commit -m "my first commit" 

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

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

当你创build一个新的提交,git启动一个文本编辑器,并写入一些东西。

使用这个文本编辑器,你的意图是编写提交信息,这个信息将与你刚创build的提交相关联。

完成之后,保存并退出文本编辑器。 Git会使用你写的提交信息。

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

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

在编写标题时,对第一个单词使用大写的现在时动词是惯例,尽pipe不是必需的。

一个换行符描述了消息的头部和正文。

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

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

git commit命令将打开EDITOR环境variables中指定的EDITOR以便input提交注释。 在Linux或BSD系统上,这应该是默认的vi,尽pipe任何编辑器都应该工作。

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

是的,确保你有一个合理的编辑器。 不知道你是什么默认的编辑器,但如果像我一样,它是纳米(键入提交后,会说在顶部附近),你只需要input一个评论,然后按Ctrl-x完成。 然后打y,然后input确认提交。

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

 git diff --name-only 

在进行版本控制时,你应该总是解释你所做的更改是什么。 通常你第一次有评论,如“初始提交”。

但是,从长远来看,您希望对每个提交做出很好的评论。 你会想要一些forms的东西:

添加了实验functionx。

X将在条件Z中提高特性Y的性能。如果需要X,则使用-x或–feature-eks开关将其激活。 这个地址function请求#1138。

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

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

但是在我设置这个之前,“git commit -a”打开了gedit,但是也立即以“空提交消息中止提交”结束。 从gedit保存文件没有效果。 用“git config –global core.editor”gedit“”显式设置编辑器的结果是一样的。

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

谢谢。

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

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

苹果开发者库 – 打开命令

你也可以尝试git config --global core.editor "open -e -W"如果你想让git总是打开textedit,不pipe默认的编辑器是什么。

对于terminal来说也是新的,“逃脱再ZZ”为我工作,我已经有这个问题好几个月了,也找不到解决办法。

感谢TheGeoff的简单build议!

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

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

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