首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何列出包含等价提交的分支

如何列出包含等价提交的分支
EN

Stack Overflow用户
提问于 2013-05-01 00:19:57
回答 3查看 4.2K关注 0票数 26

在前面的问题中,有人提供了查找包含精确提交的分支的答案:

How to list branches that contain a given commit

被接受的答案强调,这只适用于精确的提交id,而不适用于相同的提交。它进一步指出,Git樱桃可以用来解决这个问题。

Git cherry似乎是为相反的方向而设计的;查找提交不会被推到上游。如果我不知道哪个分支创建了它,以及它的上游是什么,那么这是没有用的。因此,我看不出它将如何帮助解决这个问题。

有人可以解释/提供一个如何使用git cherry查找包含特定提交的“等价”的所有分支的示例吗?

EN

回答 3

Stack Overflow用户

发布于 2015-07-01 18:07:57

下面的方法似乎是有效的(但没有经过太多的测试)。它运行git cherry for each local git branch,如果git cherry没有在分支中列出缺少提交,则会打印分支名称。

代码语言:javascript
复制
# USAGE: git-cherry-contains <commit> [refs]
# Prints each local branch containing an equivalent commit.
git-cherry-contains() {
    local sha; sha=$(git rev-parse --verify "$1") || return 1
    local refs; refs=${2:-refs/heads/}
    local branch
    while IFS= read -r branch; do
        if ! git cherry "$branch" "$sha" "$sha^" | grep -qE "^\+ $sha"; then
            echo "$branch"
        fi
    done < <(git for-each-ref --format='%(refname:short)' $refs)
}

有关git cherry实际工作原理的详细解释(使用git patch-id),请参阅Andrew C's post

票数 8
EN

Stack Overflow用户

发布于 2016-11-02 21:10:42

命令

使用以下Bash命令(将<COMMIT HASH>替换为您正在搜索的提交散列):

代码语言:javascript
复制
PATCH_ID=$(git show <COMMIT HASH> | git patch-id | cut -d' ' -f1) \
&& ALL_MATCHING_COMMIT_HASHES=$(git log --all -p | git patch-id | grep $PATCH_ID | cut -d' ' -f2) \
&& for HASH in $ALL_MATCHING_COMMIT_HASHES; do echo "$(git branch -a --contains $HASH) (commit $HASH)"; done 

输出示例

代码语言:javascript
复制
user@host test_cherry_picking $ PATCH_ID=$(git show 59faabb91cfc8e449737f93be8c7df3825491674 | git patch-id | cut -d' ' -f1) \
&& ALL_MATCHING_COMMIT_HASHES=$(git log --all -p | git patch-id | grep $PATCH_ID | cut -d' ' -f2) \
&& for HASH in $ALL_MATCHING_COMMIT_HASHES; do echo "$(git branch -a --contains $HASH) (commit $HASH)"; done

* hotfix (commit 59faabb91cfc8e449737f93be8c7df3825491674)
master (commit bb5fa0d16931fa1d5fa9f5e9ee5c27634fad7da8)

user@host test_cherry_picking $

描述

计算给定GIT修订参数的修补程序ID (例如,提交的散列)。然后查找具有计算出的补丁ID的所有提交。最后,将包含这些提交的所有分支名称打印到控制台。

当然,这只有在补丁ID对于所有(樱桃挑选的)提交都相同的情况下才有效。任何时候,当您精挑细选并且必须手动解决合并冲突时,您可能会在变更集中引入差异。这将导致不同的补丁ID。

票数 1
EN

Stack Overflow用户

发布于 2016-09-22 09:00:13

代码语言:javascript
复制
$ for i in `git rev-list --all --grep="something unique in the commit message"`; do git branch --all --contains $i; done | sort | uniq
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16304574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档