如何使Git拉使用rebase默认为我的所有存储库?

有没有一种方法来设置主机Git存储库,这样从它的(本地)克隆完成的任何git pull默认使用--rebase ?通过在Stack Overflow上搜索,我了解了branch.autosetuprebase,但它需要每个克隆单独配置。

我的项目流程是这样设置的:在mergeing一个特性分支之前,我们pull develop分支。这个pull几乎总是使用--rebase,所以我试图弄清楚这是否可以是默认值。

175593 次浏览

缺省的拉行为现在有3个不同级别的配置。从最一般的到最细的,它们是:

1. pull.rebase

将其设置为true意味着git pull始终等效于git pull --rebase(除非branch.<branchname>.rebase显式设置为false)。这也可以为每个存储库或全局设置。

2. branch.autosetuprebase

将其设置为always意味着每当创建跟踪分支时,将为其创建如下所示的配置项。对于更细粒度的控制,也可以设置为neverlocalremote,并且可以为每个存储库或全局设置。详见git config --help

3.branch.<branchname>.rebase

将其设置为true意味着该特定分支将始终通过重基从其上游提取,除非显式地使用git pull --no-rebase

结论

因此,虽然您不能更改存储库的所有未来克隆的默认行为,但您可以通过git config --global pull.rebase true更改当前用户(现有和未来)存储库的默认行为。

如何

git config --global pull.rebase true

这将告诉git总是拉与rebase。

答案是否定的。

没有一种方法可以设置远程存储库,使每个克隆它的人都改变了git pull的默认行为。

不过,您可以设置一个服务器端钩子,检查是否没有人推送合并提交(可能是就像这样)。

还有一些您可能会感兴趣的配置选项。所有从远程存储库克隆的开发人员都必须自己手动设置。

1. 选择branch.<name>.rebase

你可以配置一个本地分支总是使用--rebase,就像这样,用分支名称替换<name>:

git config branch.<name>.rebase true

master上运行后,.git/config中的master部分如下所示:

[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true

2. 选择branch.autosetuprebase

为每个Git分支运行之前的config命令可能会很麻烦,所以你可以配置Git为每个新分支自动设置:

git config branch.autosetuprebase always

(你也可以指定neverremote,和local,详见man git-config。)

如果没有--global选项,配置将保存到.git/config,并且只影响当前存储库。使用--global,配置将保存到~/.gitconfig,并且每个未配置的存储库都会受到影响。

该选项不会影响已经存在的分支。

3.选择pull.rebase

git config pull.rebase true

(你也可以给它--global选项。)

如果此选项为true,则运行git pull等效于git pull --rebase,除非branch.<name>.rebase已被设置为false

这使得--rebase选项成为在给定分支上发出git pull时的默认选项。

@Flimm,我需要添加true使你的第一个选择工作。

所以正确的语法是:

git config branch.<branch>.rebase true

develop分支上运行此命令:

git config branch.develop.rebase true

现在,.git/config中的develop部分看起来像这样:

[branch "develop"]
remote = origin
merge = refs/heads/develop
rebase = true

目前没有办法为存储库设置默认策略。

如果你想自己使用它,并且至少使用git 1.7.9,你可以全局设置pull.rebase配置,如下所示:

git config --global pull.rebase true

但是你必须在每台机器上做。一个选项是使用该选项配置默认用户主页模板/框架。不过,用户可能会改变这个选项。

如果您不想要合并,您可以定义一个服务器端钩子来拒绝带有合并的推送。

供您参考,他的是pull.rebase的源文档:

当为true时,在获取的分支的顶部重置分支,而不是在“git pull”时从默认远程合并默认分支 运行。看到“分支。Rebase”用于在每个分支上设置 基础。< / p >

当合并时,将——rebase-merge选项传递给git rebase,以便本地合并提交包含在rebase中(参见git-rebase 详情). < / p > 当保存时,还要传递——preserve-merges到git的rebase,这样本地提交的合并提交就不会被运行平化 git拉。< / p >

当该值为interactive时,rebase将以交互模式运行。

注意:这是一个可能有危险的操作;不要使用它,除非你理解它的含义(详见git-rebase)。

如果你正在使用.gitconfig,并且希望在拉取时使用merge而不是rebase,你可以将这个代码段插入到你的.gitconfig中:

[pull]
rebase = false


这将消除在您设置的每个新项目上烦人的警告。