从git仓库拉取所有未获取的更改

3

我需要从几个不同的、独立的仓库中获取所有内容(包括所有远程分支和这些分支的所有更改)。我尝试了git pull --all,但出现以下错误信息:

There are no candidates for merging among the refs that you just fetched.
Generally this means that you provided a wildcard refspec which had no
matches on the remote end.

那么我该如何确保从存储库中获取所有更改(如果可能的话,而不知道另一端有哪些分支)?

非常感谢您的帮助!


1
你需要做这件事的情况是什么?听起来有点不太好的想法... - icco
icco - 嗯,我不小心删除了一些项目的分支。而且在更新过程中不知怎么搞得服务器瘫痪了。但是我设法让git工作了,所以我想在彻底重置之前先备份一下东西。 - adam_0
所以你有一个存储库,其中包含多个远程分支,每个分支都不同于其他分支?这听起来像是一种痛苦的设置... 你所有的远程分支都在这台损坏的机器上吗? - icco
1
只是想添加一条注释,您可以通过 git remote show remotename 查看从本地到远程映射的分支(我刚刚发现这个)。 - adam_0
2个回答

6

一般来说,这是一个非常糟糕的想法,请不要这样做。"所有远程分支"通常包括正在进行的代码、被放弃的代码、相同功能的冲突实现等。试图将它们全部合并到本地树中是灾难的配方。

现在,如果你真的想做你提出的非常愚蠢的事情,你可以像这样做:

git fetch remote_source
git merge $(git branch -r | grep remote_source)

现在,如果你只是想要一个所有远程更改的本地副本,而不是尝试将它们合并到你的树中,则根本不需要进行拉取或合并;git fetch remote_source可以为您完成所有操作。当然,它不会创建映射到远程的本地分支,但它确实会拉取远程分支,并且您可以在需要时创建本地分支,而无需进一步与远程源通信。
根据评论中的进一步问题描述,听起来你真正想做的是将旧的远程所有分支推送到新的远程,而不是将它们合并成一个树。为此,你可能需要像下面这样做:
args=()
for remote_branch in $(git branch -r | grep OLD_REMOTE/); do
  branch_name=${remote_branch#*/}
  args+=( "${remote_branch}:${branch_name}" )
done
git push NEW_REMOTE "${args[@]}"

我同意如果这些仓库不只是被我一个人使用,那么这将是相当糟糕的想法。现在,因为我的目标是获取数据,将服务器恢复到正常运行状态,然后恢复所有这些数据,所以只需要执行一次获取操作(然后进行推送?还是需要合并才能推送?)是否可行呢?谢谢! - adam_0
@adam_0,只需一次获取即可收集所有数据。它不会合并数据,但它使所有数据都可用...这样你就可以在本地副本中使用所有远程分支了。 - Charles Duffy
那么,如果我获取数据,然后推送到一个新的远程库,那么所有数据都会被传输吗?还是Git要求我指定分支?如果我可以这样做,问题就解决了。 - adam_0
@adam_0,默认情况下,推送不会包括任何本地分支未引用的数据。但是,对于每个分支“foo”,您可以执行以下操作:git push new_remote old_remote/foo:foo - Charles Duffy

2

这似乎是一个非常糟糕的想法。但我猜你知道自己在做什么。

我使用下面的bash一行命令来推送到所有远程仓库,现在我已经修改为用于拉取操作。

for i in $(git remote); do git pull $i master; done;

那个方法非常好,但是我本地的副本上并没有所有的遥控器。 - adam_0

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