猿问

Git:如何一次重新设置许多分支(具有相同的基本提交)的基础?

我的项目中有一个master分支,可用来从其他人那里获取更改。由此,我通常会在几个主题分支上工作。


我的问题是:我是否有办法将新更改引入我的主服务器,然后立即将所有主题分支重新建立基础?


这种情况:


        D--E topic1

       /

A--B--C  master

       \

        F--G topic2

我想用一个命令(H来自上游)完成此任务:


               D'-E'主题1

              /

    A–B–C–H主

              \

               F'-G'主题2

现在,我知道可以通过将topic1和topic2重新设置到master上来完成此操作,甚至可以编写脚本来实现此目的。但是,如果我还有其他几个分支,创建新分支并频繁删除其他分支,而我一直都收到上游更改怎么办?


手动执行此操作(多次重新设置基准)既累人又容易出错。


有更容易的方法吗?


谢谢!


慕娘9325324
浏览 674回答 3
3回答

萧十郎

我已经将其转换为健壮的脚本,并保存在我的git-extensions存储库中:$ git-urebaselocalbr --helpRebase all / the last committed N local branches (except for the current branchand master) to the updated upstream head.Usage: git-urebaselocalbr [--continue|--skip|--abort] [--branches "<branch1> ..."] [N] [-i|--interactive] [options]

杨魅力

我相当确定没有办法自动执行此操作。请记住,“ git rebase master”还可以将您带回到需要您解决合并冲突的外壳程序中,因此,如果您要编写脚本来自动化所有这些操作,则需要考虑到这一点。但是,您可以相当轻松地跟踪哪些分支需要更新。嗯,对于任何分支,如果分支不是最新的wrt(即仅在master之上提交),“ git rev-list branch..master”将产生输出。因此,您需要遍历除master以外的所有本地头来生成报告(nb“ git show-branch”将大致执行此操作):git for-each-ref 'refs/heads/*' | \&nbsp; while read rev type ref; do&nbsp; &nbsp; branch=$(expr "$ref" : 'refs/heads/\(.*\)' )&nbsp; &nbsp; revs=$(git rev-list $rev..master)&nbsp; &nbsp; if [ -n "$revs" ]; then&nbsp; &nbsp; &nbsp; echo $branch needs update&nbsp; &nbsp; &nbsp; git diff --summary --shortstat -M -C -C $rev master&nbsp; &nbsp; fi&nbsp; done因此,如果您感觉很勇敢,则可以用“ git checkout $ branch && git rebase master”之类的东西替换“ git diff”(如果已设置,则可能只是“ git pull --rebase”)。我认为您随后必须检查是否存在“ .git / rebase-apply”目录或检查未合并文件的索引(“ git ls-files -u”),以测试是否已经等待进行合并。当然,如果没有冲突,那很容易...它会产生一些在不容易的情况下也能起作用的东西:p这并不一定解决如果您的分支之一基于其他事物时会发生的情况……这就是为什么我提到使用“ git pull --rebase”代替,因为这会根据分支配置进行基础化,而不是盲目地掌握。尽管检测不是基于分支配置的,但是...可能最简单的方法是检出每个分支并执行“ git pull”并让分支配置处理所有事情,包括是否重新设置基础或合并?

慕桂英546537

您总是可以像这样编写一线shell:for branch in topic1 topic2 topic3;do git rebase master $branch;done由于您希望重新定位的主题分支可能会随时间而变化,因此这是一种快捷的^ H ^ H ^ Hflexible解决方案:-)
随时随地看视频慕课网APP
我要回答