Using gitk to view the full history of a moved file

Here's a bash function that should show you the history of a file (using gitk) in all its incarnations ... I'll leave it as an exercise to the reader if they need it for another shell:

# bash
gitk_follow () {
  while (( "$#" )); do
    git log --oneline --name-status --follow $1;
    shift;
  done | perl -ne 'if( s{^(?:[ACDMRTUXB]|R\d+)\s+}{} ) { s{\s+}{\n}g; print; }' | sort -u
}

# used as:
gitk $(gitk_follow some_file)

updated:

Changed to use perl because I didn't pay close enough attention to the output from git log in the last version.


A simpler function using different git log options and awk to exact the file names (and the "--" that gitk needs is included):

# bash
gitk_follow () {
  while (( "$#" )); do
    git log --pretty="" --name-status --follow $1;
    shift;
  done | awk '{print $NF}' | sort -u
}

# used as:
gitk -- $(gitk_follow some_file)

If you want to see the changes that was made in each commit even the file has been renamed, you can use the option -p of git log:

git log -p --follow [file/with/path]

Tags:

Git

Move

Gitk