给定一个基本分支 master
和该分支中的子目录 A
,我如何列出与 master
的差异包含以下更改的所有分支A
的内容?
我的用例:我正在做 subtree split在具有大量分支的事件存储库上,我还需要迁移所有受影响的分支。我希望避免手动检查每个分支的更改或联系所有分支所有者。
最佳答案
我最终将其编写为:
#!/bin/bash
BASE_BRANCH=$1
DIR=$2
while read -r branch; do
while read -r file; do
if [ ${file:0:${#DIR}} == "$DIR" ] ; then
echo "$branch"
break
fi
done < <(git --no-pager diff --name-only $BASE_BRANCH...$branch)
done < <(git branch -a --no-merged $BASE_BRANCH | cut -c 3-)
这需要两个参数,基本分支(在我的示例中为 master
)和要检查的子目录(在我的示例中,我会为 A/
提供斜杠以避免实际不是目录的前缀匹配)。
外层循环迭代所有尚未 merge 到基础分支的分支。然后内循环迭代每个已从基本分支修改的所有文件。当文件的前缀匹配时,分支名称将发送到输出。
关于git - 如何找出哪些 Git 分支影响给定的子目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21273531/