Dav*_*542 1371 git branch git-branch
我克隆了一个Git存储库,它包含大约五个分支.但是,当我这样做时,git branch我只看到其中一个:
$ git branch
* master
Run Code Online (Sandbox Code Playgroud)
我知道我可以git branch -a看到所有分支,但是我如何在本地拉出所有分支,所以当我这样做时git branch,它显示以下内容?
$ git branch
* master
* staging
* etc...
Run Code Online (Sandbox Code Playgroud)
Woo*_*e88 1844
您可以从所有遥控器中获取一个分支,如下所示:
git fetch --all
Run Code Online (Sandbox Code Playgroud)
fetch更新远程分支的本地副本,这样对于本地分支机构来说总是安全的但是:
fetch不会更新本地分支(跟踪远程分支); 如果你想更新你的本地分支,你仍然需要拉每个分支.
fetch不会创建本地分支(跟踪远程分支),您必须手动执行此操作.如果要列出所有远程分支:
git branch -a
要更新当地的分支机构,其跟踪远程分支机构:
git pull --all
Run Code Online (Sandbox Code Playgroud)
但是,这仍然不够.它仅适用于跟踪远程分支的本地分支.要跟踪所有远程分支,请执行此oneliner BEFORE git pull --all:
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
Run Code Online (Sandbox Code Playgroud)
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all
Run Code Online (Sandbox Code Playgroud)
(看起来拉取所有遥控器的所有分支,但我总是首先获取以确定.)
仅当服务器上存在未由本地分支跟踪的远程分支时,才运行第一个命令.
PS AFAIK git fetch --all和git remote update是等价的.
Kamil Szot的评论,74(至少)人发现有用.
我不得不使用:
Run Code Online (Sandbox Code Playgroud)for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done因为你的代码创建了名为的本地分支,
origin/branchname并且每当我提到它时,我得到的"refname"origin/branchname'都是不明确的.
Lea*_*th2 642
列出远程分支:
git branch -r
您可以将它们作为本地分支机构查看:
git checkout -b LocalName origin/remotebranchname
Mic*_*ner 185
您将需要创建跟踪远程分支的本地分支.
假设您只有一个远程调用origin,此代码段将为所有远程跟踪创建本地分支:
for b in `git branch -r | grep -v -- '->'`; do git branch --track ${b##origin/} $b; done
Run Code Online (Sandbox Code Playgroud)
之后,git fetch --all将更新远程分支的所有本地副本.
此外,git pull --all还将更新本地跟踪分支,但根据您的本地提交以及如何设置"merge"配置选项,它可能会创建合并提交,快进或失败.
GoZ*_*ner 112
如果你这样做:
git fetch origin
Run Code Online (Sandbox Code Playgroud)
然后他们将在当地.如果你然后执行:
git branch -a
Run Code Online (Sandbox Code Playgroud)
你会看到它们被列为遥控器/原点/分支名称.因为他们在当地,你可以随心所欲地做任何事情.例如:
git diff origin/branch-name
Run Code Online (Sandbox Code Playgroud)
要么
git merge origin/branch-name
Run Code Online (Sandbox Code Playgroud)
要么
git checkout -b some-branch origin/branch-name
Run Code Online (Sandbox Code Playgroud)
Joh*_*lan 65
$ git remote update
$ git pull --all
Run Code Online (Sandbox Code Playgroud)
这假定跟踪所有分支.
如果他们不是你可以用Bash解雇这个:
for remote in `git branch -r `; do git branch --track $remote; done
Run Code Online (Sandbox Code Playgroud)
然后运行该命令.
小智 53
Bash for循环对我来说不起作用,但这完全符合我的要求.我的所有分支都在本地镜像为同名.
git checkout --detach
git fetch origin '+refs/heads/*:refs/heads/*'
Run Code Online (Sandbox Code Playgroud)
请参阅Mike DuPont的评论如下.我想我试图在Jenkins服务器上执行此操作,使其处于分离头模式.
Reg*_*man 48
使用git fetch && git checkout RemoteBranchName.
它对我很有用......
Fed*_*ldo 34
克隆存储库时,实际下载了分支的所有信息,但隐藏了分支.用命令
$ git branch -a
Run Code Online (Sandbox Code Playgroud)
您可以显示存储库的所有分支,并使用该命令
$ git checkout -b branchname origin/branchname
Run Code Online (Sandbox Code Playgroud)
然后,您可以一次手动"下载"它们.
然而,有一种更清洁,更快捷的方式,虽然它有点复杂.您需要三个步骤来完成此任务:
第一步
在您的计算机上创建一个新的空文件夹,并从存储库中克隆.git文件夹的镜像副本:
$ cd ~/Desktop && mkdir my_repo_folder && cd my_repo_folder
$ git clone --mirror https://github.com/planetoftheweb/responsivebootstrap.git .git
Run Code Online (Sandbox Code Playgroud)
文件夹my_repo_folder中的本地存储库仍为空,现在只有一个隐藏的.git文件夹,您可以从终端看到"ls -alt"命令.
第二步
通过将git配置的布尔值"裸"切换为false,将此存储库从空(裸)存储库切换到常规存储库:
$ git config --bool core.bare false
Run Code Online (Sandbox Code Playgroud)第三步
抓取当前文件夹中的所有内容并在本地计算机上创建所有分支,从而使其成为正常的repo.
$ git reset --hard
Run Code Online (Sandbox Code Playgroud)所以现在你可以输入命令git branch,你可以看到所有的分支都被下载了.
这是您可以快速克隆包含所有分支的git存储库的快速方法,但这并不是您希望以这种方式为每个项目执行的操作.
ken*_*orb 26
您可以通过以下方式获取所有分支:
git fetch --all
Run Code Online (Sandbox Code Playgroud)
要么:
git fetch origin --depth=10000 $(git ls-remote -h -t origin)
Run Code Online (Sandbox Code Playgroud)
--depth=10000如果您使存储库变浅,该参数可能会有所帮助.
要拉出所有分支,请使用:
git pull --all
Run Code Online (Sandbox Code Playgroud)
如果上面的命令不起作用,那么在上面的命令之前用:
git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
Run Code Online (Sandbox Code Playgroud)
因为remote.origin.fetch在获取时只能支持特定的分支,特别是当你克隆你的回购时--single-branch.通过检查这一点:git config remote.origin.fetch.
之后你应该能够结账任何分支机构.
也可以看看:
要将所有分支推送到远程,请使用:
git push --all
Run Code Online (Sandbox Code Playgroud)
最终--mirror反映所有裁判.
如果您的目标是复制存储库,请参阅:在GitHub上复制存储库文章.
mar*_*osh 24
我通常只使用这样的命令:
git fetch origin
git checkout --track origin/remote-branch
Run Code Online (Sandbox Code Playgroud)
更短的版本:
git fetch origin
git checkout -t origin/remote-branch
Run Code Online (Sandbox Code Playgroud)
Kar*_*son 23
跟踪远程仓库中存在的所有分支。
手动执行:
您将替换<branch>为从git branch -r.
git branch -r
git branch --track <branch>
Run Code Online (Sandbox Code Playgroud)
使用 bash 脚本执行此操作:
for i in $(git branch -r | grep -vE "HEAD|master"); do git branch --track ${i#*/} $i; done
Run Code Online (Sandbox Code Playgroud)
懒惰的方式(由于合并冲突,这可能会造成混乱,要小心):
git checkout master
git pull
Run Code Online (Sandbox Code Playgroud)
这将从您在本地存储库中跟踪的远程存储库获取分支上的更新。这不会改变您的本地分支机构。您的本地 git repo 现在知道远程 repo 分支上发生的事情。一个例子是一个新的提交已被推送到远程主服务器,现在执行 fetch 会提醒您本地主服务器落后于 1 个提交。
git fetch --all
Run Code Online (Sandbox Code Playgroud)
对从远程分支到本地分支的所有分支进行 fetch 然后合并。一个例子是一个新的提交已被推送到远程主节点,执行拉取将更新您的本地存储库关于远程分支中的更改,然后它将这些更改合并到您的本地分支中。由于合并冲突,这可能会造成相当混乱。
git pull --all
Run Code Online (Sandbox Code Playgroud)
Abh*_*waj 15
我相信你已经通过以下方式克隆了存储库:
git clone https://github.com/pathOfrepository
Run Code Online (Sandbox Code Playgroud)
现在使用cd转到该文件夹:
cd pathOfrepository
Run Code Online (Sandbox Code Playgroud)
如果你输入,git status你可以看到所有:
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
Run Code Online (Sandbox Code Playgroud)
要查看所有隐藏的分支类型:
git branch -a
Run Code Online (Sandbox Code Playgroud)
它将列出所有远程分支.
现在,如果您想要在任何特定分支上结帐,只需输入:
git checkout -b localBranchName origin/RemteBranchName
Run Code Online (Sandbox Code Playgroud)
ing*_*ere 14
如果您在这里寻求获得所有分支的解决方案,然后将所有分支迁移到另一个Git服务器,我将以下过程放在一起.如果您只想让所有分支在本地更新,请在第一个空行停止.
git clone <ORIGINAL_ORIGIN>
git branch -r | awk -F'origin/' '!/HEAD|master/{print $2 " " $1"origin/"$2}' | xargs -L 1 git branch -f --track
git fetch --all --prune --tags
git pull --all
git remote set-url origin <NEW_ORIGIN>
git pull
<resolve_any_merge_conflicts>
git push --all
git push --tags
<check_NEW_ORIGIN_to_ensure_it_matches_ORIGINAL_ORIGIN>
Run Code Online (Sandbox Code Playgroud)
小智 12
克隆主存储库后,您就可以执行了
git fetch && git checkout <branchname>
Run Code Online (Sandbox Code Playgroud)
Gre*_*ner 11
这已经在 Windows 10 上的 Red Hat 和 Git Bash 上进行了测试和运行。
域名注册地址:
for branch in `git branch -r|grep -v ' -> '|cut -d"/" -f2`; do git checkout $branch; git fetch; done;
Run Code Online (Sandbox Code Playgroud)
解释:
一个 liner 检查然后获取除 HEAD 之外的所有分支。
列出远程跟踪分支。
git branch -r
Run Code Online (Sandbox Code Playgroud)
忽略头。
grep -v ' -> '
Run Code Online (Sandbox Code Playgroud)
从遥控器上取下分支名称。
cut -d"/" -f2
Run Code Online (Sandbox Code Playgroud)
签出跟踪单个遥控器的所有分支。
git checkout $branch
Run Code Online (Sandbox Code Playgroud)
获取签出的分支。
git fetch
Run Code Online (Sandbox Code Playgroud)
从技术上讲,新的本地分支不需要 fetch。
这可用于fetch或pull分支是新的和具有远程(S)的变化。
只要确保你准备好合并时才拉。
使用 SSH URL 签出存储库。
git clone git@repository.git
Run Code Online (Sandbox Code Playgroud)
前
检查当地的分支机构。
$ git branch
* master
Run Code Online (Sandbox Code Playgroud)
执行命令
执行一个班轮。
for branch in `git branch -r|grep -v ' -> '|cut -d"/" -f2`; do git checkout $branch; git fetch; done;
Run Code Online (Sandbox Code Playgroud)
后
检查本地分支包括远程分支。
$ git branch
cicd
master
* preprod
Run Code Online (Sandbox Code Playgroud)
Ahm*_*mad 10
确保所有远程分支都可以在.git/config文件中获取.
在此示例中,只有origin/production分支是可获取的,即使您尝试不执行git fetch --all任何操作,但获取production分支:
[origin]
fetch = +refs/heads/production:refs/remotes/origin/production
Run Code Online (Sandbox Code Playgroud)
该行应替换为:
[origin]
fetch = +refs/heads/*:refs/remotes/origin/*
Run Code Online (Sandbox Code Playgroud)
然后运行git fetch等...
循环似乎不适合我,我想忽略原点/主人.这对我有用.
git branch -r | grep -v HEAD | awk -F'/' '{print $2 " " $1"/"$2}' | xargs -L 1 git branch -f --track
Run Code Online (Sandbox Code Playgroud)
之后:
git fetch --all
git pull --all
Run Code Online (Sandbox Code Playgroud)
对于使用 PowerShell 的 Windows 用户:
git branch -r | ForEach-Object {
# Skip default branch, this script assumes
# you already checked-out that branch when cloned the repo
if (-not ($_ -match " -> ")) {
$localBranch = ($_ -replace "^.*?/", "")
$remoteBranch = $_.Trim()
git branch --track "$localBranch" "$remoteBranch"
}
}; git fetch --all; git pull --all
Run Code Online (Sandbox Code Playgroud)
只需这三个命令就可以获得所有分支:
git clone --mirror repo.git .git (gets just .git - bare repository)
git config --bool core.bare false
git reset --hard
Run Code Online (Sandbox Code Playgroud)
这是我认为稳健的东西:
HEAD以跟踪origin/HEADoriginfor b in $(git branch -r --format='%(refname:short)'); do
[[ "${b#*/}" = HEAD ]] && continue
git show-ref -q --heads "${b#*/}" || git branch --track "${b#*/}" "$b";
done
git pull --all
Run Code Online (Sandbox Code Playgroud)
没有必要git fetch --all将此选项-all传递git pull给内部fetch。
归功于这个答案。
玩git的时候要小心,一步一步来。
$ git remote update //This will update your local
$ git branch -a //This will list all the branches(After updating you can now
see the new branch in the list)
$ git checkout your_branch_name
Run Code Online (Sandbox Code Playgroud)
设置别名:(基于最上面的答案)
git config --global alias.track-all-branches '!git fetch --all && for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done && git fetch --all'
Run Code Online (Sandbox Code Playgroud)
现在跟踪所有分支:
git track-all-branches
|\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbefetch/clone\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x86\x93 |\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbecheckout\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x86\x93 \n|\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbepull\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x86\x93\nRemote repository (`origin`) <=> Local repository <=> Index <=> Workspace\n\xe2\x86\x91_________________push_______________| \xe2\x86\x91____commit____| \xe2\x86\x91____add_____| \n\nRun Code Online (Sandbox Code Playgroud)\n\n|\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbefetch/clone\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x86\x93 |\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbecheckout\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x86\x93 \n|\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbepull\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x86\x93\nRemote repository (`origin`) <=> Local repository <=> Index <=> Workspace\n\xe2\x86\x91_________________push_______________| \xe2\x86\x91____commit____| \xe2\x86\x91____add_____| \n\nRun Code Online (Sandbox Code Playgroud)\n
您可以通过这一行命令获取所有分支,如下所示:
git fetch --all && git pull --all && git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1232663 次 |
| 最近记录: |