16

我已经尝试了一些建议的东西,但似乎没有任何东西可以删除它。当我升级到 Mountain Lion OS X 时,这开始发生。每当我执行 . 时git pull,它都会显示这个令人讨厌的空编辑器,标题为 MERGE_MSG。

如何防止它在我的所有应用程序中全局弹出?

4

4 回答 4

19

您可以传递--no-editgit pull,也可以将环境变量设置GIT_MERGE_AUTOEDITno.

git pull文档中:

   --edit, --no-edit
       Invoke an editor before committing successful mechanical merge to
       further edit the auto-generated merge message, so that the user can
       explain and justify the merge. The --no-edit option can be used to
       accept the auto-generated message (this is generally discouraged).
       The --edit option is still useful if you are giving a draft message
       with the -m option from the command line and want to edit it in the
       editor.

       Older scripts may depend on the historical behaviour of not
       allowing the user to edit the merge log message. They will see an
       editor opened when they run git merge. To make it easier to adjust
       such scripts to the updated behaviour, the environment variable
       GIT_MERGE_AUTOEDIT can be set to no at the beginning of them.
于 2012-11-26T20:18:22.390 回答
4

Git 在这里创建一个合并提交,并希望您在提交消息中添加一些单词。

为什么要合并?Agit pull是 agit fetch后跟 a git merge。后者可能会导致尝试创建合并提交,这似乎发生在您身上。

有几种方法可以避免这种情况。我建议让git pull触发变基而不是合并。这避免了额外的合并提交及其消息。它还有助于保持历史线性。Agit pull --rebase一次性完成此操作(即,它git fetch后面跟着 a git rebase)。

我将其永久配置为:

git config --global pull.rebase true
于 2015-08-05T11:26:13.633 回答
0

将远程分支合并到本地提供更多控制然后拉。合并可以是“快进”(不需要合并消息),合并消息可以是有意义的。Pull 不会为您提供“快进”选项,并且始终会生成不鼓励的默认合并消息。

于 2014-08-22T19:49:06.593 回答
0

Git 2.34(2021 年第四季度)提供了更具弹性的体验,允许.git/MERGE_MSG在两种极端情况下自动删除。:

之前,在 " git rebase" ( man )中的最后一个冲突步骤中检查 HEAD 中的所有路径并继续会导致跳过该步骤(这是预期的),但会留下MERGE_MSG文件$GIT_DIR并混淆下一个 " git commit" ( man ),已通过 Git 2.34(2021 年第四季度)更正。

请参阅Phillip Wood ( )的commit e5ee33ecommit bed9b4ecommit 118ee5c(2021 年 8 月 12 日) 。(由Junio C Hamano 合并 -- --0ba5a0b 提交中,2021 年 9 月 3 日)phillipwood
gitster

rebase --continue: 消除.git/MERGE_MSG

报告人:Victor Gambier
签字人:Phillip Wood
审核人:Elijah Newren

如果用户通过删除索引和工作树中的所有更改来跳过最终提交,则使用 ' git restore' ( man ) (或 read-tree) 然后运行 ​​' git rebase --continue' ( man ) .git/MERGE_MSG将被留下。
这将在用户下次提交时播种提交消息,这不是我们想要发生的。

还有(仍然是 Git 2.34):

请参阅Phillip Wood ( )的提交 f2563c9提交 baf8ec8提交 0c164ae提交 2be6b6f(2021 年 8 月 20 日) 。(由Junio C Hamano 合并 -- --提交 9135259中,2021 年 9 月 3 日)phillipwood
gitster

rebase -r: 快进时不要写 .git/MERGE_MSG

报告人:SZEDER Gábor
签字人:Phillip Wood

当快速转发时,我们不会创建新的提交,因此.git/MERGE_MSG不会被删除,并且最终会在变基完成后播种提交的消息。
通过在快进检查之后写入文件来避免.git/MERGE_MSG在我们快进时写入。
请注意,快进代码没有变化,只是移动了。

请注意,这种更改的实现方式意味着我们在快进时也不再编写作者脚本。
我相信这是安全的,原因如下,但这与我们在快速转发非合并提交时所做的不同。
如果我们改写合并,那么 ' git commit --amend' ( man )将保留我们正在改写的提交的作者身份,因为它会忽略GIT_AUTHOR_*,除非--reset-author通过。
它还将正确的GIT_AUTHOR_*变量导出到任何钩子,并且我们已经测试了改写提交的作者身份。
如果我们不重新措辞,那么我们不再调用spilt_ident(),这意味着我们不再检查提交作者标题是否正常。
然而,这是我们在快速转发非合并提交时已经做的事情,skip_unnecessary_picks()所以我认为我们不在这里检查作者并没有违反任何承诺。

于 2021-09-05T04:46:57.823 回答