0

我最近开始使用 Git。通常我使用eclipse Egit,很少使用git shell。在浏览了很多关于 Git 及其分支的材料之后,我仍然对此感到困惑。

我知道关于同一主题的 Stack Overflow 上有 n 个问题,但到目前为止,我只是增加了我的困惑,或者我对分支的知识还不够成熟。因此,关于我的理解,我提出了第 n + 1 个问题。

有人可以确认我的理解是否正确:

  1. 有两种类型的分支:本地分支和远程分支,其中本地分支是本地存储库上的分支,远程分支是远程存储库上的分支
  2. 第三种分支称为远程跟踪分支,每当我们从远程分支获取更改时,它会自动调整其头部以匹配其跟踪的分支。
  3. 所以一个分支只能跟踪一些远程分支而不是任何本地分支。这个对吗?
  4. 当我克隆远程存储库时,会自动创建两种类型的分支,如下所示:
    1. 本地分支称为master。
    2. 一个本地远程跟踪分支,它跟踪远程存储库的主分支。
  5. 我的本地主分支(在上面 4.1 中提到)可以跟踪在本地创建的远程跟踪分支(在 4.2 中提到)吗?
  6. 如果是,我猜它会自动设置为跟踪这个分支,这就是为什么我不需要做任何特别的事情来从我的工作目录中获取/推送到远程存储库的更改,对吧?因此,当我使用 Eclipse 的团队同步获取更改时,会发生以下事情
    1. 远程分支中的更改来自本地远程跟踪分支 (4.2)
    2. 由于我的本地主分支(4.1)设置为跟踪远程跟踪分支(4.2),它们进入我的本地主分支(4.1)。
    3. 他们从我的主分支进入工作目录,对吗?
  7. 当我尝试推送更改时,同样会发生相反的情况对吗?
4

2 回答 2

0
  1. 真的
  2. 错误的。远程跟踪分支只是本地分支。当您从远程仓库获取时,它们绝对不会自行调整。曾经。
  3. 真的
  4. 真的
  5. 不,没有本地主机和单独的远程跟踪本地主机这样的东西。本地主机只能有一个。
  6. 没有任何意义
  7. 没有任何意义

本地分支的远程跟踪只影响pullpush操作。但不是fetch。它允许您在键入这些命令时省略一些参数。

例如,本地主机是远程跟踪源/主机。要将来自 origin/master 的新提交拉入本地 master,您必须确保您的本地 master 已签出,然后:

git pull origin master

但是由于 master 是远程跟踪 origin/master,所以说:

git pull

所以远程跟踪主要是语法糖。

于 2014-03-12T07:38:54.340 回答
0

(对于未来的读者)

我同意从 1 到 4 的问题作者的假设。但是(5)主在获取时无法跟踪原点/主。

当 fetch (6) 时,只有 origin/master 被更新,所以它正在跟踪远程分支(6.1. 是真的)。

但是,对于本地主机和工作可怕,您必须合并或变基(第二个更好)(6.2 和 6.3。是错误的)。

同样,对于推送,您将 master 推送到原点(远程存储库的名称)。您的本地仓库是您的工作目录的更改已提交,因此您的工作目录不会自动推送,是您的本地仓库。

于 2018-05-18T16:52:32.963 回答