Git 获取新文件名

Git 获取新文件名,git,Git,我有一个文件重命名的提交。是否有可能从旧文件名和提交密钥中获取新文件名 示例:file.php在提交5119afae52e5ae08ca8e378e00895d824a179f03时重命名为filex.php 我正在搜索从有关5119afae52e5ae08ca8e378e00895d824a179f03和file.php的信息中返回filex.php的内容。如果运行: git log --oneline -- file.php 您将看到修改此file.php的所有提交的列表 其中最新的一次提

我有一个文件重命名的提交。是否有可能从旧文件名和提交密钥中获取新文件名

示例:file.php在提交5119afae52e5ae08ca8e378e00895d824a179f03时重命名为filex.php

我正在搜索从有关5119afae52e5ae08ca8e378e00895d824a179f03和file.php的信息中返回filex.php的内容。

如果运行:

git log --oneline -- file.php
您将看到修改此file.php的所有提交的列表

其中最新的一次提交(位于顶部)将是file.php重命名为filex.php时的提交

您可以通过运行git diff来确认这一点,其中是使用git日志找到的提交id

注意:如果没有-oneline选项,这也可以工作;-oneline选项在每次提交时只提供一行,这使您更容易理解整个列表。
您还可以尝试git log-oneline-graph…

以下bash脚本将完成此任务:

用法:

重命名文件的新名称:

注释

脚本仅检测精确的重命名。如果您对重命名感兴趣,并且对重命名文件进行了一些修改,则可以将相应的相似性阈值传递给命令。 如果commitid的父级中不存在文件oldname,或者在该提交中未重命名该文件,则不会输出任何内容。
此文件上的简单git diff无效?谢谢您的回答:但它似乎没有像预期的那样工作,因为这个特定的文件似乎从file.php重命名为filex.php,然后再次重命名为file.php。但除此之外,我已经有了特定的提交散列,只是缺少文件名filex.php.Ok。试试这个:git log-name status-file.php。您应该能够发现此文件何时被删除或添加。
new_name_of_renamed_file <oldname> <commitid>
#!/usr/bin/env bash

if [ $# -ne 2 ]
then
    echo "Usage: new_name_of_renamed_file <oldname> <commitid>"
    exit 1
fi

pattern="^rename from ${1/./\\.}\$"
git diff -M100% "$2"^.."$2"|grep -A1 "$pattern"|tail -n1|sed 's/^rename to //'