请输入一条提交消息来解释为什么需要合并,特别是如果它将更新的上游合并到主题分支中

我正在使用Git。我从远程存储库拉取并收到错误消息:

请输入一条提交消息来解释为什么需要合并,
特别是如果它将更新的上游合并到主题分支中。

我尝试键入消息并按输入,但什么也没发生。

如何告诉Git/终端我完成了输入我的消息?

我在OS X上使用终端。

812072 次浏览

提交消息来自Git,但实际上是编辑器阻止您退出。这是因为Git使用您的默认编辑器,由于各种原因,通常设置为vi(它可能是您操作系统上的其他东西,例如pico)。

要编写提交消息并退出VI,请按照以下步骤操作:

  1. i(i用于插入)
  2. 写你的合并信息
  3. esc(转义)
  4. 写入:wq(写入并退出)
  5. 然后按回车键

您还可以将Git配置为使用其他编辑器,以避免使用VI(或其近亲VIM)。

实际上这不是错误!这意味着您应该输入一些消息来标记此合并。

我的操作系统是Ubuntu 14.04。如果您使用相同的操作系统,您只需执行以下操作:

  1. 输入一些消息

  2. CtrlCO

  3. 键入文件名(例如“Merge_feature01”)并按输入

  4. CtrlX退出

现在,如果你转到. git,你会发现文件“Merge_feature01”,这实际上是合并日志。

相反,您可以gitCtrlZ并重试提交,但这一次在它之后添加“-m”并在引号中添加消息,然后它将在不提示您使用该页面的情况下提交。

TL; dr✨使用您喜欢的$EDITOR!✨

解决方法不是记住神秘的命令,就像接受的答案一样,但配置Git以使用您喜欢和理解的编辑器!

潜在的问题是Git默认使用的编辑器对大多数人来说太不直观了:Vim。这是因为Vim存在到处都是,而不是因为它是用户友好的😄现在,不要误会我,我❤️Vim,虽然你可以留出一些时间学习vim,试着理解为什么有些人认为Vim是现存最伟大的编辑器,但有一个更快的方法来解决这个问题:-)

就像配置这两个选项一样简单

  1. git config设置core.editor(每个项目,或全局)
  2. VISUALEDITOR环境变量(这也适用于其他程序)。通常将export VISUAL="vscode --wait"填充到您的.bashrc或类似配置中。

我将介绍几个流行编辑器的第一个选项,但GitHub也有一个出色的这对许多编辑来说是个好主意

🔥使用Atom

直接从其文档,在终端中输入:

git config --global core.editor "atom --wait"

Git通常等待编辑器命令完成后再进行,但由于Atom立即分叉到后台进程,这将不起作用,除非你给它--wait选项。这使它像我们想要的那样保持前台进程。

🦄使用Sublime Text

出于与Atom情况相同的原因,您需要一个特殊的标志来向进程发出信号,表明它不应该分叉到后台:

git config --global core.editor "subl -n -w"

🤓使用Visual Studio Code

git config --global core.editor "code --wait"

只要做,

CTRL+X

CTRL+C

它会要求您保存文件,按Y,然后您就完成了。

由于您的本地存储库前面很少提交,git尝试将您的远程合并到您的本地存储库。这可以通过合并处理,但在您的情况下,也许您正在寻找rebase,即将您的提交添加到顶部。您可以使用

git rebasegit pull --rebase

这里有一篇很好的文章解释了git pullgit pull --rebase之间的区别。

https://www.derekgourlay.com/blog/git-when-to-merge-vs-when-to-rebase/

在我的情况下,我在合并后收到了这条消息。决定:按esc,在这种类型之后:qa!

可以试试这个:

git pull --no-edit