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

4
考虑以下步骤:

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

--


你能否在项目文件夹中运行 git config -l 命令并提供输出?这可能是分支实际上被跟踪了。 - ThanksForAllTheFish
把它添加到问题中。 - tgoossens
1
你使用的 git 版本是哪个?我使用的是1.7.9.5版本,如果没有设置 upstream,就无法将新的本地分支推送到远程分支,因此第3步中不带参数的 git push 对我来说会失败。 - cmbuckley
2个回答

2
这与你的 git 配置中 push.default 的值有关。
引用自git-config

current - 推送当前分支以更新接收端同名分支。在中央和非中央工作流中都可用。

这意味着 git 会简单地在服务器上寻找一个同名的分支。如果你将此值更改为 upstream(或者是 simple),你将无法推送到未跟踪的分支,而 currentmatching 会让你也可以推送到未跟踪的分支。

1
推送非跟踪分支仍会推送该分支,只是不设置跟踪。该分支中的提交将被推送到远程。远程上将创建一个同名分支,并包含相同的提交,但Git不会跟踪远程分支对本地分支的更改。
您可以从该分支推送和拉取的根本原因与Git创建提交的方式有关。每个提交都有一个父提交,无论这些提交是否属于跟踪分支。基本上,提交是一个链接列表。推送和拉取实际上只是在提交的基础上进行合并,而不是一个分支“跟踪”另一个分支的事实。

1
这并没有真正回答他的问题:“为什么我可以从这个分支进行推送和拉取操作?” - ddavison
1
我确实理解追踪以及如何设置它。问题在于,我不明白为什么非追踪设置会以这种方式工作。 - tgoossens
1
@sircapsalot:更新了我的回答以更好地回答这个问题。 - Greg Burghardt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接