Git 什么是跟踪分支?

Git 什么是跟踪分支?,git,version-control,branch,Git,Version Control,Branch,有人能解释一下适用于git的“跟踪分支”吗 以下是以下定义: Git中的“跟踪分支”是本地分支 连接到远程服务器的分支 分支机构。当你推拉它的时候 分支,它会自动推送和 拉到它所在的远程分支 与…有关 如果您总是从底部拉出,请使用此选项 相同的上游分支进入新的 分支,如果您不想使用 “git pull”是显式的 不幸的是,作为git的新手,来自SVN,这个定义对我来说毫无意义 我正在阅读“”(顺便说一句,这本好书),他们似乎建议跟踪分支是件好事,在创建第一个远程(本例中为原点)之后,您应该将主分

有人能解释一下适用于git的“跟踪分支”吗

以下是以下定义:

Git中的“跟踪分支”是本地分支 连接到远程服务器的分支 分支机构。当你推拉它的时候 分支,它会自动推送和 拉到它所在的远程分支 与…有关

如果您总是从底部拉出,请使用此选项 相同的上游分支进入新的 分支,如果您不想使用 “git pull”是显式的

不幸的是,作为git的新手,来自SVN,这个定义对我来说毫无意义

我正在阅读“”(顺便说一句,这本好书),他们似乎建议跟踪分支是件好事,在创建第一个远程(本例中为原点)之后,您应该将主分支设置为跟踪分支,但不幸的是,它没有涵盖为什么跟踪分支是件好事,或者将主分支设置为原始存储库的跟踪分支会带来什么好处

有人能(用英语)告诉我吗?

有:

跟踪分支机构

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

克隆存储库时,它通常会自动创建一个跟踪源/主存储库的主分支。这就是为什么
git push
git 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
并从中拉出

奖金:额外
git状态
info

对于跟踪分支,
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)

:

跟踪分支是与远程分支有直接关系的本地分支

不完全是。所谓“问题”包括:

没有本地跟踪分支的概念,只有远程跟踪分支。
因此
origin/master
origin
回购中
master的远程跟踪分支

但实际上,一旦你建立了一个中间人:

  • 本地分支,如
    master
  • 和一个远程跟踪分支,如
    origin/master
<> P> >您可以考虑<代码> Master <代码>作为<强>本地跟踪分支:它跟踪<强>远程跟踪分支<强> >源>源/主> /代码>,它依次跟踪<代码>源代码< /代码>的主分支。

换句话说,“远程跟踪分支”中的“远程”是指远程分支的本地副本(跟踪),以记住上次获取的内容。
他补充说:

“远程跟踪分支”一词令人困惑

更确切的说法是:

本地远程跟踪分支机构”

否则,有人可能会解释“远程跟踪分支”位于源服务器上


这就是我添加跟踪分支的方式,这样我就可以将其拉入我的新分支:

git branch --set-upstream-to origin/Development new-branch

以下是我关于GIT跟踪分支的个人学习笔记,希望对未来的访问者有所帮助:


跟踪分支和“git获取”:
跟踪分支只不过是为我们节省一些打字时间的一种方式

如果我们跟踪一个分支,我们不必总是键入
git push origin
git pull origin
git fetch origin
git merge origin
鉴于我们命名了远程
源站
,我们可以分别使用
git push
git pull
git fetch
git merge

我们在以下情况下跟踪分支机构:

  • 使用git clone克隆存储库
  • 当我们使用git push-u origin时
  • 。此
    -u
    使其成为跟踪分支
  • 当我们使用
    git branch-u origin/branch\u name branch\u name

  • TL;DR记住,所有git分支本身都用于跟踪一组文件的历史记录。因此,并不是每个分支实际上都是一个“跟踪分支”,因为这些分支就是用来跟踪文件的历史记录的。因此,我们可能应该将普通git称为“分支”,“跟踪分支”,但我们没有。相反,我们把它们的名字缩短为“分支机构”

    这就是为什么“跟踪分支”这个词如此令人困惑的部分原因:对于新手来说,它很容易就意味着两种不同的东西

    在git中,术语“跟踪分支”是更完整术语的简称:“远程跟踪分支”

    如果你先替换更正式的术语,直到你对这些概念更熟悉,可能会更好

    让我们把你的问题重新表述如下:

    什么是“远程跟踪分支?”
    git branch --set-upstream-to origin/Development new-branch
    
    (older) ... <--link1-- Commit1 <--link2-- Commit2 <--link3-- Commit3 (newest)
    
                    parent      children
    
                            +-- Commit <-- Commit <-- Commit (Branch named 'Tom')
                           /
                          v
    (older) ... <-- Commit1 <-- Commit                       (Branch named 'master')    
    
                    parents     child
    
               ... <-- Commit
                            v
                             \
    (older) ... <-- Commit1 <-- Commit2  
    
    $ mkdir mydir &&  cd mydir &&  git init             # create a new git repository
    
    $ git branch                                        # this initially reports no branches
                                                        #  (IMHO this is a bug!)
    
    $ git status -bs       # -b = branch; -s = short    # master branch is empty
    ## No commits yet on master
    
    # ...
    $ touch foo                                         # create a new file
    
    $ vim foo                                           # modify it (OPTIONAL)
    
    
    $ git add         foo; commit -m 'your description'  # start tracking foo 
    $ git rm  --index foo; commit -m 'your description'  # stop  tracking foo 
    $ git rm          foo; commit -m 'your description'  # stop  tracking foo & also delete foo
    
    $ git pull    # Essentially does:  get fetch; git merge    # to update our clone