首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >git自动指责已删除的文件

git自动指责已删除的文件
EN

Stack Overflow用户
提问于 2016-01-14 19:07:04
回答 2查看 2.1K关注 0票数 3

这是一个常见的问题,如何在一个文件上运行git blame之前已经被删除(使用git rm)。如果你只是用旧的文件名运行它,那么它会给出与一个从来不存在的文件相同的错误:

代码语言:javascript
复制
% 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

代码语言:javascript
复制
% git blame 11144~1 -- a
97da6499 (Ed Avis 2016-01-14 11:00:40 +0000 1) 2

这是可行的,但是像这样手动搜索日志是很麻烦的。有没有办法告诉git‘我想看看在过去的版本中被称为a的文件’?我希望得到一些简单的东西,比如

代码语言:javascript
复制
% git blame --any-file-named a

它将自动检查具有该名称的文件的存储库的整个历史。

EN

回答 2

Stack Overflow用户

发布于 2016-03-18 11:59:24

您可以随时为此创建自己的bash函数:

代码语言:javascript
复制
blame-deleted () {
    git blame $(git rev-list -n 1 HEAD -- $1)~1 -- $1
}

将其添加到您的.bashrc将完成此操作,因此您可以这样做:

代码语言:javascript
复制
% blame-deleted a
票数 4
EN

Stack Overflow用户

发布于 2017-01-05 09:06:41

您可以使用git log获取包含该文件的最新版本

代码语言:javascript
复制
git log --pretty=%H --diff-filter=AM -1 -- path

git blame确实跟随周围的变化:

在整个文件重命名中自动跟随行的原点(当前没有关闭重命名跟随的选项)。要跟踪从一个文件移动到另一个文件的行,或者跟踪从另一个文件复制和粘贴的行等,请参阅-C和-M选项。

所以无论它在哪里都会有一个自动指责的别名

代码语言:javascript
复制
git config alias.findandblame \
        '!f() { git blame $(git log --pretty=%H --diff-filter=AM -1 -- "$1") -- "$1"; }; f'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34788033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档