从git存储库中提取所有未经修改的更改

时间:2011-02-27 02:44:47

标签: git repository

我需要从几个不同的,不同的存储库(所有远程分支以及对这些分支的所有更改)中获取所有内容。我尝试了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.

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

所有帮助都表示赞赏,并提前致谢!

2 个答案:

答案 0 :(得分: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[@]}"

答案 1 :(得分:2)

这似乎是一个非常糟糕的主意。但我猜你知道你在做什么。

我使用下面的bash one liner虽然要推送到所有遥控器,我已经修改过来做拉动。

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