将文件与另一个提交中的另一个文件进行比较

Posted

技术标签:

【中文标题】将文件与另一个提交中的另一个文件进行比较【英文标题】:Compare file to another file in another commit 【发布时间】:2015-06-22 18:50:28 【问题描述】:

我已将一些代码从一个文件移动到另一个文件,并对其进行了少许更改。我想通过差异来查看这些变化。

这个问题对我来说似乎很常见,但我从来不需要做这样的事情。我只知道如何比较上一个版本中的同一个文件,或者同一个版本中的两个不同文件。

是否有git diff 选项可以将当前修订版中的一个文件与另一个提交中的另一个文件进行比较?还是其他方式?

【问题讨论】:

可能重复***.com/questions/17563726/git-diff-for-one-commit @kravasb 我不认为它是重复的,我不想将整个提交与另一个提交进行比较,我只是想要那段代码的差异,所以比较新文件对另一个会很棒 【参考方案1】:

我认为这就是您要寻找的。 HEAD~3 可以替换为提交 id。

git diff HEAD~3:oldfile.xml file/in/another/path/newfile.xml

【讨论】:

今天学到了一个新东西。 :-) 这正是我想要的,再次感谢 太棒了! :) 很高兴我能帮上忙!【参考方案2】:

一个肮脏但有效的解决方案

使用git ls-tree 获取要比较的提交文件的SHA1 标识符,然后使用git diff [options] <blob> <blob> 并提供两个SHA1 标识符作为参数。

$ git ls-tree commit1 dir1/dir2/file1.txt
100644 blob 7d252b754d46a8fcd0613a96710c9326942d7a92   dir1/dir2/file1.txt

$ git ls-tree commit2 dirA/fileB.txt
100644 blob 4d000ed739c880a26686a2843dae6eeeb4109a37   dirA/fileB.txt

$ git diff 7d252b754d46a8fcd0613a96710c9326942d7a92 4d000ed739c880a26686a2843dae6eeeb4109a37

如果您需要经常这样做,您甚至可以将所有内容打包到一个小的 shell 脚本中:

#!/bin/bash

# This script does not validate its command line arguments!

COMMIT1=$1
FILE1=$2
COMMIT2=$3
FILE2=$4

BLOB1=$(git ls-tree $COMMIT1 $FILE1 | cut -f3 -d' ' | cut -f1)
BLOB2=$(git ls-tree $COMMIT2 $FILE2 | cut -f3 -d' ' | cut -f1)

git diff $BLOB1 $BLOB2

运行如下:

$ script.sh commit1 dir1/dir2/file1.txt commit2 dirA/fileB.txt

【讨论】:

确实 @crea1 的解决方案看起来不错,谢谢你的努力!

以上是关于将文件与另一个提交中的另一个文件进行比较的主要内容,如果未能解决你的问题,请参考以下文章

如何将char数组中的值与另一个char进行比较

如何在Ansible中比较多个文件

如何将当前分支与 Visual Studio 2019 中的另一个分支进行比较?

将 NSManagedObject 数组与另一个“对象”类型 Swift 2 的数组进行比较

将一个数组中的数字与另一个数组 Javascript 的索引进行比较

选择一列的子集,然后与另一列进行比较