更新所有本地分支以匹配所有远程分支

5

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

这是我的本地分支:

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

这能用一个(或两个)命令完成吗,而不是基本上删除我的本地 repo,并重新克隆它吗?
2个回答

5

最有可能的是要运行:

git fetch origin

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

git checkout handlebars

如果你的本地Git在搜索名为handlebars的本地分支时没有找到,那么它会继续搜索是否有一个远程分支名字完全匹配origin/handlebarsupstream/handlebars等(每个远程分支都会搜索一次)。

只要确切地找到了一个这样的名字,你的Git就会说:“啊,我应该使用与跟踪远程分支origin/handlebars相同的提交创建本地名为handlebars的分支。”此时,你会得到一个名为handlebars的本地分支,它与origin/handlebars匹配,Git会检出它,你就可以开始工作了。不需要像一堆球和链式锁那样拖着一堆未被使用的本地分支。

如果你真的需要更新每个分支,那么必须使用循环,每个分支执行一次合适的合并和推送命令,除非它们都是快进操作而不是真正的合并操作,那么:

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

这样做是可行的,但不建议这样做(请参见球和链链接)。

如果您有多个使用相同名称的远程仓库,情况会稍微复杂一些。在这种情况下,git checkout --track origin/handlebars 将实现所需的结果。与此同时,让 git fetch 删除 本地名称也很棘手且不明智,但我认为可以通过 --prune 实现。


我其实以为那是一个链接到“一套球和链”的文档[讽刺意味]。我没想到那是一张图片。干得漂亮。我最终删除了本地版本库并重新克隆了它,但我喜欢你的答案,并会尝试记住下次这样做。 - Farid

0

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

另一种解决方案是

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

就这些了 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接