在"git rebase--update refs"之后自动推送



Git 2.38在rebase命令中引入了--update-refs标志。如果你有一个分支链,它会更新链中的所有分支。我发现,当把一个大的PR分解成更容易审查的PR时,这非常有用。

然而,在git rebase --update-refs dev之后,我需要将所有的ref推送到GitHub来更新PR。这需要一组git checkout branch1 && git push --force-with-lease && git checkout branch2 && git push --force-with-lease && ...

git中有没有内置的方法可以自动处理这个问题?我基本上想为在rebase --update-refs期间更新的任何分支自动push --force-with-lease

我不确定你能不能做到这一点"自动";,但是你可以非常接近。

当您将--update-refs选项与rebase一起使用时,输出将告诉您所有已更新的本地分支:

$ git rebase origin/main my-branch --update-refs
Successfully rebased and updated refs/heads/my-branch.
Updated the following refs with --update-refs:
refs/heads/some-branch-1
refs/heads/some-branch-2

从那里,你可以使用该输出来构建一个命令,强制推送所有修改过的分支:

git push --force-with-lease origin my-branch some-branch-1 some-branch-2

提示:当使用--update-refs选项并且至少有一个分支需要更新时,您会注意到输出中的操作数高于正在重定基数的提交数。这是因为每一条指令行都被计算在内(包括空行(。您可以添加-i选项(用于交互式重新基准(,以查看使用了哪些指令。如果您希望事先知道,这也是查看运行命令时将更新哪些分支的好方法。

要从复制/粘贴中保存,如果您有分支命名约定,如fix/a-bugproject/beta,则可以使用git branch --contains:将目标分支的所有分支作为目标

git branch --list --format='%(refname:lstrip=2)' --contains=project/beta | xargs -I "{}" git push origin {}

您可以一次推送所有匹配的分支。

git push origin :

特殊的refspec:(或+:允许非快进更新(指示Git推送";匹配";分支:对于存在的每个分支在本地端,如果相同的分支名称已存在于远程端。git-push。

在尝试@MattyRad解决方案失败后,我将其改进为以下工作解决方案:

git branch --list "*jony*" | xargs -I "{}" git push origin {} --force-with-lease

这将强制推送(租赁(您所有的本地分支机构。如果使用的是命名约定,则可以将其放置在列表模式中。

最新更新