如何使git log显示相对于当前目录的文件路径?

8
我正在处理的项目是基于Git的,通常我总是在子目录中工作。
当我在仓库根目录的子目录中运行命令git log --name-only时,输出如下:
commit 678bd5ba6fc5474c4c61406768bf6cba5937c5d1
Author: thegreendroid
Date:   Mon Mar 27 09:36:24 2017 +1300

    Commit message

 child_dir1_from_root/file1                     |  184 +--
 child_dir2_from_root/file2                     |    2 +-

我该如何使 git log 输出类似下面的内容呢?这样,只需复制文件路径并运行 git diff HEAD~ {copied_file_path} 即可轻松查看所列出的文件差异,而不必手动修改文件路径再运行命令。
commit 678bd5ba6fc5474c4c61406768bf6cba5937c5d1
Author: thegreendroid
Date:   Mon Mar 27 09:36:24 2017 +1300

    Commit message

 file1                                          |  184 +--
 ../child_dir2_from_root/file2                  |    2 +-

我查看了git log文档,但没有发现明显的解决方案。我可以编写一个脚本来实现此功能,但我想知道Git是否有内置的方法。
2个回答

6
为了使用git log --name-only输出中的路径,需要在git diff命令中添加选项--git-dir
git --git-dir="$(git rev-parse --show-toplevel)"/.git diff HEAD~ child_dir1_from_root/file1

为了方便使用,在配置文件中创建别名。
[alias]
        mdiff = "! git --git-dir=\"$(git rev-parse --show-toplevel)\"/.git diff"

git mdiff HEAD~ child_dir1_from_root/file1现在只要当前目录属于工作树,就可以正常工作。


太好了!别名方法运行良好,但是在命令行上直接运行会抛出错误(致命错误:不是 git 仓库:'$(git rev-parse --show-toplevel)/.git')。 - thegreendroid

2

2
这似乎排除了除指定目录以外的更改,这不是我想要的。 - thegreendroid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接