mal*_*vim 57 git rebase git-rebase
我的项目中有一个主分支,用于从其他人那里获取更改.从那时起,我通常有几个主题分支,我正在工作.
我的问题是:有没有办法让我将新的更改添加到我的主人中,然后立即将所有主题分支重新绑定到该主题上?
情况就是这样:
D--E topic1
/
A--B--C master
\
F--G topic2
Run Code Online (Sandbox Code Playgroud)
我想用一个命令(H来自上游)完成这个任务:
D'--E' topic1
/
A--B--C--H master
\
F'--G' topic2
现在,我知道我可以通过将topic1和topic2重新设置为master来实现这一目标,我甚至可以编写一个脚本来自动执行此操作.但是,如果我有其他几个分支,创建新分支并经常删除其他分支并且我一直收到上游变更怎么办?
当手动完成时,这个操作(几个rebase)既累人又容易出错.
有没有更简单的方法?
谢谢!
ara*_*nid 19
我很确定没有办法自动执行此操作.请记住,"git rebase master"也可以让你回到需要你解决合并冲突的shell,因此如果你想编写一个脚本来自动化所有这些,你需要考虑到这一点.
但是,您可以非常轻松地跟踪哪些分支需要更新.嗯,对于任何分支,"git rev-list branch..master"将产生输出,如果分支不是最新的wrt(即刚提交在master)之上.所以你需要循环遍历除master之外的所有本地头以生成报告(nb"git show-branch"将大致这样做):
git for-each-ref 'refs/heads/*' | \
while read rev type ref; do
branch=$(expr "$ref" : 'refs/heads/\(.*\)' )
revs=$(git rev-list $rev..master)
if [ -n "$revs" ]; then
echo $branch needs update
git diff --summary --shortstat -M -C -C $rev master
fi
done
Run Code Online (Sandbox Code Playgroud)
因此,如果你感到勇敢,你可以用"git checkout $ branch && git rebase master"替换那个"git diff"(或者如果你设置了它,可能只是"git pull --rebase").我想你必须检查是否存在".git/rebase-apply"目录或检查未合并文件的索引("git ls-files -u")以测试我们是否已经等待合并.
当然,如果没有冲突,那么它很容易......它产生的东西也很有效,当问题不容易时:p
如果你的某个分支基于其他东西,这并不一定能解决所发生的事情...这就是为什么我提到使用"git pull --rebase"而不是因为那会根据分支配置而不是盲目地从主分支.虽然检测不是基于分支配置...也许最简单的方法就是检查每个分支并执行"git pull"并让分支配置处理所有内容,包括是否进行rebase或merge?
fla*_*acs 10
你总是可以像这样写一个单行的shell:
for branch in topic1 topic2 topic3;do git rebase master $branch;done
Run Code Online (Sandbox Code Playgroud)
由于主题分支你想改变可能会随着时间的推移而变化,这是一个快速和目的^ H ^ H ^ Hflexible解决方案:-)