【问题标题】:How do I find the git revision where certain files were added?如何找到添加某些文件的 git 修订版?
【发布时间】:2013-08-16 12:03:30
【问题描述】:

背景:

我们从另一个项目向我们的 git 存储库添加了一些文件。然后,我们(在大约六个月的时间里)修补了这些文件,以支持我们应用程序实现的特殊性。

现在,我需要将这些更改传播到最初从中获取文件的项目中。

我试图获取修改文件的列表,在我们添加它们的修订版和开发分支的负责人之间:

问题是我找不到将这些文件添加到项目的修订版。

我尝试使用以前的修订号(一个足够旧在我们更改开始时的版本号)获取差异:

$ git diff c5362a135d..dev_branch -- subdir/where/the/files/are/at

(在本例中,c5362a135d 是添加这些文件之前的修订版)。

如果我在 c5362a135d 和当前 HEAD 之间存在差异,我看不到差异(只有完整的文件列表):

diff --git a/dir/subdir/file.h b/dir/subdir/file.h
new file mode 100644
index 0000000..387b33b
--- /dev/null
+++ b/dir/subdir/file.h

....

问题:

我如何找到将某些文件/目录添加到存储库的 git 修订版?

(这样文件的当前版本不会与/dev/null 区别,而是与最初添加的文件区别)。

环境

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.04
DISTRIB_CODENAME=lucid
DISTRIB_DESCRIPTION="Ubuntu 10.04.4 LTS"

$ $ git --version
git version 1.7.0.4

【问题讨论】:

标签: git


【解决方案1】:

对于一个文件,如果您执行git log <filename>,您将只获得该文件的提交,直到该文件添加到存储库时为止。不确定您有多少文件,或者它们是否是同时添加的,但这应该可以满足您的需求。

更新:

如果文件将被重命名或移动,请使用@Treze 的每个评论的--follow 选项,同样根据此答案 (https://stackoverflow.com/a/11533206/498699),您可以使用 --oneline 和 tail 获得最后一次提交:

git log --follow --oneline <filename> | tail -n 1

【讨论】:

  • 我有大约 180 个文件要处理。我将看到为此编写一个 shell 脚本。
  • 这似乎对我不起作用。它似乎不包括实际添加文件的提交。 git blame &lt;filename&gt; 显示最新的修订版本以触及每一行。查看我的一些项目,我得到的git blame 结果比git log &lt;filename&gt; 输出中显示的最旧提交更早。
  • 文件是否被重命名或路径改变?这会使历史难以追溯。最后一次提交将是文件重命名时。因此,较早的提交来自文件在其先前命名时的时间。
  • 您也可以尝试使用 --follow 选项继续列出重命名后的文件历史记录。
猜你喜欢
  • 1970-01-01
  • 2016-02-23
  • 2013-03-20
  • 1970-01-01
  • 2012-03-14
  • 2012-05-12
  • 2017-08-09
  • 2017-06-20
  • 2015-10-09
相关资源
最近更新 更多