在Github上更新分叉存储库的多个分支

时间:2010-12-02 09:44:15

标签: git github fork

我有一个forked github存储库(称之为repo-O并调用我的fork repo-F),它包含大约8个分支。已经有几个(100s)提交来自其他贡献者的repo-O,以及repo-O的多个分支。我现在想把这些变化拉进我的分叉回购(repo-F)。我不能使用fork队列,因为有大约3000个提交可以通过,我宁愿从命令行执行此操作。

所以..我克隆了我的仓库,将repo-O添加为远程(上游)并获取更改,然后合并origin / upstream ...然后推回repo-F。

这似乎已将更改应用于主分支,但未应用于任何其他分支....

如何重复上述过程以便更新“所有”分支?

由于

2 个答案:

答案 0 :(得分:4)

你想要完成的是“对于repo-o上的每个远程分支,如果我没有它,则创建指向repo-o分支的相同分支,或者从同一分支上的任何内容中获取本地分支上的信息在repo-o上,最后将所有这些分支推送到我的repo-f“。

假设您的遥控器名为repo-orepo-f,我会在bash中使用类似的内容:

for repo_o_branch in \
    $(git branch -a|grep repo-o|perl -nle's,^\s*repo\-o/,,;print $_';
do
    (                                                              \
       ( git checkout $repo_o_branch                               \
         && git pull --rebase repo-o $repo_o_branch)               \
       || ( git checkout -b $repo_o_branch repo-o/$repo_o_branch ) \
    ) && git push repo-f $repo_o_branch;
done

对于所有“repo o branches”(由git branch -a显示为“repo-o / branchname”,没有“space和'repo-o /'”部分),

  • 尝试检查分支在其中执行git pull --rebase repo-o branchname
  • 或者,如果git checkout失败(因为您没有该分支):签出一个以repo-o的分支名称命名的新分支,并将其指向repo-o的分支机构。
  • 如果上述两个中的任何一个成功,请将新创建或更新的分支名称推送到您的repo-f。

品尝季节;最好尝试新创建的repo-f git克隆,并添加远程repo-o,以防出现问题;)

答案 1 :(得分:1)

带有一些合并碎片的awk版本

sync_all_branch () {
  git fetch upstream
  for upstream_branch in   $( git branch -a |awk 'BEGIN {FS="/"} $2=="upstream" {print $3}' ) ;
  do
      if git checkout $upstream_branch
      then
          echo merge $upstream_branch
          git merge -s recursive -Xours upstream/$upstream_branch 
      else
          echo create $upstream_branch
          git checkout -b $upstream_branch upstream/$upstream_branch
      fi
  done
  git checkout master
  git push --all
}