首页 文章

使用Git版本控制查看文件的更改历史记录

提问于
浏览
2639

如何在Git中查看单个文件的更改历史记录,完整的详细信息?

我有:

git log -- [filename]

它显示了文件的提交历史记录,但是如何获取每个文件更改的内容?

我正在尝试从MS SourceSafe转换过去,这曾经是一个简单的 right-clickshow history .

21 回答

  • 4

    最近我发现 tig 并发现它非常有用 . 在某些情况下,我相当整洁 .

    对于您的情况, tig <filename> 可能是您正在寻找的 .

    http://jonas.nitro.dk/tig/

  • 13

    为了这个目的,我写了git-playback

    pip install git-playback
    git playback [filename]
    

    这样既可以在命令行中显示结果(如 git log -p ),也可以使用箭头键(如 gitk )逐步执行每次提交 .

  • 1272

    要么:

    gitx -- <path/to/filename>

    如果你正在使用gitx

  • 2053

    如果要查看文件的整个历史记录,包括在所有其他分支上使用:

    gitk --all <filename>
    
  • 4

    如果您在Repository菜单下使用git GUI(在Windows上),则可以使用“Visualize master's History” . 突出显示顶部窗格中的提交和右下角的文件,您将在左下方看到该提交的差异 .

  • 2

    您也可以尝试使用它来列出已更改文件特定部分的提交(在Git 1.8.4中实现) .

    返回的结果将是修改此特定部分的提交列表 . 命令如下:

    git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>
    

    其中upperLimit是start_line_number和lowerLimit是文件的ending_line_number .

  • 8

    如果您使用TortoiseGit,您应该能够右键单击该文件并执行 TortoiseGit --> Show Log . 在弹出的窗口中,确保:

    未选中

    • ' Show Whole Project '选项 .

    选中

    • ' All Branches '选项 .
  • 22

    SmartGit:

    • 在菜单中启用以显示未更改的文件:查看/显示未更改的文件

    • 右键单击该文件并选择'Log'或按'Ctrl-L'

  • 93

    git diff -U <filename> 给你一个统一的差异 .

    它应该是红色和绿色 . 如果不是,请先运行: git config color.ui auto .

  • 60

    如果您正在使用带有git插件的eclipse,它与历史记录具有出色的比较视图 . 右键单击该文件并选择“与...比较”=>“历史”

  • 4

    使用优秀的Git Extensions,您可以访问文件仍然存在的历史记录中的一个点(如果它已被删除,否则只需转到HEAD),切换到 File tree 选项卡,右键单击该文件并选择 File history .

    默认情况下,它通过重命名跟随文件, Blame 选项卡允许查看给定修订的名称 .

    它有一些小问题,比如在点击删除修订版时在 View 标签中显示 fatal: Not a valid object name ,但我可以忍受 . :-)

  • 105

    我正在寻找的答案不是在这个帖子中看到我为了提交而上演的文件的变化 . 即

    git diff --cached
    
  • 14

    为此,我会使用:

    gitk [filename]
    

    或者按照文件名过去重命名

    gitk --follow [filename]
    
  • 9

    您可以使用

    git log -p filename
    

    让git为每个日志条目生成补丁 .

    看到

    git help log
    

    更多选项 - 它实际上可以做很多好事:)为了获得特定提交的差异你可以

    git show HEAD
    

    或标识符的任何其他修订 . 或者使用

    gitk
    

    以可视方式浏览更改 .

  • 7

    git log --follow -p -- file

    这将显示文件的 entire 历史记录(包括重命名以外的历史记录以及每次更改的差异) .

    换句话说,如果名为 bar 的文件曾被命名为 foo ,那么 git log -p bar (没有 --follow 选项)将仅显示文件's history up to the point where it was renamed -- it won' t显示文件的历史记录,当它被称为 foo 时 . 使用 git log --follow -p bar 将显示文件的整个历史记录,包括文件被称为 foo 时的任何更改 . -p 选项确保每次更改都包含差异 .

  • 16

    如果您希望保持基于文本,则可能需要使用 tig .

    快速安装:

    • apt-get# apt-get install tig

    • Homebrew (OS X)$ brew install tig

    用它来查看单个文件的历史记录: tig [filename]
    或者浏览详细的回购历史: tig

    gitk 类似,但基于文本 . 终端支持颜色!

  • 1927

    在这种情况下,git whatchanged -p filename也等同于git log -p filename .

    您还可以查看文件中的特定代码行何时更改为git blame filename . 这将为文件中的每一行打印出一个简短的提交ID,作者,时间戳和完整的代码行 . 这是非常有用的've found a bug and you want to know when it was introduced (or who'故障之后) .

  • 42

    SourceTree用户

    如果您使用SourceTree可视化您的存储库(它是免费且非常好),您可以右键单击一个文件并选择 Log Selected

    enter image description here

    显示屏(下方)比gitk更友好,列出的大多数其他选项 . 不幸的是(此时)没有简单的方法从命令行启动此视图 - SourceTree的CLI目前只打开repos .

    enter image description here

  • 151

    要显示哪个修订版本和作者上次修改了文件的每一行:

    git blame filename
    

    或者如果你想使用强大的blame GUI:

    git gui blame filename
    
  • 3

    通过阅读并播放后的其他答案摘要:

    通常的命令行命令是

    git log --follow --all -p dir/file.c
    

    但是你也可以使用gitk(gui)或tig(text-ui)来提供更加人性化的方式来查看它 .

    gitk --follow --all -p dir/file.c
    
    tig --follow --all -p dir/file.c
    

    在debian / ubuntu下,这些可爱工具的安装命令如预期:

    sudo apt-get install gitk tig
    

    而我目前正在使用:

    alias gdf='gitk --follow --all -p'
    

    这样我就可以输入 gdf dir 来获取子目录 dir 中所有内容的焦点历史记录 .

  • 4

    将此别名添加到.gitconfig:

    [alias]
        lg = log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\n--abbrev-commit --date=relative
    

    并使用这样的命令:

    > git lg
    > git lg -- filename
    

    输出看起来几乎与gitk输出完全相同 . 请享用 .

相关问题