Git:如何找到与目录最匹配的提交?

标签 git diff commit patch

有人拿了一个版本(我不知道)的 Moodle,在一个目录中应用了许多更改,然后发布了它(tree here)。

我如何确定最有可能编辑原始项目的哪个提交以形成此树?

这将允许我使用此补丁在适当的提交中形成一个分支。它肯定来自 1.81.9分支,可能来自发布标签,但特定提交之间的差异对我帮助不大。

事后更新: knittl's answer让我尽可能接近。我首先将我的补丁存储库添加为远程“外部”(没有共同的提交,没关系),然后使用几个格式选项在循环中进行比较。第一个使用了--shortstat格式:

for REV in $(git rev-list v1.9.0^..v1.9.5); do 
    git diff --shortstat "$REV" f7f7ad53c8839b8ea4e7 -- mod/assignment >> ~/rdiffs.txt; 
    echo "$REV" >> ~/rdiffs.txt; 
done;

第二个只是在没有上下文的情况下计算统一差异中的行更改:

for REV in $(git rev-list v1.9.0^..v1.9.5); do 
    git diff -U0 "$REV" f7f7ad53c8839b8ea4e7 -- mod/assignment | wc -l >> ~/rdiffs2.txt;
    echo "$REV" >> ~/rdiffs2.txt; 
done;

有成千上万的提交需要挖掘,但是 this one似乎是最接近的匹配。

最佳答案

您可以编写一个脚本,将给定的树与您存储库中的修订范围进行比较。

假设我们首先将更改后的树(没有历史记录)获取到我们自己的存储库中:

git remote add foreign git://…
git fetch foreign

然后我们输出我们想要匹配的每个修订版本的 diffstat(简写形式):

for REV in $(git rev-list 1.8^..1.9); do
   git diff --shortstat foreign/master $REV;
done

寻找更改量最少的提交(或使用某种排序机制)

关于Git:如何找到与目录最匹配的提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6388283/

相关文章:

Git 权限在 Docker 容器内被拒绝

linux - LINUX 中基于 GUI 的 svn+diff 工具用于目录比较

linux - Unix Diff 命令比较 2 个 txt 文件之间的差异并生成更多命令

git - 如何将所有提交从特定用户移动到新分支?

mysql - 提交和回滚在 Mysql 的 MyISAM 中不起作用

mysql - 可以将 RDBMS 的 COMMIT 事务/"all-or-nothing"范例映射到 R 吗?

git - 如何理解 .git/conf 文件中的远程 "origin"获取设置?

GitHub:已删除本地分支如何删除 GitHub 分支

linux - Git 连接到 Active Directory

git - 如何从当前版本和比最新版本更旧的版本之间的差异 View 编辑文件的当前版本?