2

这个问题的部分乐趣在于定义什么是任务以及它是如何记录在 git 历史中的。

当你使用git flow 分支模型时,每个开发的特性都有自己的分支。然后,使用我从https://stackoverflow.com/a/6191836/172690获得的以下脚本:

#!/bin/sh
# From https://stackoverflow.com/a/6191836/172690

NAME1="$1"
if [[ -z $NAME1 ]]; then
    echo "Usage:
    git-show-merge-ancestry.sh COMMIT_ID
        This will display the ancestry of the merged in branch.
        To list only merge commits, use 'git log --merges'."
else
    git show $1 | grep Merge: > /dev/null
    if [[ 0 == $? ]]; then
        echo "Displaying ancestry of merged commit $1"
        git show $1
        git log $(git merge-base --octopus $(git log -1 --merges --pretty=format:%P ${NAME1}))..$(git log -1 --merges --pretty=format:%H ${NAME1}) --boundary --graph --pretty=oneline --abbrev-commit
    else
        echo "The commit $1 doesn't seem to be a merge commit"
    fi
fi

我可以轻松查看合并提交并提取与合并分支/功能相关的提交的所有重要信息。然而,狗屎发生了,有时真正与单个任务/功能相关的提交实际上分散在多个分支中。事实上,这就是我有时使用修补程序来修补功能的原因。

在这些情况下,我通过向每个提交添加一个Refs #xxx标记来备份。这种标记出现在 github 和类似的票务系统中,并且是我跟踪与任务相关的更改的权威手动方式。然后可以使用类似greps 特定数量的日志提交的命令来提取与任务相关的更改。git log --grep=#39

问题是:如何将这两种信息混合到一个视图中?我想要的是一个可以接受Refs #xxx标记或提交哈希并显示所有相关信息的命令,无论它在 git 历史中多么分散。如果输入是任务,它应该首先 grep 单个提交,然后找出它们来自哪些分支。如果输入是一个提交哈希,它应该解析其祖先日志以查找Refs #xxx标记,并找出历史中哪些其他提交引用了这些任务。

由于这是一个更复杂的功能,它可能在任何 git 图形浏览器中实现?

4

0 回答 0