9

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.

2 Answers 2

6

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.

Sign up to request clarification or add additional context in comments.

1 Comment

Beautiful! The alias method works fine, but directly running it on the command line throws an error (fatal: Not a git repository: '$(git rev-parse --show-toplevel)/.git').
3

You can add up the --relative='PATH' to the subdirectory you want.

1 Comment

Well this appears to exclude changes apart from the specified directory, which is not what I want.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.