1

我从 github 克隆了一个带有 2 个分支的仓库:

git clone https://github.com/user/repo
cd repo

当我这样做时git branch,它只显示主分支。然后我做了一个git branch -a它显示所有分支。

master
remotes/origin/HEAD
remotes/origin/master
remotes/origin/develop

然后我做了一个git checkout develop

Branch develop set up to track remote branch develop from origin.
Switched to a new branch 'develop'

然后git checkout master回到master分支。

为什么git checkout develop不同于git checkout origin/develop(它说我处于分离的头部状态)?

4

3 回答 3

2

你应该这样做:

git checkout --track -b develop origin/develop
# or
git checkout -t origin/develop

From git checkout:如果您没有指定起点,它将从当前开始HEADmaster在您的情况下,这意味着您的“开发”分支不是从您认为应该的位置开始)。

在 --track 选项上,请参阅“ Git:什么是跟踪分支? ”。

如果您想在本地仓库中查看/跟踪我们所有的远程分支,请参阅“将所有远程 git 分支跟踪为本地分支”。

您的起点是 master,因为您的 git 分支返回了当前分支:master。
如果你git checkout只是在那里进行开发,它会从当前分支开始。

于 2012-08-03T10:52:36.853 回答
1

当您说 git checkout develop (未指定远程“ origin”)时,它正在尝试签出名为develop. 但是,您的 gitconfig 已设置,因此如果找不到具有该名称的本地分支,它将自动查找origin/develop. 它发现并签出了一个名为develop本地的新分支并自动将其设置为跟踪远程分支。

当您 时git checkout origin/develop,您正在检查上游develop分支的缓存副本。您无法编辑这些分支。这就是为什么 git 告诉你你处于分离的头部状态。

如果要进行更改,则需要提交到本地develop分支,然后执行git push.

于 2012-08-03T11:00:38.010 回答
1

您尚未创建分支“开发”。为此,您需要创建一个跟随 'origin/develop' 分支的分支:

git checkout -b develop origin/develop

新分支“develop”与远程分支“origin/develop”分离。git 故意这样做:解耦允许分支独立变化。出于许多原因,这是可取的,但我认为最有用的两个是:

  1. 您可以进行一系列独立于 github 分支中所做更改的更改。

  2. Changes made in the github repository are not automatically incorporated into your branch, unless you want them to be. If, for example, 'origin/develop' has a history of being particularly unstable, you may want to control when you incorporate new changes into your local branch 'develop'.

于 2012-08-03T11:05:23.583 回答