使用Git版本化来查看文件的更改历史logging
我如何查看Git中单个文件的更改历史logging,以及更改内容的详细信息?
我已经得到:
git log -- [filename]
它显示了文件的提交历史logging,但是如何获取每个文件更改的内容?
我试图从MS SourceSafe过渡,过去是一个简单的right-click
→ show history
。
为此,我会使用:
gitk [filename]
或者按照文件名重命名
gitk --follow [filename]
您可以使用
git log -p filename
让git为每个日志条目生成补丁。
看到
git help log
为更多的select – 它实际上可以做很多很好的事情:)为了得到只差异的具体提交你可以
git show HEAD
或任何其他修订标识符。 或者使用
gitk
以可视方式浏览更改。
git log --follow -p -- file
这将显示文件的全部历史logging(包括重命名以及每次更改的差异)。
换句话说,如果名为bar
的文件曾经被命名为foo
,那么git log -p bar
(没有--follow
选项)将只显示文件的历史,直到它被重命名 – 它不会显示文件的历史,当它被称为foo
。 使用git log --follow -p bar
会显示文件的全部历史logging,包括文件被称为foo
时的所有变化。 -p
选项确保每次更改都包含差异。
如果您希望保持文本为基础,您可能需要使用tig 。
快速安装:
- apt-get :
# apt-get install tig
- 自制软件(OS X) :
$ brew install tig
用它来查看单个文件的历史logging: tig [filename]
或浏览详细的回购logging: tig
类似于gitk
但基于文本。 支持terminal的颜色!
git whatchanged -p filename
在这种情况下也等同于git log -p filename
。
你也可以看到当一个文件中的特定行代码被git blame filename
改变时。 这将为文件中的每一行输出一个简短的提交ID,作者,时间戳和完整的代码行。 在find一个错误并且你想知道什么时候被引入(或者是谁的错误)之后,这是非常有用的。
SourceTree用户
如果您使用SourceTree来可视化您的存储库(它是免费的,相当不错),您可以右键单击一个文件,然后select日志选定
显示(下面)比gitk更友好,大多数其他选项列出。 不幸的是(在这个时候),从命令行启动这个视图并不容易–SourceTree的CLI目前只是打开了回收站。
要显示修改和作者上次修改文件的每一行:
git blame filename
或者如果你想使用强大的怪GUI:
git gui blame filename
在阅读完他们并玩了一下之后,其他答案总结如下:
通常的命令行命令是
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'
这样我就可以inputgdf dir
来获得子目录dir
中所有内容的重点历史logging。
添加这个别名到你的.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输出一样。 请享用。
要么:
gitx -- <path/to/filename>
如果你使用的是gitx
我为这个确切的目的写了git-playback
pip install git-playback git playback [filename]
这有利于在命令行中显示结果(如git log -p
),同时让您使用箭头键(如gitk
)逐步完成每个提交。
如果你想看到一个文件的全部历史, 包括 所有其他分支,使用:
gitk --all <filename>
使用优秀的Git扩展 ,您可以在文件仍然存在的历史logging中点(如果它已被删除,否则只需要转到HEAD),切换到File tree
选项卡,右键单击文件并selectFile history
。
默认情况下,它通过重命名后面的文件,“ Blame
选项卡允许在给定的修订版本中看到名称。
它有一些小的陷阱,如显示fatal: Not a valid object name
单击删除版本时,在View
选项卡中fatal: Not a valid object name
,但我可以忍受。 🙂
如果你使用仓库菜单下的git GUI(在Windows上),你可以使用“Visualize master's History”。 突出显示顶部窗格中的提交和右下angular的文件,您将在左下angular看到提交的差异。
最近我发现了tig
,发现它非常有用。 有些情况下,我希望它做A或B,但大多数时候它是相当整洁的。
对于你的情况, tig <filename>
可能是你正在寻找的。
如果你使用TortoiseGit,你应该可以右键点击文件并执行TortoiseGit --> Show Log
。 在popup的窗口中,确保:
-
“
Show Whole Project
”选项未被选中。 -
“
All Branches
”选项被选中。
我正在寻找的答案是不是在这个线程是看到我已经提交的提交文件的变化。 即
git diff --cached
你也可以尝试这个列出提交文件的特定部分的提交(在Git 1.8.4中实现)。
返回的结果将是修改这个特定部分的提交列表。 命令如下所示:
git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>
其中upperLimit是start_line_number,lowerLimit是文件的ending_line_number。
SmartGit :
- 在菜单中启用以显示不变的文件:查看/显示不变的文件
- 右键单击文件并select“日志”或按“Ctrl-L”
如果你使用eclipse插件的话,它与历史logging有很好的对比。 右键单击文件并select“比较”=>“历史”
git diff -U <filename>
给你一个统一的差异。
它应该在红色和绿色上着色。 如果不是的话,先运行: git config color.ui auto
。