使用gitk查看已移动文件的完整历史记录

时间:2013-01-07 10:40:42

标签: git move gitk

经过多次搜索,我还没有找到一个令人满意的方法,这个方法很容易用来查看Git中移动文件的完整历史记录,更重要的是在Gitk中查看。使用“git log --follow [filePath]”甚至“gitk --follow [filePath]”会为您提供文件所涉及的提交,但不会显示移动前文件的实际更改历史记录。因此,我提出了一个原始但简单的解决方案。

  1. 对已移动的文件执行gitk:“gitk [newFilePath]”。复制第一次提交的SHA1 ID,这应该是文件移动的提交。
  2. 对复制的SHA1 ID执行gitk:“gitk [SHA1ID]”。最新的提交应该是移动发生的时间。找到移动的文件并复制旧路径。
  3. 对我们刚刚复制的SHA1 ID和旧文件路径执行gitk:“gitk [SHA1ID] - [oldFilePath]”
  4. 此过程允许您在移动之前查看文件的历史记录。如果有多个动作,则可以重复上述过程。

    如果有更好的解决方案可以解决这个问题,特别是如果有办法将这些步骤结合起来显示移动的完整历史记录,我们将非常感激。

4 个答案:

答案 0 :(得分:10)

如果您想要查看每次提交中所做的更改,即使文件已重命名,您也可以使用-p的{​​{1}}选项:

git log

答案 1 :(得分:4)

这是一个bash函数,它应该显示一个文件的历史(使用gitk)在它的所有化身......我会把它作为练习留给读者,如果他们需要它用于另一个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)

更新

更改为使用perl,因为我没有对上一版本中git log的输出给予足够的关注。

答案 2 :(得分:3)

使用不同git log选项的简单函数和用于确定文件名的awk(以及包含gitk需要的" - ")

# 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)

答案 3 :(得分:0)

另一种方法是使用Atlassian开发的SourceTree应用程序(GUI)。在应用程序内,您可以右键单击该文件,然后选择“Log Selected ...”

Log Selected

在弹出窗口中,它允许您“关注重命名的文件”:

enter image description here

我也使用GitHub for Mac,但在那里没有看到那种功能。

(我与其中任何一方都没有联系!)