我克隆了一个包含许多分支的Git代码库。然而,git branch
只显示了一个分支:
$ git branch
* master
如何在本地拉取所有分支,使得执行git branch
命令时显示以下结果?
$ git branch
* master
* staging
* etc...
我克隆了一个包含许多分支的Git代码库。然而,git branch
只显示了一个分支:
$ git branch
* master
如何在本地拉取所有分支,使得执行git branch
命令时显示以下结果?
$ git branch
* master
* staging
* etc...
git branch -r | grep -v '\->' | sed "s,\x1B\[[0-9;]*[a-zA-Z],,g" | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all
看起来pull会从所有远程仓库获取所有分支,但我总是先fetch以确保。
只有在服务器上存在本地分支未跟踪的远程分支时才运行第一个命令。
你可以这样从所有远程仓库获取所有分支:
git fetch --all
这基本上是一种权力行动。
fetch
会更新远程分支的本地副本,因此对于您的本地分支来说总是安全的,但是:
fetch
不会更新本地跟踪远程分支的分支;如果要更新本地分支,仍然需要拉取每个分支。
fetch
不会创建本地跟踪远程分支的分支,您需要手动执行此操作。如果要列出所有远程分支:
git branch -a
要更新跟踪远程分支的本地分支:
git pull --all
git pull --all
之前执行此单行命令:git branch -r | grep -v '\->' | sed "s,\x1B\[[0-9;]*[a-zA-Z],,g" | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
顺便提一句,据我所知,git fetch --all
和 git remote update
是等价的。
Kamil Szot的comment,人们发现它很有用。
I had to use:
for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done
because your code created local branches named
origin/branchname
and I was getting "refname 'origin/branchname' is ambiguous whenever I referred to it.
git checkout -b localname remotename/remotebranch
命令将其检出到本地分支。 - Learath2for remote in \
git branch -r`; do git branch --track ${remote#origin/} $remote; done`,因为你的代码创建了名为 origin/branchname 的本地分支,每当我引用它时都会出现“refname 'origin/branchname' is ambiguous”的错误提示。 - Kamil Szotgit pull --all; for remote in \
git branch -r | grep -v >`; do git branch --track ${remote#origin/} $remote; done`。这个改动去掉了HEAD。 - kim3erfor /F %remote in ('git branch -r') do ( git branch --track %remote) && git fetch --all && git pull --all
的意思是,在命令行窗口中执行该命令,它会获取远程存储库中所有分支的信息,并在本地创建相应的跟踪分支。然后,它会从远程存储库获取所有变更并将其合并到本地存储库中。 - Max要列出远程分支:
git branch -r
将远程分支检出为本地分支:
git checkout -b local_branch_name origin/remote_branch_name
git checkout remotebranchname
命令,并成功切换到该分支。那么这种方法和你提供的解决方案有什么不同呢? - François Romaingit checkout remotebranchname
以前只会创建一个名为_remotebranchname_的无关分支。 - Learath2您需要创建本地分支来跟踪远程分支。
假设您只有一个名为 origin
的远程仓库,以下代码片段将会为所有远程跟踪分支创建本地分支:
for b in `git branch -r | grep -v -- '->'`; do git branch --track ${b##origin/} $b; done
之后,git fetch --all
将更新所有远程分支的本地副本。
此外,git pull --all
将更新您的本地跟踪分支,但根据您的本地提交以及如何设置“合并”配置选项,它可能会创建一个合并提交、快进或失败。
git pull --all
命令会更新所有本地跟踪分支吗?据我所知,它只会从所有远程仓库更新当前分支。 - Andygit fetch origin
然后它们都将在本地。如果你执行:
git branch -a
你会看到它们被列为remotes/origin/branch-name。既然它们在本地,你可以随意对它们进行操作。例如:
git diff origin/branch-name
或者git merge origin/branch-name
或者git checkout -b some-branch origin/branch-name
git fetch -all
命令会获取所有远程仓库的所有分支。git fetch origin
命令则只会获取远程仓库 origin
的所有分支。后者是 OP 所询问的内容。 - GoZoner$ git remote update
$ git pull --all
for remote in `git branch -r `; do git branch --track $remote; done
main
)。Branch 'origin/quote-filenames' set up to track local branch 'master'。
期望的输出是:分支'quote-filenames'已设置为跟踪来自'origin'的远程分支'quote-filenames'。
这是反向的,将本地分支设为跟踪远程分支的来源。请参阅此答案以获取修复方法。 - Tom Halegit branch -r | grep -v HEAD
; do git branch --track ${REMOTE}; done。 - Antonio PetriccaBash的for
循环对我不起作用,但这正是我想要的。我的起源中的所有分支都被镜像为相同的本地名称。
git checkout --detach
git fetch origin '+refs/heads/*:refs/heads/*'
请参见Mike DuPont在下面的评论。我认为我试图在Jenkins服务器上执行此操作,这会使其处于分离的头状态。
使用git fetch && git checkout RemoteBranchName
。
对我来说非常有效...
origin/branch
;只需说 branch
就足够了)。 - Neil Traft当您克隆存储库时,所有分支的信息都会被下载,但这些分支是隐藏的。通过使用命令
$ git branch -a
您可以展示所有存储库的分支,在命令中使用
$ git checkout -b branchname origin/branchname
您可以手动逐个“下载”它们。
但是,其实有一种更加简洁快速的方法,虽然有点复杂。您需要完成三个步骤:
第一步
在您的电脑上创建一个新的空文件夹,并克隆存储库中.git文件夹的镜像副本:
$ cd ~/Desktop && mkdir my_repo_folder && cd my_repo_folder
$ git clone --mirror https://github.com/planetoftheweb/responsivebootstrap.git .git
my_repo_folder 文件夹内的本地仓库仍然是空的,现在只有一个隐藏的 .git 文件夹,您可以通过终端的 "ls -alt" 命令看到。
第二步
通过将 git 配置中的布尔值 "bare" 切换为 false,将此存储库从空(裸)存储库切换为常规存储库:
$ git config --bool core.bare false
第三步
获取当前文件夹中的所有内容,并在本地计算机上创建所有分支,从而使其成为普通仓库。
$ git reset --hard
现在你只需输入命令git branch
,就可以看到所有分支已下载。
这是一种快速的方式,可以一次克隆包含所有分支的 git 仓库,但并不适用于每个项目。
git fetch --all
git fetch --all
或者:
git fetch origin --depth=10000 $(git ls-remote -h -t origin)
--depth=10000
参数可以帮助您拉取浅层仓库的内容。
git pull --all
git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
由于remote.origin.fetch
只能在获取时支持特定的分支,尤其是当您使用--single-branch
克隆仓库时,请检查此设置:git config remote.origin.fetch
。
之后,您就可以检出任何分支了。
另请参阅:
要将所有分支推送到远程,请使用以下命令:
git push --all
最终使用 --mirror
命令以镜像所有引用。
如果您的目标是复制存储库,请参阅 GitHub 上的复制存储库文章。
depth=1
),配置中还指定了一个特定的分支用于fetch
- depth=1000
参数是帮助我检出特定远程分支的修复方法。 - Sandrapull --all
不会拉取所有分支,而是拉取所有远程分支。 - Bernardo Dal Corno我通常只使用这样的命令:
git fetch origin
git checkout --track origin/remote-branch
简短版本:
git fetch origin
git checkout -t origin/remote-branch
--single-branch
克隆设置后获取所有分支:https://dev59.com/e2Mm5IYBdhLWcg3wT9mU(如果您只指定了一个分支,则`git fetch --all`永远不会起作用!) - Matthew Wilcoxsongit clone --bare <repo url> .git
(请注意,在克隆存储库时需要添加“--bare”和“.git”作为“bare”存储库),然后运行git config --bool core.bare false
(将“bare”标志设置为false),接着执行git reset --hard
(将HEAD移动到存储库的当前HEAD)。现在,如果你运行git branch
,你应该能够看到从所克隆的存储库中获取的所有分支。 - Gabriel Ferraz