我已经将一些代码从一个文件移动到另一个文件,并在其中应用了一些更改。我想看看这些变化。
这个问题对我来说似乎很常见,但我从来不需要做这样的事情。我只知道如何将同一个文件与之前版本中的自己进行比较,或者在同一个版本中比较2个不同的文件。
是否有git diff
选项将当前版本中的一个文件与另一个提交中的另一个文件进行比较?还是其他方式?
我想这就是你要找的。头~3可以替换为提交id。
git diff HEAD~3:oldfile.xml file/in/another/path/newfile.xml
使用git ls-tree
获取要比较的提交文件的SHA1标识符,然后使用git diff[选项]
$ 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