有没有办法设置主机Git存储库,以便从其(本地)克隆完成的任何git pull
默认使用--rebase
?通过搜索Stack Overflow,我了解了branch.autosetuprebase
,但需要单独为每个克隆配置它。
我的项目流程已设置为pull
develop
分支merge
之前的功能分支。这个pull
几乎总是使用--rebase
,所以我试图找出这是否可以作为默认值。
答案 0 :(得分:155)
现在有3种不同级别的配置用于默认拉动行为。从最普通到最细粒度,它们是:
pull.rebase
将此设置为true
表示git pull
始终等同于git pull --rebase
(除非branch.<branchname>.rebase
明确设置为false
)。这也可以按存储库或全局设置。
branch.autosetuprebase
将此设置为always
意味着无论何时创建跟踪分支,都将为其创建如下所示的配置条目。对于更细粒度的控制,也可以将其设置为never
,local
或remote
,并且可以按存储库或全局设置。有关详细信息,请参阅git config --help
。
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)。
还有一些您可能感兴趣的配置选项。从远程存储库克隆的所有开发人员都必须手动设置它。
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
branch.autosetuprebase
为每个Git分支运行上一个配置命令可能很麻烦,因此您可以配置Git为每个新分支自动设置它:
git config branch.autosetuprebase always
(您也可以指定never
,remote
和local
,有关详细信息,请参阅man git-config
。)
如果没有--global
选项,配置将保存到.git/config
,并且只会影响当前存储库。使用--global
,配置将保存到~/.gitconfig
,并且每个未配置的存储库都会受到影响。
此选项不会影响现有分支。
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。