我在git存储库中有两个文件,可能在两个不同的分支上。在他们各自分支的历史中的某些时刻,他们具有相同的内容。我想在文件相同的每个分支上找到最新的提交。
我可以编写一个工具来迭代每次提交的历史记录并对文件进行散列,然后在另一个分支上重复并找到最佳匹配。 git中有更好的方法吗?
如果我想用两组文件而不是单个文件来做这件事,我不知道以前哪些对是相同的?
上下文:我工作的项目在过去的某个时刻从其他地方提取代码,现在情况有所不同,包括文件结构。我想通过查找在初始导入代码后发生的提交并仅影响导入的文件来生成要考虑从上游提取的提交列表。
答案 0 :(得分:0)
这是第一次削减它,有人可能会想出更好的东西
( git log --first-parent branch2..branch1 --pretty='%H 1'|cat -n # branch1 commits and
git log --first-parent branch1..branch2 --pretty='%H 2'|cat -n # branch2 commits
) | while read l h b; do # append each commit's path/to/file's hash
echo $l $h $b $(git rev-parse -q --verify $h:path/to/file);
done |
sort -s +3 | # collect identical content together (key +3 is the hash)
uniq -2 | # keep only latest of each per branch (key -2 is branch & hash
uniq -D -3 # and only show content that appears on both branches
排序的关键规格是不推荐使用的表单,我在此处使用它来匹配uniq
的使用情况。
要在多个文件集中查找重复项,只需在上面做多个回声,这个想法保持不变。