我如何在合并后跟踪提交的来源?

时间:2014-12-08 18:51:00

标签: git branch commit

我的公司没有使用git维护存储库(我们有效地使用CVS),但为了我自己的理智,我在本地保留了一个回购。在过去,我想提出与bug-report-abcde相关的提交。我可以通过提交消息来查找bug-report-abcde并浏览它们。现在,我将一个Emacs函数挂钩,以提供当前分支名称作为'标题'在提交中:

Title

Summary summary summary

Branch: bug-report-abcde

因此我的问题是:在将提交合并到另一个分支之后,这是找到哪个分支是提交的原始源的最佳方法吗?或者有没有办法从git本身提取这些信息?

2 个答案:

答案 0 :(得分:6)

merges-introducing() {
    # merges-introducing $introducing [$descendant]
    local introducing;
    if introducing=`git rev-parse $1`; then 
        shift
        git rev-list --ancestry-path --parents --reverse ^$introducing ${@-HEAD} \
        | awk '{seen[$1]=1} NR>1 && !seen[$2] {print $1}' \
        | xargs -r git show --oneline --no-patch
     fi
}

查找包含合并历史记录提交的合并。

git rev-list' --ancestry-path仅列出从底部提交(此处为^$introducing)到顶部(默认HEAD)的下降线上的提交,您当前的结帐时间,--parents为每个人提供父母,--reverse列出最早的提交(首先是$introducing),然后是{{1}只打印第一个父项不在该祖先路径上的合并。

除非有人进入并手动编辑合并消息,否则这些提交的主题行将说明分支名称和相关(和非快进)合并的任何源URL,最早的是。

答案 1 :(得分:2)

Git没有按设计跟踪此信息。

http://markmail.org/message/yfb5ihwddjmrstz6

So don't think of it as "git throws away branch identity" as much as
"git never cared about branch identity in the first place, and doesn't
think it's relevant."

您的分支机构名称就是您的分支机构名称。它可以是你想要的任何东西。或者您不能使用分支名称,并处于分离头状态。长期来看,只存储提交可达性。

如果您有要跟踪的信息(如缺陷编号),则需要将其包含在提交消息中。

如果您使用的是中央服务器,则可以设置一个接收挂钩,以某种方式记录远程分支名称信息(例如git notes)。我的公司用这个。我发现它只是准有用的(主要是如果你想对程序管理员大喊大叫,而不是那个编写或推送代码的人)。