正文
所有分支已成功推送
就这样,成功了!这个简单功能正是我一直以来想要实现的。当然,
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
,并且远程分支已被删除;
-
-
本地的默认分支
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
);
-
-
-
为了便于测试和
模块化
,我为每一步都创建了一个 Git 别名(alias),我们接下来逐步介绍这些别名的实现方式。
前提假设
在开始之前,有几个默认假设需要说明:
-
-
你是从一个远程仓库克隆了本地仓库,或者你已经设置好了默认的远程分支。
现在,大多数项目的远程默认名称都是
origin
,但也可能是
upstream
或其他名称。这里我默认使用
origin
,当然你也可以根据需要修改这些别名。
我之所以没做参数动态切换,是因为 Git 别名不太方便支持带有命名参数的方式,我也不想用多个位置参数,避免像