How to show changed file name only with 'git log'

Git

Git Problem Overview


Is it able to show changed file name only with git log?

Git Solutions


Solution 1 - Git

I use

git log --name-only 

or

git log --name-only --oneline

for short.

Solution 2 - Git

I guess you could use the --name-only flag. Something like:

git log 73167b96 --pretty="format:" --name-only

I personally use git show for viewing files changed in a commit:

git show --pretty="format:" --name-only 73167b96

(73167b96 could be any commit/tag name)

Solution 3 - Git

I stumbled in here looking for a similar answer without the "git log" restriction. The answers here didn't give me what I needed but this did so I'll add it in case others find it useful:

git diff --name-only

You can also couple this with standard commit pointers to see what has changed since a particular commit:

git diff --name-only HEAD~3
git diff --name-only develop
git diff --name-only 5890e37..ebbf4c0

This succinctly provides file names only which is great for scripting. For example:

git diff --name-only develop | while read changed_file; do echo "This changed from the develop version: $changed_file"; done

#OR

git diff --name-only develop | xargs tar cvf changes.tar

Solution 4 - Git

This gives almost what you need:

git log --stat --oneline

The commit ID and a short one line still remains, followed by a list of changed files by that commit.

Solution 5 - Git

Now I use the following to get the list of changed files my current branch has, comparing it to master (the compare-to branch is easily changed):

git log --oneline --pretty="format:" --name-only master.. | awk 'NF' | sort -u

Before, I used to rely on this:

git log --name-status <branch>..<branch> | grep -E '^[A-Z]\b' | sort -k 2,2 -u

which outputs a list of files only and their state (added, modified, deleted):

A	foo/bar/xyz/foo.txt
M	foo/bor/bar.txt
...

The -k2,2 option for sort, makes it sort by file path instead of the type of change (A, M, D,).

Solution 6 - Git

If you need just file names, like:

dir/subdir/file1.txt
dir/subdir2/file2.sql
dir2/subdir3/file6.php

(which I use as a source for tar command), you will also need to filter out commit messages.

In order to do this, I use the following command:

git log --name-only --oneline | grep -v '.{7} '

The grep command excludes (the -v parameter) every line which starts with seven symbols (which is the length of my Git hash for the git log command) followed by space. So it filters out every Git hash message line and leave only lines with file names.

One useful improvement is to append uniq to remove duplicate lines, so it will look as follows:

git log --name-only --oneline | grep -v '.{7} ' | uniq

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionfannheywardView Question on Stackoverflow
Solution 1 - GitfannheywardView Answer on Stackoverflow
Solution 2 - GitxeroView Answer on Stackoverflow
Solution 3 - GitgMaleView Answer on Stackoverflow
Solution 4 - GitmvpView Answer on Stackoverflow
Solution 5 - GitAlfergonView Answer on Stackoverflow
Solution 6 - GitjmarceliView Answer on Stackoverflow