在Git-config中,您可以看到:
简单 - 在集中式工作流程中,如果上游分支的名称与本地分支的名称不同,则可以像上游一样工作,并增加安全性以拒绝推送。
当推送到与您通常从中拉出的遥控器不同的遥控器时,作为当前工作。
所以Git
必须在喜欢upstream
或工作之间做出决定current
。但是如何Git
检测工作流的类型?如果理解我们想要与存储库通信,是否Git
认为工作流是?centralized
bare
在Git-config中,您可以看到:
简单 - 在集中式工作流程中,如果上游分支的名称与本地分支的名称不同,则可以像上游一样工作,并增加安全性以拒绝推送。
当推送到与您通常从中拉出的遥控器不同的遥控器时,作为当前工作。
所以Git
必须在喜欢upstream
或工作之间做出决定current
。但是如何Git
检测工作流的类型?如果理解我们想要与存储库通信,是否Git
认为工作流是?centralized
bare
您链接的相同文档中的描述为upstream
您提供了问题的答案。
仅当您推送到您通常会从中提取的同一存储库(即中央工作流程)时,此模式才有意义。
因此,在这种情况下,“中央工作流程”被定义为“您推送到通常从中获取最新上游更改的同一个仓库”,无论您使用 rebase 还是 merge。(pull = fetch+merge 或 fetch+rebase,取决于配置和参数)
无论您是否有“中央工作流程”,在这种情况下,每个推送调用都可能不同。如果您为要推送的本地分支设置了远程跟踪分支(上游分支),那么此跟踪分支是您通常从中获取更新的地方(它是您跟踪的分支),因此如果您执行变基或合并(或者当然是拉,因为它是 fetch+merge 或 fetch+pull)而不指定要重新定位到什么或要合并到什么,然后使用远程跟踪分支。
现在,如果您推送,Git 会知道您是否推送到同一远程的同一分支,该远程已设置为跟踪分支,用于将要推送的本地分支。如果匹配,则在此上下文中定义为“中央工作流”并upstream
使用,如果没有或没有设置跟踪分支(也是“不”的情况),current
则使用。
区别在于:
当前:
foo
跟踪远程分支bar/baz
:
foo
如果您没有另外说明,您将推送到分支。 foo
跟踪远程分支bar/foo
:
foo
如果您没有另外说明,您将推送到分支。 foo
不跟踪任何远程分支:
foo
如果您没有另外说明,您将推送到分支。上游:
foo
跟踪远程分支bar/baz
:
bar
,您将推送到分支。baz
foo
跟踪远程分支bar/foo
:
bar
,您将推送到分支。foo
foo
不跟踪任何远程分支:
简单:
foo
跟踪远程分支bar/baz
:
bar
时,您会收到一个错误,告诉您由于名称不匹配而显式推送foo
。foo
跟踪远程分支bar/foo
:
foo
如果您没有另外说明,您将推送到分支。 foo
不跟踪任何远程分支: