【问题标题】:Git commit opens blank text file, for what?Git commit 打开空白文本文件,为什么?
【发布时间】:2010-09-08 18:50:26
【问题描述】:

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

git init
git add .
git commit

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

【问题讨论】:

    标签: git git-commit


    【解决方案1】:

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

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

    git config --global core.editor "nano"
    

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

    【讨论】:

    • 不用加--global改默认吗?
    • @Znarkus 好点。有关更多信息,请参阅here。基本上,给出的答案只会更改当前项目的设置,而--global 会为当前用户更改它,--system 会为该计算机上的每个人更改它。
    • 虽然这个答案包含了很好的信息,但它并没有解决实际问题。
    • 我不明白为什么这有两倍的赞成票作为一些实际回答问题的答案。这没有。
    • @Johan,你没有错,但是偶然发现了这个,我发现这个答案非常有帮助。所以我投了赞成票。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 嗨 Lou,我也是 GIt 的初学者。我认为在我存在或写入并存在文本文件之后,git实际上并没有提交暂存和我刚刚写的提交消息。那么,如果我在写入后无法提交并退出它,那么将消息添加到此文本文件有什么意义。 (如果我错了,请纠正我,非常感谢)
      • @SLN 您概述的场景不是很清楚。我将猜测并建议您可能没有暂存任何文件以进行提交,因此您的提交尝试什么也没做。使用“git add”到您要提交的第一阶段文件,然后使用“git commit”执行实际提交。
      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

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

        :x
        

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

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

        【讨论】:

        • 如果你像我一样,你处于插入/替换模式(即输入提交消息)。如果是这样,您必须先点击esc 进入命令模式,然后再输入:x 保存并退出。
        • 当然假设他的编辑器默认为 vi/vim。这对每个人来说都不是真的。当然不适合这个 emacs 用户 ;)
        • 这为我省去了很多麻烦。非常非常感谢
        【解决方案6】:

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

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

        【讨论】:

        • 我知道最后进入 vi 总是让我震惊 :)
        • 现在事情变得更有意义了。 +1
        【解决方案7】:

        -m 提交选项让您可以在命令行上输入提交消息:

        git commit -m "my first commit"
        

        【讨论】:

          【解决方案8】:

          当你创建一个新的提交时,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
          #
          

          Here 一位 Torvalds 先生认为什么才是好的承诺。

          hereTpope 也是如此。

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

          根据我的喜好:

          git config --global core.editor "vim"
          

          【讨论】:

          • 这应该是问题的公认答案。
          【解决方案9】:

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

          【讨论】:

            【解决方案10】:

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

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

            【讨论】:

              【解决方案11】:

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

              【讨论】:

              • 或者你可以使用 :x 保存并退出。
              【解决方案12】:

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

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

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

              谢谢。

              【讨论】:

              • 如果 gedit 已经在运行,执行“gedit file.txt”将在现有窗口中打开文件并立即返回...您应该将此作为一个实际问题发布,特别是关于将 gedit 与 git 一起使用.
              • 也遇到了这个问题。您可以通过将 gedit 设置为在“独立”模式下运行来修复它:git config --global core.editor "gedit -s"
              【解决方案13】:

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

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

              Apple Developer Library - Open Command

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

              【讨论】:

                【解决方案14】:

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

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

                添加了实验性功能 x。

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

                【讨论】:

                  【解决方案15】:

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

                  感谢 TheGeoff 的简单建议!

                  【讨论】:

                    【解决方案16】:

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

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

                    git diff --name-only
                    

                    【讨论】:

                      【解决方案17】:

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

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

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

                      【讨论】:

                        猜你喜欢
                        • 2018-12-20
                        • 2011-02-15
                        • 1970-01-01
                        • 2016-04-13
                        • 1970-01-01
                        • 2019-08-03
                        • 1970-01-01
                        • 2015-05-22
                        • 1970-01-01
                        相关资源
                        最近更新 更多