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

这篇博客讨论了如何在Git中查看文件的更改历史记录。提到了多种方法,包括使用`git log -p <file>`,gitk,tig,Git Extensions,SourceTree,Eclipse,TortoiseGit等工具。还介绍了别名设置和一些特定命令,如`git blame`和`git whatchanged`,以更详细地跟踪文件变更。
摘要由CSDN通过智能技术生成

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

我有:

git log -- [filename]

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

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


#1楼

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

快速安装:

  • apt-get# apt-get install tig
  • Homebrew(OS X)$ brew install tig

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

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


#2楼

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

gitk --all <filename>

#3楼

为此,我会使用:

gitk [filename]

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

gitk --follow [filename]

#4楼

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

pip install git-playback
git playback [filename]

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


#5楼

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

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

它有一些小的陷阱,比如显示fatal: Not a valid object name在单击删除修订时,在View选项卡中fatal: Not a valid object name ,但我可以忍受。 :-)


#6楼

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

通常的命令行命令是

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中所有内容的焦点历史记录。


#7楼

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


#8楼

git diff -U <filename>为您提供统一的差异。

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


#9楼

将此别名添加到.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输出几乎完全相同。 请享用。


#10楼

SourceTree用户

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

在此输入图像描述

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

在此输入图像描述


#11楼

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


#12楼

您可以使用

git log -p filename

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

看到

git help log

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

git show HEAD 

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

gitk

以可视方式浏览更改。


#13楼

在这种情况下, git whatchanged -p filename也相当于git log -p filename

您还可以看到文件中的特定代码行何时使用git blame filename更改。 这将为文件中的每一行打印出一个简短的提交ID,作者,时间戳和完整的代码行。 在您发现错误并且想知道它何时被引入(或者它是谁的错误)之后,这非常有用。


#14楼

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

  • 未选中“ Show Whole Project ”选项。

  • 选中“ All Branches ”选项。


#15楼

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

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

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

其中upperLimit是start_line_number,lowerLimit是文件的ending_line_number。

有关详细信息, 访问https://www.techpurohit.com/list-some-useful-git-commands


#16楼

最近我发现了tig并发现它非常有用。 在某些情况下,我希望它能做到A或B,但大部分时间它都很整洁。

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

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


#17楼

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

git blame filename

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

git gui blame filename

#18楼

要么:

gitx -- <path/to/filename>

如果你正在使用gitx


#19楼

SmartGit

  1. 在菜单中启用显示未更改的文件:查看/显示未更改的文件
  2. 右键单击该文件并选择“Log”或按“Ctrl-L”

#20楼

git log --follow -p -- path-to-file

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

换句话说,如果名为bar的文件曾被命名为foo ,那么git log -p bar (不带--follow选项)将只显示文件的历史记录,直到它被重命名为止 - 它不会显示文件的历史,当它被称为foo 。 使用git log --follow -p bar将显示文件的整个历史记录,包括文件被称为foo时的任何更改。 -p选项确保每次更改都包含差异。


#21楼

你可以将vscode与GitLens一起使用,它是一个非常强大的工具。 安装GitLens后,转到GitLens选项卡,选择FILE HISTORY ,您可以浏览它。

在此输入图像描述


#22楼

我正在寻找的答案不是在这个线程中是看到我为提交而上演的文件中的更改。 即

git diff --cached
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值