使用所有远程分支更新所有本地分支

Update all local branches with all remote branches

如何用所有远程分支覆盖所有本地分支?

这是我当地的分支机构:

client-side-js-framework
client-side-js-framework-2
client-side-js-framework-3
handlebars
master

还有我的远程分支:

client-side-js-framework
handlebars
master
no-network-connection

我希望我的本地分支机构能够镜像我的远程分支机构,因为我的远程分支机构是最新的。也就是说,我当地的分行应该是:

client-side-js-framework
handlebars
master
no-network-connection

这可以用一个(或两个)命令完成,而不是基本上删除我的本地存储库,然后重新克隆它吗?

很有可能,你应该 运行:

git fetch origin

然后简单地删除(大部分或全部)本地分支。下次你运行,例如:

git checkout handlebars

您的 Git 将搜索您的本地名称 handlebars,找不到它,再搜索一些以查看是否恰好有一个名称,例如 origin/handlebarsupstream/handlebars依此类推(每个可能的遥控器一个)。

只要正好一个这样的名字,你的Git就会说:啊哈,我应该创建本地名字handlebars 使用 相同的提交 作为远程跟踪名称 origin/handlebars. 在那一刻,您将获得一个名为 handlebars 的本地分支,该分支匹配 origin/handlebars, Git 会检查出来,你就可以开始工作了。没有必要像 a set of balls-and-chains.

那样拖拉半打未处理的本地名称

如果您确实需要更新每个分支,则必须使用一个循环,每个分支使用一个更新命令来执行适当的合并和推送,除非它们都是快进的非真正合并操作,在这种情况下:

git fetch origin 'refs/heads/*:refs/heads/*'

会起作用——但不要这样做(参见链条link)。

(如果你有多个使用相同名称的遥控器,这有点棘手。在这种情况下,git checkout --track origin/handlebars将达到预期的结果。同时它也是让 git fetch 删除 本地名称是棘手且不明智的,但我认为可以使用 --prune.)

基本上 git fetch origin 将更新您的本地分支并将额外的分支添加到您的本地存储库中,该分支可在远程上使用。

替代解决方案是

1. git checkout client-side-js-framework
2. git pull

就这些:)