Git - 显示HEAD和初始(第一个)版本之间的文件差异

时间:2016-12-28 23:22:14

标签: git diff

假设某个存储库在某个时刻创建了一个文件test.txt并使用一些数据将其提交到存储库。该文件可能不存在于存储库的初始提交中。

接下来,很多提交都会对此文件进行更改。 现在,我想生成diff输出,该输出显示文件test.txt的初始(第一个)版本与当前(HEAD)之间的差异。 我该怎么做?

编辑:问题已更改为注意该文件可能不存在于初始提交中。

4 个答案:

答案 0 :(得分:3)

首先,获取第一个包含test.txt的提交的哈希值。

git log --oneline --diff-filter=A -- text.txt

比,用HEAD区分哈希值。 (确保首先拉出当前HEAD。)

git diff [hash from previous command] text.txt

这两个命令可以组合在一起

git diff `git log --oneline --diff-filter=A -- text.txt | awk '{print $1}'` HEAD text.txt

答案 1 :(得分:0)

git diff 27fa75e test.txt

其中27fa75e是初始版本的哈希值。您可以使用git log找到该哈希值。

如果原始提交中不存在该文件,git将通知您它是一个新文件。要查找文件的第一次提交,您可以使用git log

git log test.txt

这将为您提供该文件的所有提交的日志,最后一次提交文件的时间。请注意,如果重命名文件,这将无济于事,如果是,则跟踪原始版本将更加困难。 This question讨论了如何深入了解存储库并提取提交:您必须返回相关提交并进行文件比较以查找您正在查找的文件。

答案 2 :(得分:0)

我似乎找到了解决方案。我使用git log --reverse来获取第一个提交的哈希,它接触文件并与HEAD进行比较:

git diff `git log --pretty=format:"%h" --reverse test.txt | head -1` HEAD test.txt

答案 3 :(得分:-1)

基于soundslikeodd的回答。实际上并不是答案。

这是我为自己编写的脚本,为什么不在这里分享...它需要git版本控制下的任何文件,git diff s它是文件的最早版本。我认为如果多次添加相同的文件(并在中间删除),这将无法可靠地工作,我还没有彻底测试这个。我做的事情是确保我可以从任何地方使用这个脚本(我把它设置为别名)。

#!/bin/bash
#takes a file under git version control as the first argument. diffs with the files original version.
cd $(dirname "$1")
git diff $(git log --oneline --diff-filter=A -- $1 | awk '{print $1}') HEAD $1

我将此作为答案添加的原因只是它不能很好地格式化为注释。请告诉我这种答案是否在这里不受欢迎。