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

Sea*_*red 10 git branch commit

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

Title

Summary summary summary

Branch: bug-report-abcde
Run Code Online (Sandbox Code Playgroud)

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

jth*_*ill 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
}
Run Code Online (Sandbox Code Playgroud)

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

git rev-list--ancestry-path名单仅下降从底部提交(行提交^$introducing这里)顶端(默认HEAD,当前的结账),--parents给父母为他们每个人,--reverse列出了提交先进先出(这样$introducing至上),和后处理,awk|xargs打印仅合并其第一个父级不在该祖先路径上的合并.

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


And*_*w C 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."
Run Code Online (Sandbox Code Playgroud)

您的分支名称就是您的分支名称。它实际上可以是你想要的任何东西。或者你不能使用分支名称,并且处于分离头状态。从长远来看,仅存储提交可达性。

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

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