The current Git-based project that I am working on, I am generally always in a sub-directory.
Below is the output when I run the command git log --name-only
from a sub-directory of the root of the repository.
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 +-
How do I instead get git log
to output something like below instead? This makes diffing the files listed really easy, by just copying the file path and running git diff HEAD~ {copied_file_path}
rather than having to modify the file path manually and then run the command.
commit 678bd5ba6fc5474c4c61406768bf6cba5937c5d1
Author: thegreendroid
Date: Mon Mar 27 09:36:24 2017 +1300
Commit message
file1 | 184 +--
../child_dir2_from_root/file2 | 2 +-
I have looked at the git log
documentation, but nothing stood out. I can write a script to do this, but I was curious whether Git has a built-in way.
In order to use the paths in the output of git log --name-only
, add the option --git-dir
to git diff
.
git --git-dir="$(git rev-parse --show-toplevel)"/.git diff HEAD~ child_dir1_from_root/file1
For easy use, make an alias in the config.
[alias]
mdiff = "! git --git-dir=\"$(git rev-parse --show-toplevel)\"/.git diff"
git mdiff HEAD~ child_dir1_from_root/file1
now can work as long as the current directory belongs to the working tree.