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]