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

时间:2012-12-12 18:33:20

标签: git

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

我的项目流程已设置为pull develop分支merge之前的功能分支。这个pull几乎总是使用--rebase,所以我试图找出这是否可以作为默认值。

5 个答案:

答案 0 :(得分:155)

现在有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更改所有当前用户(现有和将来)存储库的默认行为。

答案 1 :(得分:110)

怎么样

git config --global --bool pull.rebase true

这将告诉git始终使用rebase。

答案 2 :(得分:34)

答案是否定的。

没有办法设置远程存储库,以便克隆它的每个人都更改了git pull的默认行为。

但是,您可以设置一个服务器端挂钩,检查没有人推送合并提交(可能是something like this)。

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

1。选项branch.<name>.rebase

您可以将本地分支配置为始终使用--rebase,如此,将<name>替换为分支名称:

git config branch.<name>.rebase true

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

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

2。选项branch.autosetuprebase

为每个Git分支运行上一个配置命令可能很麻烦,因此您可以配置Git为每个新分支自动设置它:

git config branch.autosetuprebase always

(您也可以指定neverremotelocal,有关详细信息,请参阅man git-config。)

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

此选项不会影响现有分支。

3。选项pull.rebase

git config --bool pull.rebase true

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

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

答案 3 :(得分:3)

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

@Flimm,我需要添加true以使您的第一个选项正常工作。

所以正确的语法是:

git config branch.<branch>.rebase true

develop分支上运行此命令:

git config branch.develop.rebase true

现在develop中的.git/config部分如下所示:

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

答案 4 :(得分:0)

当前无法为存储库设置默认策略。

如果您自己想要它,并且至少使用git 1.7.9,则可以按以下方式全局设置pull.rebase配置:

git config --global pull.rebase true

但是您必须在每台计算机上执行操作。一种选择是使用该选项配置默认用户主模板/框架。但是,用户可以更改该选项。

如果您不希望合并,则可以定义服务器端挂钩,以拒绝合并合并的推送。

供参考,他是pull.rebase的source documentation

  

为true时,在“ git pull”时将分支重新建立在所获取分支的顶部,而不是从默认远程合并默认分支   运行。请参阅“分支..rebase”以在每个分支上进行设置   基础。

     

合并时,将--rebase-merges选项传递给git rebase,以便本地合并提交包含在rebase中(请参阅git-rebase   有关详细信息)。

     

保留时,也将--preserve-merges传递给git rebase,以便本地提交的合并提交不会通过运行而变平   git pull。

     

值是交互式的时,变基以交互模式运行。

     

注意:这可能是危险的操作;除非您了解其中的含义,否则请勿使用它(有关详细信息,请参见git-rebase