如何查看单个文件的历史记录以及更改内容的完整详细信息?
git log -- [filename]向我展示了文件的提交历史,但我如何查看更改的文件内容?
git log -- [filename]
如果您使用gitgui(在Windows上):
在Repository菜单下,您可以使用Visualize master's History。
Repository
Visualize master's History
突出显示顶部窗格中的提交和右下角的文件,您将在左下角看到该提交的差异。
这让Git为每个日志条目生成补丁:
git log -p -- filename
查看#0了解更多选项-它实际上可以做很多好事。:)
要获取特定提交的diff,请使用
git show HEAD
或通过标识符指定任何其他版本。
要直观地浏览更改:
gitk
在这种情况下,#0也相当于#1。
您还可以看到文件中的特定代码行何时被#0更改。这将为文件中的每一行打印出一个简短的提交ID、作者、时间戳和完整的代码行。这是非常有用的,当你发现一个bug,你想知道它是什么时候引入的(或者是谁的错)。
对于图形视图,使用#0:
gitk [filename]
要跨文件重命名跟踪文件:
gitk --follow [filename]
要显示文件的每一行的修订版本和作者上次修改的内容:
git blame filename
或者如果你想使用强大的指责GUI:
git gui blame filename
或:
gitx -- <path/to/filename>
如果你使用gitx
git log --follow -p -- path-to-file
这将显示文件的整个历史记录(包括重命名之外的历史记录和每次更改的差异)。
换句话说,如果名为bar的文件曾经被命名为foo,那么git log -p bar(没有--follow选项)将只显示文件重命名前的历史记录——它不会显示文件被命名为foo时的历史记录。使用git log --follow -p bar将显示文件的整个历史记录,包括文件被命名为foo时的任何更改。-p选项确保每次更改都包含差异。
bar
foo
git log -p bar
--follow
git log --follow -p bar
-p
我要找的答案不在这里。它是为了查看我为提交而暂存的文件中的更改。即,
git diff --cached
#0是一个基于终端的查看器,其颜色支持类似于基于GUI的#1。
快速安装:
apt-get install tig
$ brew install tig
使用它查看单个文件的历史记录:tig [filename]
tig [filename]
或通过以下方式浏览详细的存储库历史:tig
tig
如果您想查看文件的整个历史记录,所有其他分支上的包括使用:
gitk --all <filename>
我写下载播放就是为了这个目的
pip install git-playbackgit playback [filename]
这样做的好处是既可以在命令行中显示结果(如git log -p),又可以让您使用箭头键(如gitk)逐步完成每个提交。
git log -p
使用优秀的git扩展,您将转到文件仍然存在的历史记录中的某个点(如果它已被删除,否则只需转到HEAD),切换到File tree选项卡,右键单击文件并选择File history。
File tree
File history
默认情况下,它通过重命名跟随文件,Blame选项卡允许查看给定版本的名称。
Blame
它有一些次要的陷阱,比如在点击删除版本时在View选项卡中显示fatal: Not a valid object name,但我可以忍受。:-)
View
fatal: Not a valid object name
通读并玩一点后的其他答案摘要:
通常的命令行命令是
git log --follow --all -p dir/file.c
但是您也可以使用gitk(GUI)或tig(文本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中所有内容的集中历史记录。
gdf dir
dir
如果您将Eclipse与Git插件一起使用,它具有与历史记录的出色比较视图。右键单击文件并选择“与之比较”→“历史记录”。
git diff -U <filename>给你一个统一的差异。
git diff -U <filename>
它应该在红色和绿色上着色。如果不是,请先运行:git config color.ui auto。
git config color.ui auto
将此别名添加到您的. 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输出几乎完全相同。享受。
如果您使用Sourcetree来可视化您的存储库(它是免费的并且非常好),您可以右键单击一个文件并选择日志已选
显示(下图)比gitk和列出的大多数其他选项要友好得多。不幸的是(此时)没有简单的方法从命令行启动此视图-Sourcetree的CLI目前只是打开存储库。
如果您使用TortoiseGit,您应该能够右键单击文件并执行TortoiseGit --> Show Log。在弹出的窗口中,确保:
TortoiseGit --> Show Log
未选中“Show Whole Project”选项。
Show Whole Project
All Branches选项被选中。
All Branches
您还可以尝试此操作,其中列出了更改文件特定部分的提交(在Git 1.8.4中实现)。
返回的结果将是修改此特定部分的提交列表。命令:
git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>
其中upperLimit是文件的开始行号,lowerLimit是文件的结束行号。
更多细节在http://techpurohit.in/list-some-useful-git-commands。
最近我发现了tig,发现它非常有用。有些情况下我希望它能做A或B,但大多数时候它相当整洁。
对于您的情况,tig <filename>可能是您正在寻找的。
tig <filename>
https://jonas.github.io/tig/
SmartGit
您可以将Visual Studio Code与GitLens一起使用。它是一个非常强大的工具。
安装GitLens后,转到GitLens选项卡,选择FILE HISTORY,您可以浏览它。
FILE HISTORY
我可能在开始时的OP在哪里,寻找一些简单的东西,让我使用git扩散工具和vimdiff来从特定提交开始查看存储库中文件的更改。我对我找到的答案不太满意,所以我把这个git公司remental代表orter(git增量p)脚本扔在一起,它对我很有用:
#!/usr/bin/env bash STARTWITH="${1:-}"shift 1 DFILES=( "$@" ) RunDiff(){GIT1=$1GIT2=$2shift 2 if [ "$(git diff $GIT1 $GIT2 "$@")" ]thengit log ${GIT1}..${GIT2}git difftool --tool=vimdiff $GIT1 $GIT2 "$@"fi} OLDVERS=""RUNDIFF="" for NEWVERS in $(git log --format=format:%h --reverse)doif [ "$RUNDIFF" ]thenRunDiff $OLDVERS $NEWVERS "${DFILES[@]}"elif [ "$OLDVERS" ]thenif [ "$NEWVERS" = "${STARTWITH:=${NEWVERS}}" ]thenRUNDIFF=trueRunDiff $OLDVERS $NEWVERS "${DFILES[@]}"fifiOLDVERS=$NEWVERSdone
在没有args的情况下调用,这将从repo历史记录的开头开始,否则它将以您提供的任何缩写提交哈希开始并继续到现在-您可以随时ctrl-C退出。第一个之后的任何args都会限制差异报告仅包含在这些args中列出的文件(我认为这是OP想要的,我建议除了小项目之外的所有文件)。如果您正在检查和想要从头开始的特定文件的更改,您需要为art1提供一个空字符串。如果您不是vim用户,您可以将vimdiff替换为您最喜欢的diff工具。
行为是在找到相关更改时输出提交注释,并开始为每个更改的文件提供vimdiff运行(这是git扩散工具行为,但它在这里有效)。
这种方法可能很天真,但是在这里和相关的帖子中查看了很多解决方案,许多涉及在我没有管理员权限的系统上安装新工具,其界面有自己的学习曲线。上面的脚本做了我想要的,但没有处理任何这些。当我需要更复杂的东西时,我会研究这里的许多优秀建议——但我认为这是直接响应OP的。
在源树 UI中,您可以通过在右键单击上下文菜单中选择“Log选择”选项来查找文件的历史记录:
它将显示所有提交的历史。
要获取特定文件的所有提交,请使用此命令:
git rev-list HEAD --oneline FileName
例如
git rev-list HEAD --oneline index.html
产出
7a2bb2f update_index_with_alias6c03e56 update_changese867142 Revert "add_paragraph"
如果您想查看对文件所做的更改
git log -p fileName
见gif图像