在Git中,如何从一个修订版到另一个修订版获得文件更改的详细列表?

时间:2011-05-19 11:43:52

标签: git rename file-listing

我在服务器上使用Git存储库来版本化发送到服务器的用户数据文件。我有兴趣在任何两个版本之间获取已更改文件的列表。

我知道git diff --name-only <rev1> <rev2>,但这只给了我一个文件名列表。我也对重命名和复制特别感兴趣。理想情况下,输出将是这样的:

updated:  userData.txt
renamed:  picture.jpg -> background.jpg
copied:   song.mp3 -> song.mp3.bkp

有可能吗? --name-status似乎也不表示重命名和复制。

2 个答案:

答案 0 :(得分:27)

git diff --name-status -C <rev1> <rev2>

应该更接近你想要的东西。

--name-status会显示文件名及其各自的状态:

(A|C|D|M|R|T|U|X|B)
  

添加(A),复制(C),删除(D),修改(M),重命名(R),
  类型(即常规文件,符号链接,子模块,...)已更改(T),
  未合并(U),未知(X)或配对破碎(B)

OP Jean Philippe Pellet添加:

  

状态字母RC“后面跟着一个分数,表示移动或副本的来源和目标之间的相似性百分比,并且是唯一的”。   )

关于复制或移动的文件:

-C[<n>]
--find-copies[=<n>]
  

检测副本以及重命名。如果指定n,则其含义与-M<n>相同。

--find-copies-harder
  

出于性能原因,默认情况下,-C选项仅在相同变更集中修改了副本的原始文件时才查找副本。
  此标志使命令检查未修改的文件作为副本源的候选者   对于大型项目来说,这是一项非常昂贵的操作,因此请谨慎使用。提供多个-C选项具有相同的效果。


brauliobo建议in the comments

git diff --stat -C
git show --stat -C
git log --stat -C

答案 1 :(得分:3)

我相信``会显示该信息

git diff -M -C --stat