2011-10-06 60 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问题的唯一方法。如果有更好的方法,我也很好奇。 –

相关问题