问:
如何查看单个文件的历史记录以及更改内容的完整详细信息?
git log – [filename] 向我显示文件的提交历史记录,但如何查看更改的文件内容?
答1:
打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!
这让 Git 可以为每个日志条目生成补丁:
git log -p -- filename
有关更多选项,请参阅 git help log — 它实际上可以做很多好事。 😃
要获取特定提交的差异,请使用
git show HEAD
或通过标识符指定任何其他修订。
要直观地浏览更改:
gitk
git show HEAD 显示所有文件,你知道如何跟踪单个文件(正如 Richard 所要求的)吗?
您使用: git show -- 文件名,它将显示该版本的差异,以防万一。
--stat 也很有帮助。您可以将它与 -p 一起使用。
这很棒。 gitk 在指定不再存在的路径时表现不佳。我使用了 git log -p --path 。
加上 gitk 看起来像是由布吉怪物建造的。这是一个很好的答案,最适合原始问题。
答2:
与HuntsBot一起,探索全球自由职业机会–huntsbot.com
对于图形视图,请使用 gitk:
gitk [filename]
要跨文件重命名跟踪文件:
gitk --follow [filename]
但我什至有一个将上述内容与“git blame”相结合的工具,让我可以浏览文件的源代码,因为它会随着时间的推移而改变......
不幸的是,这不遵循文件过去重命名的历史。
我也在寻找以前重命名的文件的历史记录,并首先找到了这个线程。解决方案是使用“git log --follow ”正如菲尔指出的here。
作者正在寻找一个命令行工具。虽然 gitk 与 GIT 一起提供,但它既不是命令行应用程序,也不是特别好的 GUI。
他是在寻找命令行工具吗? “右键单击-> 显示历史记录”当然并不意味着它。
答3:
huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!
git log --follow -p -- path-to-file
这将显示文件的整个历史记录(包括重命名之外的历史记录以及每次更改的差异)。
换句话说,如果名为 bar 的文件曾经被命名为 foo,那么 git log -p bar(没有 --follow 选项)将只显示文件的历史记录,直到它被重命名 - 它不会显示文件被称为 foo 时的历史记录。使用 git log --follow -p bar 将显示文件的整个历史记录,包括在文件被称为 foo 时对文件所做的任何更改。 -p 选项确保每次更改都包含差异。
--stat 也很有帮助。您可以将它与 -p 一起使用。
我同意这是真正的答案。 (1.) --follow 确保您看到文件重命名 (2.) -p 确保您看到文件如何更改 (3.) 它只是命令行。
@NHDaly 我注意到添加了 -- ,但我不知道为什么这样做最好?它是做什么的?
@Benjohn -- 选项告诉 Git 它已到达选项的末尾,并且 -- 后面的任何内容都应视为参数。对于 git log,只有当您的路径名以 破折号 开头时,这才有意义。假设您想知道名称为“--follow”的文件的历史记录:git log --follow -p -- --follow
@Benjohn:通常, -- 很有用,因为它还可以防止任何与您输入的文件名匹配的 revision 名称,这实际上可能很可怕。例如:如果您有一个名为 foo 的分支和一个文件,则 git log -p foo 将显示 git log 历史记录到 foo,而不是 file foo 的历史记录。但是@DanMoulding 是正确的,因为 --follow 命令仅将单个文件名作为其参数,因此这不是必需的,因为它不能是 revision。我刚刚学到了。也许您当时将其排除在答案之外是对的;我不确定。
答4:
huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。
tig 是基于终端的查看器,其颜色支持类似于基于 GUI 的 gitk。
快速安装:
APT:apt-get 安装 tig
Homebrew (OS X): $ brew install tig
使用它来查看单个文件的历史记录:tig [filename]
或通过以下方式浏览详细的存储库历史记录:tig
优秀的基于文本的工具,很好的答案。当我看到在我的无头服务器上安装 gitk 的依赖项时,我吓坏了。会再次投票A +++
您也可以使用 tig 查看特定文件,即 tig -- path/to/specific/file
要显示文件的所有更改,包括重命名,请使用 tig --follow filename。非常感谢@falken 帮助我们发现了如此出色的 TUI 工具。
答5:
HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com
在这种情况下,git whatchanged -p filename 也等同于 git log -p filename。
您还可以使用 git blame filename 查看文件中的特定代码行何时更改。这将为文件中的每一行打印出一个简短的提交 ID、作者、时间戳和完整的代码行。在您发现错误并且想知道它是什么时候引入的(或者是谁的错)之后,这非常有用。
“鼓励新用户改用 git-log。(...) 保留该命令主要是出于历史原因;”
答6:
huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求
源树用户
如果您使用 Sourcetree 来可视化您的存储库(它是免费的并且非常好),您可以右键单击一个文件并选择 Log Selected
https://i.stack.imgur.com/CHvfE.png
显示(下图)比 gitk 和列出的大多数其他选项更友好。不幸的是(此时)没有简单的方法可以从命令行启动这个视图——Sourcetree 的 CLI 目前只是打开存储库。
https://i.stack.imgur.com/Y9ALz.png
我特别喜欢“关注重命名的文件”选项,它允许您查看文件是否被重命名或移动。
但除非我弄错了(请告诉我!),在 gui 中一次只能比较两个版本?是否有任何客户端具有优雅的界面,可以同时区分多个不同的版本?可能有像 Sublime Text 那样的缩小视图?我认为那将非常有用。
@SamLewallen如果我理解正确,您想比较三个不同的提交?这听起来类似于三向合并(我的、你的、基础的)——通常这种策略用于解决合并冲突,不一定要比较三个任意提交。有许多工具支持三向合并stackoverflow.com/questions/10998728/…,但诀窍是为这些工具提供特定的修订gitready.com/intermediate/2009/02/27/…
你救了我的命。您可以使用 gitk 找到 SHA1 哈希,然后根据找到的 SHA1 打开 SourceTree 输入 Log Selected..。
@MarnenLaibow-Koser 我不记得当时为什么需要 SHA。啊哈哈。
答7:
huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。
要显示上次修改文件每一行的版本和作者:
git blame filename
或者如果你想使用强大的责备 GUI:
git gui blame filename
blame 命令不显示有关已删除代码的信息。通过 gitk 或 tig 查看每个提交表明了这一点。
答8:
huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求
阅读并玩了一下其他答案的摘要:
通常的命令行命令是
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 中所有内容的集中历史记录。
我认为这是一个很好的答案。也许您也没有获得投票,因为您回答了其他方式(恕我直言,更好)来查看更改,即除了 git 之外,还通过 gitk 和 tig。
只是为了补充答案。找到路径(在 git 空间中,直到它仍然存在于存储库中)。然后使用上述命令“git log --follow --all -p ”。可能存在这种情况,该文件/文件夹将在历史记录中被删除,因此找到仍然存在的最大路径,并尝试获取其历史记录。有效!
--all 适用于所有分支,其余部分在@Dan 的答案中进行了解释
哦,伙计,经过这么长时间寻找超越重命名跟踪文件的好解决方案,终于,我在这里找到了它。像魅力一样工作!谢谢!
答9:
一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会
您可以将 Visual Studio Code 与 GitLens 一起使用。这是一个非常强大的工具。
安装好 GitLens 后,进入 GitLens 标签页,选择 FILE HISTORY 即可浏览。
https://i.stack.imgur.com/H0j9A.png
答10:
huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。
将此别名添加到您的 .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 输出几乎完全相同。享受。
在我运行那个 lg 快捷方式后,我说(我引用)“漂亮!”。但是,请注意“--graph”之后的“\n”是一个错误。
也可以使用 git lg -p filename - 它返回搜索文件的漂亮差异。
答11:
huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。
最近我发现了 tig,发现它非常有用。在某些情况下,我希望它是 A 或 B,但大多数时候它相当整洁。
对于您的情况,tig 可能就是您要查找的内容。
huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。
版权归原作者 HuntsBot 所有, 如有侵权,请联系我们删除。