gpt4 book ai didi

git - 如何一次 rebase 多个分支(具有相同的基提交)?

转载 作者:IT王子 更新时间:2023-10-29 00:41:09 26 4
gpt4 key购买 nike

我的项目中有一个 master 分支,我用它来 pull 其他人的更改。从那以后,我通常有几个我目前正在处理的主题分支。

我的问题是:有没有办法让我将新更改 pull 入我的母版,然后立即将我所有的主题分支 rebase 到它?

情况是这样的:

        D--E topic1
/
A--B--C master
\
F--G topic2

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

               D'--E' topic1              /    A--B--C--H master              \               F'--G' topic2

现在,我知道我可以通过将 topic1 和 topic2 rebase 到 master 上来实现这一点,我什至可以编写一个脚本来自动执行此操作。但是,如果我有几个其他分支,经常创建新分支和删除其他分支并且我一直收到上游更改怎么办?

如果手动完成此操作(多次 rebase ),既累人又容易出错。

有没有更简单的方法?

最佳答案

我很确定没有办法自动执行此操作。请记住,“git rebase master”也可以让您回到需要您解决 merge 冲突的 shell,因此如果您想编写一个脚本来自动执行所有这些操作,您需要考虑到这一点。

不过,您可以很容易地跟踪哪些分支需要更新。嗯,对于任何分支,“git rev-list branch..master”如果分支不是最新的 wrt(即只是在 master 之上提交)就会产生输出。因此,您需要遍历除 master 之外的所有本地负责人以生成报告(注意“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

因此,如果您有勇气,可以将“git diff”替换为“git checkout $branch && git rebase master”之类的内容(或者如果您已设置,则可能只是“git pull --rebase”) .我认为你必须检查是否存在“.git/rebase-apply”目录或检查未 merge 文件的索引(“git ls-files -u”)以测试我们是否一直在等待进行 merge 。

当然,如果没有冲突,那就很容易了……它产生的东西在不容易的时候也能工作,这就是问题所在:p

这并不一定能解决如果你的一个分支基于其他东西会发生什么......这就是为什么我提到使用“git pull --rebase”来代替,因为这会根据分支配置进行 rebase ,而不是盲从主人。虽然检测不是基于分支配置...也许最简单的方法是检查每个分支并执行“git pull”并让分支配置处理所有事情,包括是 rebase 还是 merge ?

关于git - 如何一次 rebase 多个分支(具有相同的基提交)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/866218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com