此问题与以下问题相同: How to do a git diff on moved/renamed file? 但有一个重要的区别,我希望看到上一次提交中的文件版本与当前暂存的版本之间的变化。
git diff --staged显示整个文件被删除:
--- a/old_path/main.cpp
+++ /dev/null
@@ -0,0 +1,42 @@
- line 1
- line 2
- line 3
- etc.
并将整个文件添加到另一个文件中:
--- /dev/null
+++ b/new_path/main.cpp
@@ -0,0 +1,42 @@
+ line 1
+ line 2
+ line 2.5
+ line 3
+ etc.
没有任何方便的方法来比较两者之间的实际差异。
答案 0 :(得分:3)
如果您查看过去的提交,答案会有所不同,但使用git diff --staged
表示您正在寻找old_path/main.cpp
中HEAD
与您当前之间的差异暂存new_path/main.cpp
,它来自旧文件。在这种情况下,该命令应该有效,假设new_path/main.cpp
自上演以来没有新的更改:
git diff HEAD:old_path/main.cpp new_path/main.cpp
在new_path/main.cpp
还包含尚未暂存的其他更改的情况下,不确定如何准确指定第二条路径的索引中的版本...
编辑:在gitrevisions(7)
中稍微阅读后,看起来应该处理后一种情况:
git diff HEAD:old_path/main.cpp :new_path/main.cpp
注意:
没有修订前缀,应该指定索引中的版本。
答案 1 :(得分:1)
由于我不知道上述问题的答案,我通常使用一种迂回的方式:只要方便,特别是每当我记得时,我都会在单独的提交中进行文件移动更改。因此,一旦提交了移动,我就可以继续处理该文件并且可以执行正常的git diff - 以“正常”方式执行,为下一次提交做准备。这是我所知道的最简单的方法......问题是,有时我会忘记这样做......