团队成员之间存在争议:
作为倾向于第二阵营的人,我看到第一阵营的主要反对意见集中在git blame
/ git annotate
,显示更改所针对的提交与引入更改的提交不同目前的分支。
我找不到git blame
/ git annotate
上的任何命令行选项,它会在合并到当前分支时停止。
这个问题可以通过以下答案解决:是否有一些我缺少的辅助命令或者这是我需要提交的功能请求?
(更新:同事们还抱怨说,用许多PR可视化历史是一种痛苦,但我相信gitk等有解决这个问题的标志)
答案 0 :(得分:1)
虽然我自己确实倾向于第二阵营,但我不知道有git annotate
实现这一目标的任何选择。
因此,要回答您的问题,您可能需要提交功能请求。但是根据the docs,
,我怀疑它不会被接受此命令仅用于向后兼容以支持 现有脚本,并为人们提供更熟悉的命令名称 来自其他SCM系统。
答案 1 :(得分:1)
这是一个提供所需输出的命令链:
git rev-list --first-parent HEAD | awk '{print p " " $0}{p=$0}' > tmpfile && \
git blame -b -S tmpfile HEAD -- path && rm tmpfile
我还向git项目提交了feature request ...我们将会看到这是怎么回事
答案 2 :(得分:0)
除了requested的修复Stephen Connolly之外,将第一父母与反向结合应该会在Git 2.7(Nov / Dev 2015)中出现。
commit 700fd28见commit 1b0d400,commit ec35240,Max Kirillov (max630
)(2015年10月30日)。
(由Junio C Hamano -- gitster
--合并于commit 6784eb5,2015年11月3日)
blame
:在有意义时允许blame --reverse --first-parent
如果初始提交,则允许合并
--reverse
和--first-parent
指定范围是从最终开始的第一个父链 提交。
长期解释是:
反向指责可用于定位删除不会改变相邻行的行。此类编辑不会出现在非反向错误中,因为在编辑之前,相邻行最后更改的提交是较旧的历史记录。
对于使用主题分支或类似功能的大型活动项目,例如拉取请求,历史记录可以包含许多并发分支,甚至在编辑合并到目标分支之后,仍有许多(有时几十甚至几百)主题分支不包含它:
a0--a1-----*a2-*a3-a4...-*a100
|\ / / /
| b0-B1..bN / /
|\ / /
| c0.. ..cN /
\ /
z0.. ..zN
此处,'
*
标记合并中的第一个父级,大写B1
- 承诺删除被指责的行。
由于提交cN-zN
不包含B1
,因此它们仍会在B1
中删除该行,反向责备可以报告该行的最后一次提交是zN
(意味着它已在a100
中删除。事实上它确实会回归 一些非常晚的提交,这使得它无法用于查找B1
提交。可以通过
blame --reverse --first-parent
进行搜索 对于范围a0..a100
,它将返回a1,然后a0..bN
上只有一个额外的责任将返回所需的提交b0
。
但是在95a4fb0 (Git 2.6.2)中禁止合并--reverse
和--first-parent
,因为错误指定的范围可能会产生意外且毫无意义的结果。
测试目标是找到A1:
创建如下所示的历史记录 '
中更改*
标记合并中的第一个父级file.t
的唯一一行在提交B2
+---C1
/ \
A0--A1--*A2--*A3
\ /
B1-B2