我克隆了一个Git存储库,其中包含大约五个分支。然而,当我这样做时,我只看到其中一个:
我知道我可以做EDOCX1[1]来查看所有的分支,但是我如何在本地拉所有的分支,所以当我做EDOCX1[0]时,它显示了以下内容?
1 2 3 4
| $ git branch
* master
* staging
* etc... |
- 还将在stackoverflow.com/questions/67699/…上讨论。
- 这个问题显示了克隆时使用--single-branch设置后如何获取所有分支:stackoverflow.com/questions/17714159/…(如果只指定一个分支,git fetch --all将永远无法工作!)
- 您将永远看不到该输出,因为星号表示当前正在签出的分支。由于一次只能签出一个分支,因此分支列表左侧只能有一个星号。
- 下面排名最高的答案忽略了操作的意图。我建议您查看stackoverflow.com/a/72156/342839。git checkout -b 似乎是最有可能的答案。
- 我看到了很多答案,但没有一个提到我认为最简单的方法来做你想做的事情:EDOCX1(注意你需要在结尾加上"-bare"和".git"来克隆回购为"bare"回购),然后git config --bool core.bare false将"bare"标志设为假,然后git reset --hard将回购的头移到当前的头上。现在,如果您是git branch,您应该可以看到您克隆的repo的所有分支。
- 如何克隆Git中所有远程分支的可能副本?
- @加布里埃尔·费拉兹,你为什么不写这个作为答案?
- @皮普:我可以,但是已经有一个912票的赞成票,加上另外20个。我认为更有可能有人会读到我的评论,而不是在这条线索的底部一路的回答。如果你喜欢这个评论,你可以投反对票,这样其他人也更有可能读到它。
- @然后,您将滥用堆栈溢出的注释功能。用户可以对你的评论投赞成票,但不能投反对票。
- git fetch origin会的。
你可以从遥远的地方得到一个分支
本地更新的远程分支副本,所以这对本地分支来说总是安全的,但是:
如果你想更新你的本地分支,你仍然需要每一分支。
不创建本地分支(远程分支),你必须手工完成。如果你想列举所有遥控分支:法国电力公司
To update local brances which track remote brances:
然而,这仍然是令人失望的。它只会为你的本地分支工作,而这些分支是远程分支。To track all remote brances execute this oneliner before git pull --all
1
| git branch -r | grep -v '\->' | while read remote; do git branch --track"${remote#origin/}""$remote"; done |
版本博士
1 2 3
| git branch -r | grep -v '\->' | while read remote; do git branch --track"${remote#origin/}""$remote"; done
git fetch --all
git pull --all |
(看起来所有的分支都是女人的,但我总是先感觉到。)
只有在服务器上有遥控分支时,才运行第一个命令
Afaik git fetch --all和git remote update是等效的。
Kamil Szot's how,which 74(at least)people found useful.
I had to use:
1
| 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.
- 对不起的。我无法想象这正是OP真正想要的。"pull"命令是"fetch+merge",合并部分会将所有分支重叠在一起,留下一个巨大的混乱。
- 这个fetch不会创建一个新的远程分支,您仍然需要使用git checkout -b localname remotename/remotebranch检查它。
- Git是否从我跟踪的所有分支中获取、获取更改?或者我需要在我要从中提取的分支上,其他更改将不会被提取到其他跟踪分支上?(如果有道理的话)
- 我不得不使用for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done,因为您的代码创建了名为origin/branchname的本地分支,我得到的"refname"origin/branchname在我每次提到它时都不明确。
- 我不知道我是否在使用不同版本的Git,但我必须将脚本修改为git pull --all; for remote in `git branch -r | grep -v \>`; do git branch --track ${remote#origin/} $remote; done。这个零钱剥掉了头。
- 对于Windows用户:for /F %remote in ('git branch -r') do ( git branch --track %remote) && git fetch --all && git pull --all
- 这对我的git:1.8.1.2版本根本不起作用,其效果是创建了12个名为"origin/$x"的分支,这些分支都跟踪本地分支"master"。
- git fetch --all和git remote update之间有一个细微的区别,首先是git fetch——所有都是在v1.6.6中添加的。第二次获取——全部将从所有远程回购中提取。请参见Github上的commit 9c4a036b3。github.com/git/git/commit/…
- @kim3er的解决方案对我很有效。所有代码片段的问题在于,当分支名称中有斜线或空格时,它们不起作用。当您需要编写防弹bash脚本时,应该使用while read技巧作为这个git branch -r | while read remote; do git branch --track"${remote#origin/}""$remote"; d并引用变量扩展!
- @马克斯:不得不做一个小小的调整。
- 它使用"origin/"创建分支
- 请用评论更新您的答案。这是误导性的,并用origin/创建分支
- 我的终端中的各种git branch -r命令的颜色输出有问题,无法找到所有的分支。使用git branch -r --no-color防止支持颜色代码的终端上的分支名称无效。
- git pull --all什么也没做:"你要求从遥控器‘all’上拔出,但没有指定一个分支。"
- 在检查评论之前执行命令很愚蠢,我相信接受标记和升级投票…愚蠢的。现在必须从零开始删除repo和克隆。
- 我现在已经根据评论修正了答案,因为我也被这个严重烧伤了。我们来看看情况如何。
- fetch --all不是要取所有的遥控器吗?至少它对我不起作用(不获取新的远程分支)
- git pull只与当前分支合并,即使与--all合并。所以它不会更新除当前分支之外的其他跟踪分支。
- @carlosheuberger fetch all remotes与fetch all branch不同。大多数人只有一个远程(来源),所以获取——所有人很少做任何不同的事情。
- @特比汉姆正是我问的原因,因为问题是要把所有的树枝都拿出来,而不是所有的遥控器!
- 我的PowerShell脚本,用于更新所有新的未跟踪分支并将其拉入:git branch -r | grep -v"\->" | foreach {git branch --track $_.Substring($_.IndexOf("/") + 1)}; git pull --all
- 关于"似乎拉取了所有的分支…"。它几乎在任何一个git手册的封面上,pull执行一个fetch/merge。你为什么不证实这一点,去掉附加的猜测?可能会提到您可以将"pull"配置为"fetch rebase"。
- 问题很清楚:从一个远程取五个分支,而不是从五个远程取一个分支。我不明白这个答案是如何被接受的。
- 这种变化不包括跟踪分支和主分支:for remote in $(git branch -r | grep -v -e"\->" -e master); do git branch --track ${remote#origin/} $remote; done。
- 然而,这再次表明了git命令行前端对其用户的敌意。这也证明了Git的设计从来没有考虑过跨平台的使用,这可以通过对shell命令的荒谬使用来证明,当然,shell命令也会有所不同。最初是由二进制可执行文件和shell脚本混合而成的,目标受众是清晰的,而且从未改变过。甚至是自首次发行以来的近13年。
- 请阅读本文档,不要写,并建议其他人使用ecx1(5),后面是git pull`stackoverflow.com/a/292359/1114926
- git fetch --all和git remote update几乎相同。但是,git remote update默认取remotes.default指定的远程。如果没有设置(默认情况下我认为它不是),那么它将获取所有。最好使用git fetch --all,因为它的行为是一致的。
- 有没有可能有一个git别名为那个一行程序?如果我把它放在.gitconfig文件中,我会得到"致命的:错误的配置行x"
- 我也这么做了,git config --global alias.fa 'branch -r | grep -v">" | while read remote; do git branch --track"${remote#origin/}""$remote"; done'只显示git分支命令定义。
- 作为一个临时的Git用户,这个答案对我来说太高级了。我真的很欣赏它的作者试图做出的区分,但细节却在我身上消失了。对于像我这样的人,git fetch上的Atlassian Git教程很好地解释了背景信息,所以现在这个答案对我来说是有意义的。+ 1!
To list remote brances:法国电力公司
你可以用以下方式检查它们作为本地分支:法国电力公司
- 这正是我发现上述问题时所寻找的。我怀疑许多寻找如何拉一个远程分支的人肯定不想将分支合并到他们当前的工作副本中,但是他们确实想要一个与远程分支相同的本地分支。
- 即使分支在本地不可见,我也可以执行git checkout remotebranchname,它也可以工作。你的解决方案有什么不同?
- 它现在的默认行为。以前的Git版本不是这样的。使用git checkout remotebranchname创建一个新的不相关分支,名为remotebranchname。
- 这是正确的答案。接受的答案不起作用
- 被接受的答案在根本上是不同的,坦率地说,我甚至不明白为什么它是被接受的答案。
- 行动要求所有的分支机构。这个答案只有一个。
- 这一次只适合一个分支。如果有人可以用新命令编辑它(但旧命令仍在工作;)
- 这并没有回答最初的问题:"我如何在本地拉所有的树枝?"它一个接一个地拉动它们,这是不可扩展的。
- 一个同事创建了一个分支并进行了一次公关。我的任务是更新公关,并在检查远程分支及其在本地计算机上的工作时遇到问题。这个解决方案对我有效。谢谢您!
- 简单而清醒
- fatal: Cannot update paths and switch to branch 'develop' at the same time. Did you intend to checkout 'origin/temp' which can not be resolved as commit?,这是我运行应答脚本的结果,有什么问题?
- 不是我的剧本,IDK。在答案下留言?
你需要创建本地分支跟踪远程分支。
假设你只有一个遥控器叫origin,这个Snippet将为远程跟踪系统创建本地分支:
1
| for b in `git branch -r | grep -v -- '->'`; do git branch --track ${b##origin/} $b; done |
之后,将更新所有远程分支的本地副本。
同时,将更新您的本地跟踪分支,但取决于您的本地信件,以及该组件的配置选择是如何设定一个错误、快捷或失败。
- 这将使解决方案针对包含shell元字符的分支名称(根据Pinkeen对另一个答案的评论),并避免虚假错误输出:git branch-r grep-v--"->";while read remote;do git branch--track"$remote origin/""$remote"2>&;1 grep-v'already exists';done
- 您确定git pull --all将更新所有本地跟踪分支机构吗?据我所知,它只更新来自所有远程的当前分支。
- 这样做了。未创建与远程分支匹配的本地分支。什么是git命令,简单地说"拉所有远程分支创建本地分支,如果它们不存在?"
- @约瑟夫也许你的遥控器不是叫origin?请参阅此答案,该答案适用于所有远程名称。
- @汤黑尔,这是"起源",但谢谢你的回答-虽然疯狂,做什么应该是一个或可能是两个旗帜是必要的。我现在正在尝试Gitless,以避免Git某些方面的疯狂。
如果你做:
然后他们就在这里。如果你表演:
你会看到他们被列为远程/起源/分行名称。自从他们在当地你就能随心所欲For example:
1
| git diff origin/branch-name |
黄金
1
| git merge origin/branch-name |
黄金
1
| git checkout -b some-branch origin/branch-name |
- 刚刚在谷歌上找到这个页面…这是我正在寻找的真实答案。我尝试了第一个命令,但收到一个错误:[$git fetch--all origin fatal:fetch--all不接受存储库参数]---使用"git fetch--all"似乎可以做到这一点。谢谢你的领导!
- 固定(已删除--all)
- $git获取--全部
- git fetch -all获取所有远程设备的所有分支。git fetch origin取远程origin的所有分支。后者是OP要求的。
- --all的意思是"所有遥控器",而不是"给定遥控器的所有分支"。后者是通过从远程获取所隐含的。
- OP要求提供启用"branch"而不是"branch-a"的解决方案。
- 这不是将所有分支从远程回购拉入本地回购的方法。
1 2
| $ git remote update
$ git pull --all |
假设所有的分支都被追踪。
如果他们不能在巴斯烧这个
ZZU1
然后运行指挥部。
- 当我尝试的时候,我仍然得到和上面一样的结果。
- 最后一个为我工作……有几个Git错误
- 与@jacoblowe相同,我得到了错误,但它仍然有效;"致命:名为"origin/master"的分支已经存在。"
- 这是丑陋的,因为它会试图为->创建一个分支,可能会在git branch -r的输出中作为'origin/head->origin/master'存在。`
- 而且,它不起作用。我得到输出:Branch 'origin/quote-filenames' set up to track local branch 'master'.所需的输出是:Branch 'quote-filenames' set up to track remote branch 'quote-filenames' from 'origin'.这是向后的,设置原点来跟踪遥控器。请参阅此答案以获取修复方法。
- 只是我需要的。因为我换了Mac,所以即使在克隆了repo之后,我也无法签出其他远程分支,git fetch也无法工作。所以这里的教训是您需要跟踪远程分支。格拉西亚斯!
使用EDOCX1
这对我来说很好。
- 这是新的最佳答案,大家。我不知道这是否在以前是不可能的,但是最新版本的Git至少会注意到您正在尝试签出一个远程分支,并且会自动为您设置本地跟踪分支(您不需要指定origin/branch;只说branch)。
- 这并没有回答最初的问题:"我如何在本地拉所有的树枝?"它一个接一个地拉动它们,这是不可扩展的。
- 这是唯一一个让我在遇到的每一种情况下都能进行远程分支的答案。
罗普不是为我工作,但这正是我想要的。所有的树枝都来自我的原始镜子,就像本地的名字一样。
1 2
| git checkout --detach
git fetch origin '+refs/heads/*:refs/heads/*' |
See Mike Dupont's how below.我想我是在一个Jenkins服务器上尝试做这件事的,而Jenkins服务器将这件事留在了一个深沉的头部时尚。
- 在一个简单的克隆之后产生fatal: Refusing to fetch into current branch refs/heads/master of non-bare repository。必须先拆下头部。我和git checkout 一起做的
- 我使用这个的解决方案是git checkout --detach # detach the head,然后是git fetch origin \'+refs/heads/*:refs/heads/* 。
- 这一个对我有效,除了我还使用--tags参数。我希望Git有一个标准的、简单的前端,Git中需要10个以上堆栈溢出答案的简单事物的数量是荒谬的!
- @克里斯蒂亚普,你有没有查过恩吉特或吉特克拉肯?
- @Dragon788我一直在为GitGUI使用sourcetree,但实际上我在讨论一个更简单的脚本任务命令行。
- @克里斯蒂安啊,我明白了。你可能会看到一些像easygit的东西,people.gnome.org/~newren/eg
- 你也可以做一个git clone .git来设置一个没有内容的裸式回购。然后执行ops命令:git fetch origin '+refs/heads/*:refs/heads/*。
- @克里斯蒂亚普也许可以尝试一下-哲学正是你提到的!
- 这是唯一有效的答案,即使当remote..fetch设置为限制性的时候。
- 你不应该根据许多评论来更新你的答案吗?
克隆存储库时,实际下载了分支的所有信息,但分支是隐藏的。用命令
您可以显示存储库的所有分支,并使用命令
1
| $ git checkout -b branchname origin/branchname |
然后您可以一次手动"下载"一个。
然而,有一个更干净和更快的方法,虽然有点复杂。您需要三个步骤来完成此操作:
第一步
在您的计算机上新建一个空文件夹,并从存储库克隆.git文件夹的镜像副本:
1 2
| $ cd ~/Desktop && mkdir my_repo_folder && cd my_repo_folder
$ git clone --mirror https://github.com/planetoftheweb/responsivebootstrap.git .git |
文件夹my_repo_文件夹内的本地存储库仍然是空的,只有一个隐藏的.git文件夹,现在您可以通过终端上的"ls-alt"命令看到它。
第二步
通过将git配置的布尔值"bare"切换为false,将此存储库从空(bare)存储库切换到常规存储库:
1
| $ git config --bool core.bare false |
第三步
抓取当前文件夹中的所有内容,并在本地计算机上创建所有分支,因此这是一个正常的repo。
现在您只需键入命令git branch,就可以看到所有分支都已下载。
这是一种快速的方法,您可以用所有分支同时克隆Git存储库,但这不是您想用这种方法为每个项目做的事情。
- 赞成提到隐藏的分支。帮助我非常了解当地分支机构的跟踪情况。
- 这是一个很好的答案,但这个问题暗示了每天都要用到的东西。每次克隆存储库都是不实际的。
- 为什么重置会在本地创建所有分支?
我通常用的东西都没有,但命令是这样的:
1 2
| git fetch origin
git checkout --track origin/remote-branch |
一个简短的版本
1 2
| git fetch origin
git checkout -t origin/remote-branch |
您可以通过以下方式获取所有分支:
或:
1
| git fetch origin --depth=10000 $(git ls-remote -h -t origin) |
如果您已经浅化了存储库,那么--depth=10000参数可能会有所帮助。
要拉动所有分支,请使用:
如果上面的命令不起作用,则在上面的命令前面加上:
1
| git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*' |
因为remote.origin.fetch在提取时只能支持特定的分支,特别是在用--single-branch克隆repo时。检查人:git config remote.origin.fetch。
在那之后,你就可以结帐了。
参见:
- 如何获取所有远程分支?
- 如何克隆Git中的所有远程分支?
要将所有分支推送到远程,请使用:
最终,--mirror镜像所有引用。
如果您的目标是复制存储库,请参见:在GitHub复制存储库文章。
- 太棒了…在你的解决方案出现在这页之前,我已经尝试了所有其他的方法。谢谢!
- 我使用了浅克隆(depth=1,配置还为fetch指定了一个特定的分支,depth=1000参数是帮助我签出特定远程分支的修复程序。
- pull --all不是拉所有的树枝,而是拉所有的遥控器。
- 不过,配置的技巧不错!会一直把它们都拿来
我相信您通过以下方式克隆了存储库:
1
| git clone https://github.com/pathOfrepository |
现在使用CD转到该文件夹:
如果键入git status,则可以看到全部内容:
1 2 3
| On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean |
要查看所有隐藏的分支类型:
它将列出所有远程分支。
现在,如果要签出任何特定分支,只需键入:
1
| git checkout -b localBranchName origin/RemteBranchName |
如果你在这里寻找一个解决办法,让所有的树枝,然后迁徙到另一个服务器,我会把它放在下面。如果你只想在本地更新所有的分支,请停止在第一个空隙线。
1 2 3 4 5 6 7 8 9 10 11
| 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> |
- 非常有用;正是我需要的。我唯一需要改变的是在第二行,在"head"和"master"周围加上单引号;可能是因为我使用的是zsh。谢谢!
- 基本上是这样做的:(1)获取远程分支的实际名称[不是head,不是master];(2)完全告诉Git跟踪它们[不是所有的解决方案都这样做];(3)从这些分支中获取和提取所有内容[包括标签];(4)设置新的原点,并通过将所有内容向上推。同样,大多数其他解决方案都无法移动所有部件。这就是一切。
- 我删除了运行grep然后awk的反模式,并将grep命令压缩为awk命令。谢谢三倍!
- 读这个,不要写git fetch git pullstackoverflow.com/a/292359/1114926
- Git pull的确首先做了一个fetch,但当fetch独立执行时,更容易分辨问题是来自pull的fetch部分还是来自pull的后续merge部分。
复制这个网站码到您的网站上以设置一个投票箱在您的网站上。
1
| git fetch && git checkout <branchname> |
- 简单。从遥远的地方得到一个分支
- 非常感谢,这应该是正确的答案。
- 这并没有回答最初的问题:"我如何在本地拉所有的树枝?"它一个接一个地拉动它们,这是不可扩展的。考虑100个分支的情况。
确保所有远程分支在.git/config文件中都是可获取的。
在本例中,只有origin/production分支是可获取的,即使您尝试执行git fetch --all操作,除了获取production分支外,什么都不会发生:
1 2
| [origin]
fetch = +refs/heads/production:refs/remotes/origin/production |
此行应替换为:
1 2
| [origin]
fetch = +refs/heads/*:refs/remotes/origin/* |
然后运行git fetch等……
- 检查:git config --get remote.origin.fetch,然后(破坏性地)设置:git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'。
- 或者修改.git目录中的配置文本文件,对我有效
looping didn't seem to work for me and I wanted to know original/master.这是我的工作
1
| git branch -r | grep -v HEAD | awk -F'/' '{print $2"" $1"/"$2}' | xargs -L 1 git branch -f --track |
After that:
1 2
| git fetch --all
git pull --all |
- 这是一个正确的答案,但这一个不适用于所有边缘情况。此外,分支名称也可能很奇怪。所以我做了以下操作:git branch-r_grep-v head grep-v master awk-f'origin/"print$2""$1"origin/"$2"xargs-l 1 git branch-f-track;git fetch-all;git pull-all;这就成功了!
- 一个避免grep | awk反模式的文体改进:git branch -r | awk -F 'origin/' '!/HEAD|master/{反模式。
只有三个指挥官才能得到所有分支:
1 2 3 4 5
| git clone --mirror repo.git .git (gets just .git - bare repository)
git config --bool core.bare false
git reset --hard |
- 这实际上是操作问题的根源。如果克隆是正确的,他就不需要做pull --all。但是如果仍然需要,那么另一个答案是@johnno nola给出的,假设所有分支都被跟踪,并与这个答案混合在一起,这就是前进的道路。
我写了一个小剧本来管理克隆一个新的回收站,并为所有遥远的分支制作本地分支。
你可以在这里找到最新版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #!/bin/bash
# Clones as usual but creates local tracking branches for all remote branches.
# To use, copy this file into the same directory your git binaries are (git, git-flow, git-subtree, etc)
clone_output=$((git clone"$@" ) 2>&1)
retval=$?
echo $clone_output
if [[ $retval != 0 ]] ; then
exit 1
fi
pushd $(echo $clone_output | head -1 | sed 's/Cloning into .\(.*\).\.\.\./\1/') > /dev/null 2>&1
this_branch=$(git branch | sed 's/^..//')
for i in $(git branch -r | grep -v HEAD); do
branch=$(echo $i | perl -pe 's/^.*?\///')
# this doesn't have to be done for each branch, but that's how I did it.
remote=$(echo $i | sed 's/\/.*//')
if [["$this_branch" !="$branch" ]]; then
git branch -t $branch $remote/$branch
fi
done
popd > /dev/null 2>&1 |
用它,把它拷贝到你的GIT Bin Directory(对我来说,这是C:\Program Files (x86)\Git\bin\git-cloneall),然后,在指挥线上:
1
| git cloneall [standard-clone-options] <url> |
它通常是克隆的,但为所有远程分支创建本地跟踪分支。
以下是我认为健壮的东西:
- 不更新现有分支的远程跟踪
- 不要试图更新HEAD来跟踪origin/HEAD
- 允许命名为origin以外的远程程序
- 正确引用外壳
1 2 3 4 5
| for 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 |
没有必要将git fetch --all传递给-all到git pull将此选项传递给内部fetch。
归功于这个答案。
对于使用PowerShell的Windows用户:
1 2 3 4 5 6 7 8 9 10 11
| 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 |
- 命令将忽略名称为"/"的分支
- 这项工作的分支机构名称为: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" } }。
下面是一个perl版本的一行程序,在接受的答案中提供:
git branch -r | perl -e 'while(<>) {chop; my $remote = $_; my ($local) = ($remote =~ /origin\/(.*)/); print"git branch --track $local $remote
";}' > some-output-file
如果愿意,可以将输出文件作为shell脚本运行。
我们无意中删除了我们的stash项目存储库。幸运的是,有人在意外丢失之前就制造了一个叉子。我把叉子克隆到了本地(将忽略我是如何做到这一点的细节)。有一次我把叉子放在本地,我就开了一条船。我修改了远程服务器的URL(在我的例子中是源站),以指向我们要恢复到的目标存储库:
git remote set-url origin
最后像这样把所有的分支推到原点:
git push --all origin
我们又开始做生意了。
我们可以将所有分支或标记名放在一个临时文件中,然后对每个名称/标记执行git pull操作:
1 2 3
| git branch -r | grep origin | grep -v HEAD| awk -F/ '{print $NF}' > /tmp/all.txt
git tag -l >> /tmp/all.txt
for tag_or_branch in `cat /tmp/all.txt`; do git checkout $tag_or_branch; git pull origin $tag_or_branch; done |
如果您的fetch --all有问题,请跟踪您的远程分支:
1
| git checkout --track origin/%branchname% |
要避免出现错误消息"fatal:名为"origin/master"的分支已存在。",需要这样做:
1
| git branch -r | grep -v '\->' | grep -v `git branch | awk '/\*/ { print $2; }'`| while read remote; do git branch --track"${remote#origin/}""$remote"; done |
如何获取跟踪单个远程的所有Git分支。
这已经在Windows10上的RedHat和GitBash上进行了测试和功能。
TLDR:
1
| for branch in `git branch -r|grep -v ' -> '|cut -d"/" -f2`; do git checkout $branch; git fetch; done; |
说明:
一行检查出,然后取出除head以外的所有分支。
列出远程跟踪分支。
忽略头部。
从远程服务器上取下分支名称。
签出跟踪单个远程的所有分支。
获取已签出的分支。
从技术上讲,新的本地分支机构不需要获取数据。
这可用于fetch或pull分支,它们都是新的,并且在远程中有变化。
只要确保只有在准备合并时才拉。
测试设置
使用ssh url检查存储库。
以前
在本地检查分支。
执行命令
执行一行程序。
1
| for branch in `git branch -r|grep -v ' -> '|cut -d"/" -f2`; do git checkout $branch; git fetch; done; |
后
检查本地分支是否包括远程分支。
1 2 3 4
| $ git branch
cicd
master
* preprod |
1 2 3 4 5
| git remote add origin https://yourBitbucketLink
git fetch origin
git checkout -b yourNewLocalBranchName origin/requiredRemoteBranch (use tab :D) |
现在在本地,你的yourNewLocalBranchName就是你的requiredRemoteBranch。
根据Learth2的回答,这是我在做git clone [...]和cd之后做的:
法国电力公司
我为我工作但我不知道这会为你工作小心点