在前面的问题中,有人提供了查找包含精确提交的分支的答案:
How to list branches that contain a given commit
被接受的答案强调,这只适用于精确的提交id,而不适用于相同的提交。它进一步指出,Git樱桃可以用来解决这个问题。
Git cherry似乎是为相反的方向而设计的;查找提交不会被推到上游。如果我不知道哪个分支创建了它,以及它的上游是什么,那么这是没有用的。因此,我看不出它将如何帮助解决这个问题。
有人可以解释/提供一个如何使用git cherry查找包含特定提交的“等价”的所有分支的示例吗?
发布于 2015-07-01 18:07:57
下面的方法似乎是有效的(但没有经过太多的测试)。它运行git cherry
for each local git branch,如果git cherry
没有在分支中列出缺少提交,则会打印分支名称。
# 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。
发布于 2016-11-02 21:10:42
命令
使用以下Bash命令(将<COMMIT HASH>
替换为您正在搜索的提交散列):
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
输出示例
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。
发布于 2016-09-22 09:00:13
$ for i in `git rev-list --all --grep="something unique in the commit message"`; do git branch --all --contains $i; done | sort | uniq
https://stackoverflow.com/questions/16304574
复制相似问题