为什么git提示我进行拉取后合并提交信息?

161

最近,在执行git pull之后,Git开始生成我的文本编辑器,并要求输入合并提交信息。已经预填了一个提交消息,我只需要保存并关闭窗口即可完成拉取。

在过去,它会默默地合并,使用标准的提交消息(类似于Merge branch 'dev' of remote.com:/repo into dev)。

我最近通过Homebrew将Git更新到1.7.11.3版本,但是无法想出其他可能更改此行为的原因。这是一种设置,还是有其他方法可以回到以前的方式?

3个回答

173
在git 1.7.10中,Git开发人员认为合并提交太容易了。正如此博客文章所解释的那样,强制应用交互式提交消息行为应该使这些提交消息更加详细,并且可以减少不必要的合并总体频率。
您可以使用--no-edit标志来避免此行为,但是最好不要这样做。像任何提交一样,包括历史记录中的合并提交,都应该被构建得很好。您的历史记录应该毫无用处。

61
谢谢您的帮助。我不同意合并提交始终应该具有描述性。我查找这个问题的原因是,每当我拉取时自动合并都会要求我解释为什么需要进行合并,即使我没有进行任何更改,这很快变得不合理。 - Brian
11
这也是避免此行为的有用资源:http://longair.net/blog/2009/04/16/git-fetch-and-merge/ 如果您只是想更新并且认为没有本地更改,请避免使用git pull;使用git merge --ff-only命令。如果您确实要合并一个分支,请使用git merge --no-ff命令。请注意,不要改变原意。 - Glyph
8
有没有一个配置标志可以关闭这个?每次都要打--no-edit很麻烦。 - LandonSchropp
@Kos:嗯,尝试使用git merge的--no-ff标志。这将强制进行每次合并的合并提交,这可能会得到您想要的结果。然后,通过设置git config --global merge.ff false来“使其永久化”。man git-config应该可以为您提供更多详细信息。我没有简单的方法在这台机器上回退到v1.7.0.4,因此无法测试此建议。 - Christopher
3
根据你的 $EDITOR 设置而定,但如果你在 OSX 上使用原装的 git,它可能是一个叫做 'vi' 的程序。输入 i 进入“插入”模式,然后输入你的消息。之后,按下 ESC 并输入 :wq 可以保存并退出。 - Christopher
显示剩余7条评论

70

为了将来使用方便,您可以执行以下操作之一来创建一个快捷方式:

编辑~/.gitconfig文件并添加以下内容:

[core]
    mergeoptions = --no-edit

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

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


17
这对我没用(在OSX上使用git),我已经正确设置了,查看git config --global core.mergeoptions的输出。 - JacobF
终端命令应该像下面这样:git config core.mergeoptions --no-edit - Simsek Mert
@SimsekMert 这只会编辑当前存储库中的 .gitconfig 文件,而不是全局地应用于每个 git 存储库。 - Dallas Clark
@AbhishekGoel 有可能需要重新启动终端才能使更改生效。 - Dallas Clark
@jvannistelrooy 有可能需要重新启动终端才能使更改生效。 - Dallas Clark

14

首先,注意上面Christopher的回答中的警告。

然后,如果你仍想禁用自动合并提交消息编辑,请设置这个环境变量:

    GIT_MERGE_AUTOEDIT=no

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


您能解释一下这与使用 --no-edit 标志有何不同吗? - Alexander Mills
2
我不知道有什么功能上的区别,但方便性使其值得。--no-edit标志必须在每次使用时在命令行上重复,因为它似乎不能像达拉斯·克拉克在这里描述的那样在设置中工作。设置环境变量是我知道的唯一使此设置生效的方法。 - emackey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接