从其他可能会关闭为重复的线程中转移了我的答案...
来自GIT文档:Git Docs
以下提供了完整的信息。简而言之,simple
仅推送当前工作分支
,并且仅在远程具有相同名称时才这样做。对于初学者来说,这是非常好的设置,并将成为GIT 2.0
的默认设置
而matching
将本地所有与远程相同名称的分支一起推送(不考虑您当前的工作分支)。这意味着可能会推送许多不同的分支,包括您可能不想共享的分支。
在我的个人使用中,我通常使用不同的选项:current
,它会推送当前工作分支(因为我总是为任何更改创建一个新分支)。但对于初学者,我建议使用simple
push.default
定义了当没有明确给出refspec时,git push应该采取的操作。不同的值适用于特定的工作流程;例如,在纯中央工作流程中(即提取源等于推送目标),上游可能是您想要的。可能的值包括:
nothing - 除非明确给出refspec,否则不要推送任何内容(错误输出)。这主要是为那些希望始终明确避免错误的人准备的。
current - 推送当前分支以更新接收端上具有相同名称的分支。在中央和非中央工作流程中均可使用。
upstream - 将当前分支推回通常集成到当前分支中的更改的分支(称为@{upstream})中。仅当您将要推送到与您通常从中拉取的存储库相同时,此模式才有意义(即中央工作流程)。
simple - 在集中式工作流程中,像上游一样工作,并添加了一个安全功能,以拒绝推送上游分支名称与本地分支名称不同的情况。
当推送到与您通常从中拉取的远程不同的远程时,按照当前方式工作。这是最安全的选项,适合初学者。
此模式将成为Git 2.0的默认模式。
matching - 推送两端具有相同名称的所有分支。这使您要推送到的存储库记住将被推出的分支集(例如,如果您总是在那里推送maint和master,并且没有其他分支,则您要推送到的存储库将具有这两个分支,而您的本地maint和master将被推送到那里)。
要有效使用此模式,您必须确保在运行git push之前准备好要推出的所有分支,因为此模式的整个重点是允许您一次性推出所有分支。如果您通常只完成一个分支上的工作并推出结果,而其他分支尚未完成,则此模式不适合您。此模式也不适用于推送到共享中央存储库,因为其他人可能会在那里添加新分支,或者更新您无法控制的现有分支的提示。
这是当前的默认设置,但Git 2.0将把默认设置更改为simple。