git - 什么是跟踪分支?

标签 git version-control branch

有人可以解释适用于 git 的“跟踪分支”吗?

这是来自 git-scm.com 的定义:

A 'tracking branch' in Git is a local branch that is connected to a remote branch. When you push and pull on that branch, it automatically pushes and pulls to the remote branch that it is connected with.

Use this if you always pull from the same upstream branch into the new branch, and if you don't want to use "git pull" explicitly.

不幸的是,作为 git 的新手并且来自 SVN,这个定义对我来说完全没有意义。

我正在通读“The Pragmatic Guide to Git”(顺便说一句,这本书很棒),他们似乎建议跟踪分支是一件好事,并且在创建你的第一个远程(在本例中为 origin)之后,你应该将您的 master 分支设置为跟踪分支,但遗憾的是它没有涵盖为什么跟踪分支是一件好事或者将您的 master 分支设置为原始存储库的跟踪分支

谁能给我讲讲(英文)?

最佳答案

ProGit booka very good explanation :

跟踪分支

从远程分支 checkout 本地分支会自动创建所谓的跟踪分支。跟踪分支是与远程分支有直接关系的本地分支。如果您在跟踪分支上并键入 git push,Git 会自动知道要推送到哪个服务器和分支。此外,在这些分支之一上运行 git pull 会获取所有远程引用,然后自动 merge 到相应的远程分支中。

当您克隆一个存储库时,它通常会自动创建一个跟踪 origin/master 的 master 分支。这就是为什么 git pushgit pull 无需其他参数即可开箱即用的原因。但是,如果您愿意,您可以设置其他跟踪分支——那些不跟踪原始分支且不跟踪主分支的分支。简单的情况就是您刚刚看到的示例,运行 git checkout -b [branch] [remotename]/[branch]。如果你有 Git 版本 1.6.2 或更高版本,你还可以使用 --track 简写:

$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch refs/remotes/origin/serverfix.
Switched to a new branch "serverfix"

要设置与远程分支名称不同的本地分支,您可以轻松地使用具有不同本地分支名称的第一个版本:

$ git checkout -b sf origin/serverfix
Branch sf set up to track remote branch refs/remotes/origin/serverfix.
Switched to a new branch "sf"

现在,您的本地分支 sf 将自动推送到 origin/serverfix 和从中 pull 。

奖励:额外的 git status 信息

有了跟踪分支,git status 会告诉您距离跟踪分支还有多远——这有助于提醒您尚未推送您的更改!它看起来像这样:

$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

$ git status
On branch dev
Your branch and 'origin/dev' have diverged,
and have 3 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

关于git - 什么是跟踪分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4693588/

相关文章:

git diff 返回不正确

svn从主干切换到分支

使用可通过 FTP 访问的 Web 服务器进行 Git 托管?

Maven 分支更新项目版本自动化发布工作流

master rebase 后 Git 分支看不到变化

git - 为什么 git revert 在我使用提交哈希时告诉我 "bad revision"?

svn - 受控/促销分支有值(value)吗?

git - merge 具有不同历史的两个不同存储库

git - 如何在不使用 Jenkins git 插件 checkout 文件的情况下获取分支上的最新提交

git - git filter-branch-放弃一系列提交中对一组文件的更改