为什么git提示我输入后拉合并提交消息?


142

最近,在any之后git pull,git开始生成我的文本编辑器,并要求合并提交消息。提交消息已经预先填写好了,我只需要保存并关闭窗口即可完成拉取。

过去,它将使用标准提交消息(沿的行Merge branch 'dev' of remote.com:/repo into dev)以静默方式进行合并。

我最近(通过自制程序)将git更新到版本1.7.11.3,但想不出任何其他方法来更改此行为。这是一个设置,还是有其他方法可以恢复到原来的状态?

Answers:


157

在git 1.7.10中,git开发人员认为合并提交可能太容易了。如本博客文章中所述,强制交互式提交消息行为应使这些提交消息更加详细,并可以减少不必要合并的总体频率。

您可以使用该--no-edit标志来避免这种行为,但是,不要这样做。像任何对历史的提交一样,合并提交也应该构造得很好。您的历史记录不过是有用的。


54
谢谢您的帮助。我不同意合并提交应该始终是描述性的。我之所以这样看,是因为每当我拉动时自动合并都要求我解释为什么需要合并,由于没有任何更改时它甚至会这样做,所以这很快变得不合理。
布赖恩

10
这也是避免这种行为的有用资源:longair.net/blog/2009/04/16/git-fetch-and-merge 您应该避免git pull;使用git merge --ff-only,如果你只是想更新,你不认为你有任何本地更改; 使用git merge --no-ff如果你实际上是试图将分支合并。
铭文

6
是否有配置标志可将其关闭?每次必须输入--no-edit是很烦人的。
LandonSchropp

太棒了 感谢您分享@Christopher。
LandonSchropp

3
@SeanCoetzee:这取决于您的$EDITOR设置,但是如果您在OSX上开箱即用git,则可能是一个名为'vi'的程序。键入i以进入“插入”模式;输入您的消息。然后,您可以通过单击ESC然后键入来保存并退出:wq
Christopher

58

要创建供将来使用的快捷方式,请:

~/.gitconfig使用以下内容进行编辑:

[core]
    mergeoptions = --no-edit

或者在终端中执行以下命令

git config --global core.mergeoptions --no-edit


13
这对我不起作用(在OSX上为git),并且我已经正确设置了它,查看的输出git config --global core.mergeoptions
jvannistelrooy

终端命令应如下所示git config core.mergeoptions --no-edit
S. Mert

@SimsekMert将仅在当前存储库中编辑.gitconfig,而不是在每个git存储库中全局编辑
Dallas Clark

@AbhishekGoel,您可能需要重新启动终端才能使更改生效
Dallas Clark

@jvannistelrooy,您可能需要重新启动Terminal才能使更改生效
Dallas Clark

11

首先,请注意上面克里斯托弗的回答中的警告。

然后,如果仍然要禁用自动合并提交消息编辑,请设置以下环境变量:

    GIT_MERGE_AUTOEDIT=no

该环境变量及其“否”设置记录在git merge doc页面上。建议仅在需要非交互式合并的脚本中使用它,但是当然可以将其设置为Shell环境的一部分,以使其效果更持久。


您能解释一下这与使用--no-edit标志有何不同吗?
亚历山大·米尔斯

2
我不知道功能上的差异,但便利性因素使其值得。--no-edit每次使用时,都必须在命令行中重复使用该标志,因为在达拉斯·克拉克(Dallas Clark)的回答此处所述的设置中,该标志似乎不起作用。设置环境变量是我知道保持设置不变的唯一方法。
emackey '18
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.