After much searching, I have not found a satisfactory method that is easy to use to view the complete history of a moved file in Git and more importantly in Gitk. Using gi
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]
Another alternative is to use the SourceTree application (GUI) developed by Atlassian. Inside the application you can right-click on the file and select "Log Selected ..."
.
In the pop-up window it then allows you to "Follow renamed files":
I also use GitHub for Mac, but didn't see that kind of functionality in there, yet.
(I am not affiliated with either of them!)
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.