2012-11-26 47 views
2

此問題與以下問題相同: How to do a git diff on moved/renamed file? 但有一個重要的區別,我希望看到前一個提交中的文件版本和當前正在執行的版本之間的更改。git diff - 關於移動的文件?

git的差異--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. 

沒有比較實際的任何方便的方式兩者之間的差異。

回答

3

答案有點不同,如果你看過去的提交,但使用git diff --staged建議您正在尋找HEAD中的old_path/main.cpp與您目前從舊文件派生的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 

請注意:沒有版本前綴,它應指定索引中的版本。

+0

+1,謝謝。我想要第二個,它適用於我的目的(new_path/main.cpp同時包含暫存和非暫存更改)。第一個給出了什麼git diff --staged已經給了。 – augustin

+0

man gitrevisions提到「舞臺編號(0到3)」,但似乎沒有定義數字對應的內容...... man git-stage/git-add似乎也對這個主題是靜音的。任何想法? – augustin

+0

嗯......也許你需要更新版本的'git'手冊頁...我的(v1.7.12.3)在':''gitrevisions(7)'的標題下說:「」一個缺失的階段號......命名一個階段0條目,在合併期間,階段1是共同的祖先,階段2是目標分支的版本......,階段3是來自正在合併的分支的版本。 – twalberg

1

因爲我不知道上述問題的答案,所以我通常使用一種迂迴的方式:只要方便,尤其是每當我記得時,我都會在單獨的提交中進行文件移動更改。因此,一旦移動被執行,我可以繼續處理文件,並且可以執行正常的git diff - 按照「正常」方式進行,爲下一次提交做好準備。這是我知道的最簡單的方法...問題是,有時我忘了這樣做...