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

时间:2015-04-16 11:33:59

标签: git

我已将一些代码从文件移动到另一个文件,并在其中应用了少量更改。我希望看到这些变化的差异。

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

是否有git diff选项将当前版本中的一个文件与另一个提交中的另一个文件进行比较?或者其他任何方式?

2 个答案:

答案 0 :(得分:3)

我认为这就是你要找的东西。 HEAD~3可以用commit id替换。

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

答案 1 :(得分:1)

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

使用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