有几个问题与我提出的问题很接近,但并不完全相同。
我想列出所有分支,这些分支是在一个 git 分支的历史记录中的任何时间创建的。
类似问题的答案包括使用 git branch --contains [branch-name]
,但这并没有实现我的目标。
考虑以下(简单)示例和树形结构:
$ git init
$ git checkout -b master
$ touch master.txt
$ git add .
$ git commit -m "Initial master commit"
$ git checkout -b develop
$ touch develop.txt
$ git add .
$ git commit -m "Initial develop commit"
$ git checkout -b feature/a
$ touch a.txt
$ git add .
$ git commit -m "feature/a commit"
$ git checkout develop
$ git checkout -b feature/b
$ touch b.txt
$ git add .
$ git commit -m "feature/b commit"
master
\
\ feature/a
\ /
develop
\
feature/b
如果我想获取所有包含 develop
分支的分支,可以执行命令 git branch --contains develop
,将得到以下结果:
$ git branch --contains develop
develop
feature/a
feature/b
很酷。但是让我们使用一个更实际的例子(
-
表示提交),其中有多个功能分支在不同时间合并:$ git checkout develop
$ git merge feature/a
$ git branch -d feature/a
master
\
\ feature/a
\ / \
develop -
\
feature/b
在这种情况下,
feature/a
已经完成,合并到 develop
分支后被删除。现在,develop
分支的最新提交已经领先于仍在开发中的 feature/b
分支。现在,如果我运行命令 git branch --contains develop
,会得到以下结果:$ git branch --contains develop
develop
不好。我想要看到的是develop
和feature/b
两个分支,因为feature/b
是从一个旧版本的develop
分支派生的。
我的项目比较复杂,有很多功能、修复、增强等分支,它们都是从develop
的不同时间点创建的,而且并不是所有的分支都被合并了。现在,git branch --contains develop
对于告诉我哪些分支需要处理来说几乎没有用处。
git rev-list master..develop | tail -1
替换$()
中的命令。 - alfunx