首页 > 解决方案 > git 合并默认选项

问题描述

当我git merge在另一个分支中时,我喜欢传递--edit --log选项。我想让它自动化,但不知道怎么做。

我尝试了什么:

设置[merge]我的全局部分.gitconfig

[merge]
    edit = true
    log = 20

Git 合并不会改变它的默认行为。

注意:我相信这些选项不适用于配置文件,因为我在输出中看不到它们 git help -c | grep merge

创建一个别名merge

如果我以第一种方式定义我的别名:

[alias]
    merge = merge --edit --log

或第二个:

[alias]
    merge = "! git merge $* --edit --log #"

然后我看不到 git 的行为有任何变化。

如果我将我的别名称为其他任何名称merge,那么它会按预期工作(添加编辑和日志选项)。


那么,有什么解决方案可以默认git merge使用吗?--edit --log

标签: windowsgit

解决方案


正如其他人在评论中提到的,如果你命名一个 alias merge,Git 会完全忽略它。也就是说,给定:

[alias]
    merge = foo
    marge = foo

runninggit merge运行标准git merge,但 runninggit marge会给你一个关于git foo不是 Git 命令的错误(当然,假设你没有让自己成为git-foo命令)。

这适用于所有标准 Git 命令。


没有merge.edit设置。或者 - 等效地 - 你可以设置merge.edit任何你喜欢的东西,1但从git merge不检查设置,所以它没有区别。

一个设定merge.log。这默认为false,即,如果您尚未设置它,或者如果您将其设置为false,则git merge其行为方式与默认情况相同。将其设置为true与将其设置为数字 20 具有相同的效果。

除非使用或指定合并消息,否则默认git merge为。如果您使用合并运行方式,则该操作也是默认操作。--edit-m-Fgit pull--edit

merge.log没有效果的一种特殊情况是fast-forward,它根本不是合并。2 由于快进操作没有创建新的提交,因此没有地方放置任何消息,因此merge.log也被忽略。

所有这些都特定于 Git 本身实现的命令行。如果您正在使用其他软件(例如,Eclipse),那么其他软件可能有自己的实现,并且可能会完全忽略Git做事的方式。


1 Git 的设置框架非常通用,所以它允许你设置各种 Git 从不检查的东西。这有一个很好的副作用:这意味着您可以编写自己的命令来使用这些设置。它也有一个不好的副作用:例如,如果你拼错了一个设置名称,你永远不会收到任何警告。

git config文档应该包含对所有 Git 命令有意义的所有设置的主列表。请注意,有时会出现问题:例如,log.decorate可以设置为auto,这在很长一段时间内都是正确的,但直到 Git 2.9.0才记录在案。

2我认为 Git 在某些地方称之为快进合并有点不幸。


推荐阅读