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

Mas*_*Man 159 git

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

我的项目流程设置为pulldevelop分支merge功能分支之前进行分支.这pull几乎总是使用--rebase,所以我试图弄清楚这是否是默认值.

Par*_*tes 175

现在有3种不同级别的配置用于默认拉动行为.从最普通到最细粒度,他们是:

1. pull.rebase

将其设置为true意味着git pull总是等同于git pull --rebase(除非branch.<branchname>.rebase明确设置为false).这也可以按存储库或全局设置.

2. branch.autosetuprebase

将其设置为always意味着无论何时创建跟踪分支,都将为其创建如下所示的配置条目.对于更精细的控制,这也可以设置为never,local或者remote可以根据存储库或全局设置.有关git config --help详细信息,请参阅

3. branch.<branchname>.rebase

设置此值true意味着该特定分支将始终通过rebase从其上游拉出,除非git pull --no-rebase明确使用.

结论

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

  • 感谢您的答复.我正在探索是否可以设置一个设置,以便克隆存储库的任何人默认启用它.上面的设置将存储在`〜/ .gitconfig`中,这意味着克隆主机存储库的每个开发人员都需要运行该命令.不抱怨你的解决方案.这是一个很好的,我只想确认我理解你的观点. (4认同)

mac*_*ntu 117

怎么样

git config --global --bool pull.rebase true
Run Code Online (Sandbox Code Playgroud)

这将告诉git始终使用rebase.

  • 谢谢,这适用于现有的跟踪分支机构. (2认同)

Fli*_*imm 34

答案是不.

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

你可以,但是,建立一个服务器端的挂钩来,没有人推动合并的提交(这样的事情,也许).

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

1.选项 branch.<name>.rebase

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

git config branch.<name>.rebase true
Run Code Online (Sandbox Code Playgroud)

运行此操作后master,该master部分.git/config看起来像这样:

[branch "master"]
    remote = origin
    merge = refs/heads/master
    rebase = true
Run Code Online (Sandbox Code Playgroud)

2.选项 branch.autosetuprebase

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

git config branch.autosetuprebase always
Run Code Online (Sandbox Code Playgroud)

(您也可以指定never,, remotelocal查看man git-config详细信息.)

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

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

3.选项 pull.rebase

git config --bool pull.rebase true
Run Code Online (Sandbox Code Playgroud)

(您也可以--global选择它.)

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

  • 唯一真正回答问题的答案。 (2认同)

Dav*_*vid 8

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

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

git config --global pull.rebase true
Run Code Online (Sandbox Code Playgroud)

但你必须在每台机器上做。一种选择可能是使用该选项配置默认用户主模板/框架。但是,用户可能会更改该选项。

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

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

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

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

保留时,还将 --preserve-merges 传递给 git rebase,以便本地提交的合并提交不会因运行 git pull 而被压平。

当值为交互时,变基以交互模式运行。

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