如何自动跨Git分支交叉引用相同提交及所属分支?
Git提交跨分支交叉引用方法
1. 根据提交信息批量查找所属分支
要找到包含特定提交信息的所有提交及其所属分支,直接用下面的命令(把引号里的内容换成你的目标提交信息):
git log --all --grep="this fixes the config problem" --pretty=format:"%h %s" | while read hash msg; do echo -e "\n提交 $hash:$msg" echo "所属分支:" git branch --contains $hash done
--all:遍历本地所有分支--grep:匹配提交信息关键词- 若要包含远程分支,把
git branch --contains $hash换成git branch -a --contains $hash
2. 根据提交哈希直接查询分支
如果已经知道提交的哈希值,用这条命令快速查看它存在的分支:
# 仅本地分支 git branch --contains <commit-hash> # 包含远程分支 git branch -a --contains <commit-hash>
3. 追踪cherry-pick提交的源位置
Git默认会在cherry-pick生成的提交信息末尾添加(cherry picked from commit <源哈希>)标记,利用这个标记可以追踪源提交:
查看单个提交的源信息
git show --pretty=full <cherry-pick-hash>
在输出的提交信息部分能找到源提交的哈希值,再用git branch --contains <源哈希>就能定位源提交所在分支。
批量查找cherry-pick关联
如果要批量找出所有cherry-pick提交及其源位置,可用:
git log --all --grep="cherry picked from commit" --pretty=format:"%h %b" | while read hash body; do src_hash=$(echo $body | grep -oP "cherry picked from commit \K[a-f0-9]+") echo -e "\n副本提交:$hash" echo "源提交:$src_hash,源分支:" git branch --contains $src_hash echo "副本所在分支:" git branch --contains $hash done
注意:只有cherry-pick时未手动修改提交信息、或使用
-x参数强制添加标记的提交,才能通过这种方式追踪;如果提交信息被手动删除了源标记,就无法通过此方法溯源。
内容的提问来源于stack exchange,提问作者rimiha
相关产品推荐
相关产品推荐

