如何通过相对路径查看两次提交之间的所有已更改文件?

时间:2016-12-16 18:44:09

标签: git

这似乎是一个非常直截了当的问题,an answer here,但它并非相当我正在寻找的答案。

以下是故事:

我在完成工作时与develop合并的功能分支上进行了大部分开发。在我合并之前删除功能分支,我想回顾一下我做过的事情。要获取我需要查看的文件列表,我这样做:

git --no-pager diff --name-only develop..HEAD

因此,举例来说,我可能会看到类似这样的内容:

file1.js
path1/file2.js
path1/file3.js

这告诉我,我已对这些文件进行了更改,我需要进入&回顾他们。

问题是这些文件路径都是相对于存储库的根目录。我喜欢在我的编辑器中打开所有相关文件:

git --no-pager diff --name-only develop..HEAD | xargs atom

如果我当前位于存储库的根目录下,这将打开atom中不同选项卡中的所有文件,以供我查看。

但是,如果我碰巧在不同的目录中(例如,如果我cd加入path1做某事),我会在atom次尝试时获得一堆空标签打开不存在的文件。在开始我的审核之前,我必须记住cd回到存储库的根目录。

今天早上经常让我烦躁,所以我去寻找解决方案。我发现the answer cited above建议在命令中添加--relative选项,如下所示:

git --no-pager diff --relative --name-only develop..HEAD

这种工作,但它只给我在存储库中的目录或其下的文件。因此,在上面的示例中,如果我cd加入path1,我会看到:

file2.js
file3.js

我真正希望看到的是:

../file1.js
file2.js
file3.js

这将允许我将其传送到atom并打开所有文件。

我确实阅读了git help命令的diff文档,--relative标记 允许您指定路径,但它也排除了外部文件路径。

没有写这么长的命令行:

pushd "$(git rev-parse --show-toplevel)" >/dev/null \
    && git --no-pager diff --name-only develop..HEAD | xargs atom \
    && popd > /dev/null

有没有办法获取两个提交之间更改的所有文件的列表,其中包含相对于当前目录的路径?

1 个答案:

答案 0 :(得分:0)

Git没有内置任何功能,但编写脚本或别名很容易。

请注意,git rev-parse --show-cdup会显示要添加到当前目录的../ - es字符串,以便进入顶层。如果您已经处于最顶层,则结果为空。因此:

git diff --name-only "$@" | sed -e "s,^,$(git rev-parse --show-cdup),"

如果你不介意../sub/file.js只能说file.js,就会让你足够近。如果你的话,另外一个-e表达式可以解决这个问题:将../../$whereIam/替换为空,从$whereIam之间的差异中填入git rev-parse --show-toplevel变量}和pwd