【问题标题】:Git - find commit when file was created [duplicate]Git - 创建文件时查找提交[重复]
【发布时间】:2013-11-11 13:06:12
【问题描述】:

确定在哪个提交特定文件添加到存储库的最简单方法是什么?

【问题讨论】:

    标签: git


    【解决方案1】:

    可能最简单的事情就是简单:

    git log FILE | grep commit | tail -1 | awk '{ print $NF }'
    

    【讨论】:

      【解决方案2】:

      这很容易。以下命令显示了该文件已添加到 repo 的第一次提交。

      git log --oneline filename | tail -1
      

      【讨论】:

        【解决方案3】:

        你可以说:

        git log -1 --reverse --pretty=oneline filename
        

        这应该会给你第一次提交。

        来自git help

           -<n>
               Limits the number of commits to show. Note that this is a commit
               limiting option, see below.
        
           --reverse
               Output the commits in reverse order. Cannot be combined with
               --walk-reflogs.
        

        为了消除提交信息,说:

        git log -1 --format="%H" --reverse filename
        

        【讨论】:

        • 虽然对于“正常”情况(添加文件然后反复修改),这可能是您可以做的最好的事情,但如果文件是例如,我不确定是否有一个好的解决方案。添加,修改,删除,然后在以后重新引入,或者如果文件由于一系列重命名等而存在......
        • Note that these are applied before commit ordering and formatting options, such as --reverse. 您的 1 次提交限制将在之前撤消应用
        【解决方案4】:

        如果你真的想找到引入文件的提交,你必须考虑重命名。因此使用

        git log --follow --diff-filter=A -- <filepath>
        

        --diff-filter=[(A|C|D|M|R|T|U|X|B)...​[*]]
        仅选择已添加 (A)、已复制 (C)、已删除 (D)、已修改 (M)、重命名 (R) 的文件...

        --关注
        继续列出重命名后的文件历史记录(仅适用于单个文件)。

        最终您还必须调整--find-renames 阈值。

        --find-renames[=]
        如果生成差异,检测并报告每次提交的重命名。有关在遍历历史记录时跨重命名跟踪文件,请参阅 --follow。如果指定了 n,则它是相似性指数的阈值(即添加/删除的数量与文件大小相比)。例如,-M90% 表示如果超过 90% 的文件没有更改,Git 应该将删除/添加对视为重命名。如果没有 % 符号,则该数字将被读取为分数,前面有一个小数点。即,-M5 变为 0.5,因此与 -M50% 相同。同样,-M05 与-M5% 相同。要将检测限制为精确重命名,请使用 -M100%。默认相似度指数为 50%。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-21
          • 2014-11-02
          • 2018-06-16
          • 2015-12-30
          • 2021-03-23
          • 2012-06-17
          • 1970-01-01
          相关资源
          最近更新 更多