专栏名称: 前端早读课
我们关注前端,产品体验设计,更关注前端同行的成长。 每天清晨五点早读,四万+同行相伴成长。
目录
相关文章推荐
前端早读课  ·  【第3525期】架起桥梁:在 Dart ... ·  7 小时前  
前端大全  ·  记录一次前端项目代码Review ·  23 小时前  
简约小生活  ·  手上这块肉,一看就知身体好坏,很灵哦! ·  昨天  
简约小生活  ·  手上这块肉,一看就知身体好坏,很灵哦! ·  昨天  
宝山消防支队  ·  以案为例 | 《警惕小火星引发大悲剧》 ·  昨天  
51好读  ›  专栏  ›  前端早读课

【第3519期】使用一条 Git 命令推送整个分支栈

前端早读课  · 公众号  · 前端  · 2025-05-29 08:00

正文

请到「今天看啥」查看全文


所有分支已成功推送

就这样,成功了!这个简单功能正是我一直以来想要实现的。当然, git push-stack 还有一些额外的 “功能”。

使用 git push-stack 推送部分分支

我们稍后会详细介绍 git push-stack 是如何实现的,但先来看一下它的几种使用方式。

你已经看到最基本的用法了:在你已经检出了堆栈顶端分支(如上例中的 feature/part-3 )的前提下,直接运行:

 git push-stack

如果你只想推送堆栈的一部分,有两种方式可以实现:

1、检出你希望作为 “堆栈顶端” 的那个分支;
2、显式指定你希望作为 “堆栈顶端” 的那个分支。

比如,你只想推送 feature/part-1 feature/part-2 ,而不包括 part-3 ,你可以这样做:

 # 方法一:检出 part-2 分支
 git checkout feature/part-2
 git stack
 # 输出:
 #  feature/part-2
 #  feature/part-1

或者这样:

 # 方法二:直接指定堆栈顶端分支
 git stack feature/part-2
 # 输出:
 #  feature/part-2
 #  feature/part-1

至于用哪种方式,取决于你当前的操作:如果你已经切换到了 feature/part-2 分支,用方法一更简单;否则就用方法二。

这里我们用 git stack 只是为了列出将被推送的分支。如果你直接使用 git push-stack ,这些分支就会被立刻推送。

git stack 的智能行为

还有一点要注意: git stack 会根据远程默认分支(比如 origin/main )智能判断哪些分支需要被推送。

设想现在你的本地仓库是这样的状态:

feature/part-1 已被合并后的仓库状态图

此时的情况是:

  • feature/part-1
    已经合并到了远程的 origin/main ,并且远程分支已被删除;
  • 本地分支 feature/part-1 还在;
  • 本地的默认分支 main 还没有更新以跟踪远程的 origin/main

这时我们运行:

 git stack feature/part-3
 # 输出:
 #  feature/part-3
 #  feature/part-2

正如你所希望的,只有需要推送的分支会被列出来,而这个判断是基于远程默认分支 origin/main ,而不是本地分支。

目前这个功能已经足够满足我的需求了。当然,我相信这个工具还有很多可以扩展的地方。

接下来的部分,我会讲解如何创建 git push-stack 这个命令。

实现 git push-stack 命令

git push-stack 命令包含以下四个步骤:

  • 1、计算默认分支(如 origin/main );
  • 2、计算堆栈的 “合并基点”,即堆栈的底部;
  • 3、找出从合并基点到堆栈顶部之间的所有分支;
  • 4、将上一步中列出的所有分支推送到远程。

为了便于测试和 模块化 ,我为每一步都创建了一个 Git 别名(alias),我们接下来逐步介绍这些别名的实现方式。

前提假设

在开始之前,有几个默认假设需要说明:

  • 远程仓库的名称是 origin
  • 你是从一个远程仓库克隆了本地仓库,或者你已经设置好了默认的远程分支。

现在,大多数项目的远程默认名称都是 origin ,但也可能是 upstream 或其他名称。这里我默认使用 origin ,当然你也可以根据需要修改这些别名。

我之所以没做参数动态切换,是因为 Git 别名不太方便支持带有命名参数的方式,我也不想用多个位置参数,避免像







请到「今天看啥」查看全文