是的,这似乎非常类似于" 查找git分支的父分支 ",但我没有找到我的答案.
我想我想知道如何找到我当前的分支父母,但我可能会问错误的问题.所以我会提供我的方案.
我们的组织有几个长期运行的发布分支,不会重命名(但最终在发布后不推荐)
有时我会从其中一个发布分支创建一个功能分支来处理问题.这是一个本地特色分支.
我被叫去处理其他一些项目,其他一些发布等.
我回到这个功能,现在我想将它重新绑定到它最初分支的最新提交.但是已经过了足够的时间,我不记得这是从版本x或发布y分支出来的
那我该怎么做?在我看来,我以为我会弄清楚我创建了哪个发布分支,然后重新绑定到该分支上的最后一次提交.
我知道还有其他组织技术可以避免这个问题,比如总是在我的功能分支中包含基本分支的名称.但那艘船已经开航了.
git我遇到的挑战是否有解决方案?
这应该适合你:
git log --oneline \
| cut -f 1 -d' ' \
| (while read commit ; do
other_branches="$(git branch --contains $commit | egrep -v '^\* ')"
if [ -n "${other_branches}" ] ; then
echo -e "${commit} is in:\n${other_branches}"
break
fi
done)
Run Code Online (Sandbox Code Playgroud)
这将遍历该分支的提交日志,并且对于每个提交,检查哪些分支包含该提交(是该提交的后代)。一旦它发现一个提交的后代不是当前分支,它就会打印提交哈希、包含该提交的其他分支,并跳出循环。
我认为答案实际上可以在您引用的问题中找到,但不一定在接受的答案中找到。
第一个解决方案来自这个答案。在评论中找到了比发布的更好的答案,因为评论中的解决方案仅使用标准的 unix 命令:
git show-branch | sed "s/].*//" | grep "\*" | \
grep -v "$(git rev-parse --abbrev-ref HEAD)" | \
head -n1 | sed "s/^.*\[//"
Run Code Online (Sandbox Code Playgroud)
该解决方案由@droidbot 开发,并由@gaal 改进。
第二个解决方案位于@ladiko的答案中,最初是在@mark-reed的答案中开发的:
git show-branch -a | awk -F'[]^~[]' '/^\*/ && !/'"$(git rev-parse --abbrev-ref HEAD)"'/ {print $2;exit}'
Run Code Online (Sandbox Code Playgroud)这两种解决方案都会为您提供另一个分支的名称,其中包含当前分支上的最新提交,该分支属于除当前分支之外的分支。