我有一个 master
和a development
分支,都推到了 GitHub上。我有 clone
d, pull
编辑和 fetch
ed,但我仍然无法得到除了 master
分支回来。
我确定我错过了一些明显的东西,但是我已经阅读了手册,而且我一点也不开心。
我有一个 master
和a development
分支,都推到了 GitHub上。我有 clone
d, pull
编辑和 fetch
ed,但我仍然无法得到除了 master
分支回来。
我确定我错过了一些明显的东西,但是我已经阅读了手册,而且我一点也不开心。
$ git clone git://example.com/myproject
$ cd myproject
接下来,查看存储库中的本地分支:
$ git branch
* master
但是您的存储库中还隐藏着其他分支!你可以看到这些使用 -a
旗:
$ git branch -a
* master
remotes/origin/HEAD
remotes/origin/master
remotes/origin/v1.0-stable
remotes/origin/experimental
如果您只是想快速查看上游分支,可以直接查看:
$ git checkout origin/experimental
但是如果你想在那个分支上工作,你需要创建一个本地跟踪分支,它由以下内容自动完成:
$ git checkout experimental
你会看到的
Branch experimental set up to track remote branch experimental from origin.
Switched to a new branch 'experimental'
最后一行引发了一些人:“新分支” - 是吗? 它的真正含义是从索引中获取分支并在本地为您创建。该 以前 line实际上更具信息性,因为它告诉您正在设置分支以跟踪远程分支,这通常意味着origin / branch_name分支
现在,如果你看看当地的分支机构,你会看到:
$ git branch
* experimental
master
您实际上可以使用跟踪多个远程存储库 git remote
。
$ git remote add win32 git://example.com/users/joe/myproject-win32-port
$ git branch -a
* master
remotes/origin/HEAD
remotes/origin/master
remotes/origin/v1.0-stable
remotes/origin/experimental
remotes/win32/master
remotes/win32/new-widgets
在这一点上,事情变得非常疯狂,所以跑步 gitk
看看发生了什么:
$ gitk --all &
如果您想要一次获取许多远程分支,请执行以下操作:
$ git pull --all
现在,您可以根据需要签出任何分支,而无需访问远程存储库。
这个 巴什 脚本帮助我:
#!/bin/bash
for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); do
git branch --track "${branch##*/}" "$branch"
done
它将为除master之外的所有远程分支创建跟踪分支(您可能从原始clone命令获得)。我想你可能还需要做一个
git fetch --all
git pull --all
为了确定。
一个班轮:
git branch -a | grep -v HEAD | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs
像往常一样:在我们知道复制rm -rf Universe之前测试你的设置单行的积分转到用户cfi
使用 --mirror
选项似乎复制了 remote
正确跟踪分支。
但是,它将存储库设置为裸存储库,因此您必须在之后将其重新转换为普通存储库。
git clone --mirror path/to/original path/to/dest/.git
cd path/to/dest
git config --bool core.bare false
git checkout anybranch
您可以轻松切换到分支,而无需使用花哨的“git checkout -b somebranch origin / somebranch”语法。你可以这样做:
git checkout somebranch
Git会自动做正确的事情:
$ git checkout somebranch
Branch somebranch set up to track remote branch somebranch from origin.
Switched to a new branch 'somebranch'
Git将检查具有相同名称的分支是否仅存在于一个远程中,如果存在,则它将以与明确指定它是远程分支相同的方式跟踪它。从Git 1.8.2.1的git-checkout手册页:
如果找不到<branch>但是确实存在跟踪分支 只有一个具有匹配名称的远程(称为<remote>),视为 相当于
$ git checkout -b <branch> --track <remote>/<branch>
关于,
$ git checkout -b实验起源/实验
运用
$ git checkout -t origin/experimental
或者更详细但更容易记住
$ git checkout --track origin/experimental
在跟踪远程存储库方面可能会更好。
您正在执行的获取应该获取所有远程分支,但它不会为它们创建本地分支。如果您使用gitk,您应该看到描述为“remotes / origin / dev”的远程分支或类似的东西。
要基于远程分支创建本地分支,请执行以下操作:
git checkout -b dev refs / remotes / origin / dev
哪个应该返回类似的东西:
Branch dev设置为跟踪远程分支refs / remotes / origin / dev。 切换到新的分支“dev”
现在,当你在dev分支上时,“git pull”会将你的本地dev更新为与远程dev分支相同的点。请注意,它将获取所有分支,但只将您所在的分支拉到树的顶部。
当您执行“git clone git:// location”时,将获取所有分支和标记。
为了在特定的远程分支上工作,假设它是原始远程:
git checkout -b branch origin/branchname
使用别名。虽然没有任何原生Git单行,但您可以将自己定义为
git config --global alias.clone-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t'
然后用它作为
git clone-branches
这不是太复杂,非常简单和直接的步骤如下;
git fetch origin
这将使所有远程分支到您的本地。
git branch -a
这将显示所有远程分支。
git checkout --track origin/<branch you want to checkout>
通过以下命令验证您是否在所需的分支中;
git branch
输出将是这样的;
*your current branch
some branch2
some branch3
注意表示当前分支的*符号。
git clone
下载所有远程远程分支但仍将其视为“远程”,即使这些文件位于新的存储库中。这有一个例外,即克隆过程从名为“master”的远程分支创建一个名为“master”的本地分支。默认, git branch
只显示本地分支,这就是为什么你只看到“主”。
git branch -a
显示所有分支, 包括远程分支。
如果你真的想在一个分支上工作,你可能想要它的“本地”版本。简单地从远程分支创建本地分支 (不检查它们,从而改变工作目录的内容)你可以这样做:
git branch branchone origin/branchone
git branch branchtwo origin/branchtwo
git branch branchthree origin/branchthree
在这个例子中, branchone
是您正在创建的本地分支的名称 origin/branchone
;如果您想要创建具有不同名称的本地分支,则可以执行以下操作:
git branch localbranchname origin/branchone
一旦你创建了一个本地分支,你就可以看到它 git branch
(记住,你不需要 -a
看当地的分支机构)。