2

这个问题与以下问题相同: How to do a git diff onmoved/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.

没有任何方便的方法来比较两者之间的实际差异。

4

2 回答 2

3

如果您查看过去的提交,答案会有所不同,但使用git diff --staged表明您正在寻找old_path/main.cppinHEAD和当前 staged之间的差异,该差异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

注意:没有修订前缀,它应该指定索引中的版本。

于 2012-11-26T17:47:00.177 回答
1

由于我不知道上述问题的答案,我通常使用迂回的方式:只要方便,尤其是每当我记得时,我都会在单独的提交中进行文件移动更改。因此,一旦提交了移动,我就可以继续处理该文件,并且可以以“正常”方式执行正常的 git diff --staged ,为下一次提交做准备。这是我所知道的最简单的方法......问题是,有时我忘记这样做......

于 2012-11-26T14:02:38.993 回答