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

Kir*_*hee 21 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]"

此过程将允许您在移动之前查看文件的历史记录.如果有多个移动,则可以重复上述过程.

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

Wil*_*uta 11

如果你想看到在每个所做的更改提交即使该文件已被重命名,你可以使用选项-pgit log:

git log -p --follow [file/with/path]
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的解决方案!我之前没有见过其他人的解决方案使用 -p 开关和“git log --follow”。最好在 gitk 中看到它,但我肯定会使用这个方法! (2认同)
  • 这似乎不适用于“gitk”?我使用 `gitk -p --follow [file/with/path]` 得到的结果与使用 `gitk --follow [file/with/path]` 得到的结果相同 (2认同)

Bri*_*erg 5

这是一个 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)
Run Code Online (Sandbox Code Playgroud)

更新:

改为使用 perl 是因为我没有足够关注上一个版本中 git log 的输出。