2011-10-06 59 views
2

是否有可能上演兩次相同的文件和比較(差異)兩階段式的版本?與文件myclass.java例如:Git:我們可以比較兩個相同文件的分步版本嗎?

  • I期我的文件==> git的添加myclass.java(上演文件第1版)
  • 我做這個文件的一些變化
  • 我再次上演我的文件(上演文件第2版)

我可以比較上演文件版本1和上演文件版本2?

Thx!

回答

4

第二git add覆蓋第一,但你仍然可以得到的差異。

# edit edit edit 
$ git add myclass.java 
# edit some more 

現在git diff會告訴你上演文件和最後編輯之間的差異。如果你想上演文件和上次之間的差異提交,你必須做git diff --staged

3

Git的指標就是文件上演提交;看看這個StackOverflow answer欲知更多信息。當您提交文件進行提交時,索引反映了最新的階段信息。第二次暫存文件將改變Git索引以反映工作目錄中的文件內容。

然而,隨着一些額外的工作,你可以看到文件的內容,因爲它是每個階段。您可以使用git ls-files每個階段後,獲取文件blobs的列表,然後您可以在以後使用使用diff或其他一些差異工具比較。

這裏有一個小樣本的會話作爲一個例子。

$ git init 
Initialized empty Git repository in /home/user/tmp/.git/ 
$ echo "foo" > foo 
$ git add foo 
$ git ls-files --stage 
100644 257cc5642cb1a054f08cc83f2d943e56fd3ebe99 0 foo 
$ echo "bar" > foo 
$ git add foo 
$ git ls-files --stage 
100644 5716ca5987cbf97d6bb54920bea6adde242d87e6 0 foo 
$ git cat-file blob 257cc56 > foo.257cc56 
$ git cat-file blob 5716ca5 > foo.5716ca5 
$ diff foo.257cc56 foo.5716ca5 
1c1 
< foo 
--- 
> bar 

但這是很多工作,需要仔細規劃和存儲blob散列值來完成。

+0

+1,因爲我沒想到的是,但它是一個大量的工作,可能不應該由一個Git新手使用。使用直線上升'git的diff'比較上演與工作副本應該能滿足大多數用戶,但他們確實希望倍數的diff上演版本的情況下,似乎這是他們必須做什麼。 – johnny

+0

作爲後續行動,沒有人知道這可能沒有做'LS-tree'每一次?我要看看日誌有點... – johnny

+1

@johnny完全同意;這不是Git新手應該涉及的東西。但這是我發現回答OP問題的唯一方法。如果有更好的方法,我也很好奇。 –

相關問題