这是一个常见的问题,如何在一个文件上运行git blame之前已经被删除(使用git rm)。如果你只是用旧的文件名运行它,那么它会给出与一个从来不存在的文件相同的错误:
% git init
% echo 1 >a
% git add a
% git commit -m.
% echo 2 >a
% git add a
% git commit -m.
% git rm a
% git commit -m.
% git blame a
fatal: cannot stat path 'a': No such file or directory
% git blame z
fatal: cannot stat path 'z': No such file or directory(为了简洁起见,git对前面命令的响应被省略了。)
一种常见的解决方案是查看git log --stat,以找到删除文件的版本。然后,可以将该修订的父级传递给git blame
% git blame 11144~1 -- a
97da6499 (Ed Avis 2016-01-14 11:00:40 +0000 1) 2这是可行的,但是像这样手动搜索日志是很麻烦的。有没有办法告诉git‘我想看看在过去的版本中被称为a的文件’?我希望得到一些简单的东西,比如
% git blame --any-file-named a它将自动检查具有该名称的文件的存储库的整个历史。
发布于 2016-03-18 11:59:24
您可以随时为此创建自己的bash函数:
blame-deleted () {
git blame $(git rev-list -n 1 HEAD -- $1)~1 -- $1
}将其添加到您的.bashrc将完成此操作,因此您可以这样做:
% blame-deleted a发布于 2017-01-05 09:06:41
您可以使用git log获取包含该文件的最新版本
git log --pretty=%H --diff-filter=AM -1 -- path而git blame确实跟随周围的变化:
在整个文件重命名中自动跟随行的原点(当前没有关闭重命名跟随的选项)。要跟踪从一个文件移动到另一个文件的行,或者跟踪从另一个文件复制和粘贴的行等,请参阅-C和-M选项。
所以无论它在哪里都会有一个自动指责的别名
git config alias.findandblame \
'!f() { git blame $(git log --pretty=%H --diff-filter=AM -1 -- "$1") -- "$1"; }; f'https://stackoverflow.com/questions/34788033
复制相似问题