如果我推动一个非跟踪分支会发生什么?

时间:2015-08-04 12:37:15

标签: git

考虑以下流程:

1)git checkout -b newbranch

2)做一些提交......

3)

git push

观察

  • newbranch不跟踪任何远程
  • 在bitbucket上,创建了一个新的分支:'newbranch'

为什么我可以从这个分支推拉?我刚刚阅读http://git-scm.com/book/ch3-5.html,据我所知,这不应该有用。

因为我可以与其他人合作使用'newbranch',合并等等。

基本上我无法看到跟踪分支和非跟踪分支之间的区别。这可能是因为我只使用git来处理差异无关的特殊情况?

评论:我确实了解跟踪以及如何设置它。问题是我不明白为什么非跟踪设置的工作方式如此。我也意识到我一直在使用这样的git

根据评论中的要求:

$ git config -l
user.email=********$
user.name=*********
push.default=current
color.ui=true
core.editor=vim
credential.helper=cache --timeout=3600
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=********
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master

-

2 个答案:

答案 0 :(得分:2)

它与你的git配置中push.default的值有关。

来自git-config

  

current - 推送当前分支以更新接收端具有相同名称的分支。适用于中央和非中央工作流程。

这意味着git只是在服务器上查找具有匹配名称的分支。如果您将此值更改为upstream(或问题simple),您将无法推送到未跟踪的分支,而currentmatching也会让您推送到没有跟踪的分支。

答案 1 :(得分:1)

推动非跟踪分支仍然推动该分支。它只是没有设置跟踪。该分支中的提交被推送到远程。远程分支是由相同的名称创建的,并且将包含相同的提交,但Git只是不跟踪该远程分支上的更改到本地分支。

你可以从这个分支推送和拉取的根本原因与Git如何创建提交有关。无论这些提交是否属于跟踪分支,每个提交都有一个父提交。基本上,提交是一个链表。推送和拉动,实际上只是在引擎盖下合并,是基于提交完成的,而不是分支“跟踪”另一个分支的事实。