Git - 显示 HEAD 和初始(第一个)版本之间的文件差异
Git - show file diff between HEAD and initial (first) version
假设某个存储库在某个时候创建了一个文件 test.txt
并将其与一些数据一起提交到存储库。该文件可能不存在于存储库的初始提交中。
接下来,大量提交对该文件进行更改。
现在,我想生成 diff
输出,显示文件 test.txt
的初始(第一个)版本与当前版本 (HEAD
) 之间的差异。
我该怎么做?
编辑:问题已更改为注意该文件可能不存在于初始提交中。
git diff 27fa75e test.txt
其中 27fa75e
是初始版本的哈希值。您可以使用 git log
.
找到该哈希
如果原始提交中不存在该文件,git
会让您知道这是一个新文件。要查找文件的第一个提交,您可以使用 git log
:
git log test.txt
这将为您提供该文件所有提交的日志,最后一次提交的时间是文件首次提交的时间。请注意,如果文件已重命名,这将无济于事,如果已重命名,则追踪原始版本将更加困难。 This question 讨论如何深入存储库并提取提交:您必须返回相关提交并进行文件比较以找到您要查找的文件。
首先,获取其中包含 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 }'` HEAD text.txt
我好像找到了解决办法。我使用 git log --reverse
获取涉及文件的第一个提交的哈希值并与 HEAD:
进行比较
git diff `git log --pretty=format:"%h" --reverse test.txt | head -1` HEAD test.txt
基于 soundslikeodd 的回答。实际上不是答案。
这是我为自己编写的脚本,为什么不在这里分享它...它接受 git 版本控制下的任何文件,并且 git diff
它执行文件的最早版本。我认为如果同一个文件被多次添加(并在其间被删除)并且我没有对此进行彻底测试,这将无法可靠地工作。不过,我所做的是确保我可以从任何地方使用这个脚本(我将它设置为别名)。
#!/bin/bash
#takes a file under git version control as the first argument. diffs with the files original version.
cd $(dirname "")
git diff $(git log --oneline --diff-filter=A -- | awk '{print }') HEAD
我将其添加为答案的原因只是因为它不能很好地格式化为评论。如果这种回答在这里不受欢迎,请告诉我。
假设某个存储库在某个时候创建了一个文件 test.txt
并将其与一些数据一起提交到存储库。该文件可能不存在于存储库的初始提交中。
接下来,大量提交对该文件进行更改。
现在,我想生成 diff
输出,显示文件 test.txt
的初始(第一个)版本与当前版本 (HEAD
) 之间的差异。
我该怎么做?
编辑:问题已更改为注意该文件可能不存在于初始提交中。
git diff 27fa75e test.txt
其中 27fa75e
是初始版本的哈希值。您可以使用 git log
.
如果原始提交中不存在该文件,git
会让您知道这是一个新文件。要查找文件的第一个提交,您可以使用 git log
:
git log test.txt
这将为您提供该文件所有提交的日志,最后一次提交的时间是文件首次提交的时间。请注意,如果文件已重命名,这将无济于事,如果已重命名,则追踪原始版本将更加困难。 This question 讨论如何深入存储库并提取提交:您必须返回相关提交并进行文件比较以找到您要查找的文件。
首先,获取其中包含 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 }'` HEAD text.txt
我好像找到了解决办法。我使用 git log --reverse
获取涉及文件的第一个提交的哈希值并与 HEAD:
git diff `git log --pretty=format:"%h" --reverse test.txt | head -1` HEAD test.txt
基于 soundslikeodd 的回答。实际上不是答案。
这是我为自己编写的脚本,为什么不在这里分享它...它接受 git 版本控制下的任何文件,并且 git diff
它执行文件的最早版本。我认为如果同一个文件被多次添加(并在其间被删除)并且我没有对此进行彻底测试,这将无法可靠地工作。不过,我所做的是确保我可以从任何地方使用这个脚本(我将它设置为别名)。
#!/bin/bash
#takes a file under git version control as the first argument. diffs with the files original version.
cd $(dirname "")
git diff $(git log --oneline --diff-filter=A -- | awk '{print }') HEAD
我将其添加为答案的原因只是因为它不能很好地格式化为评论。如果这种回答在这里不受欢迎,请告诉我。