是否有可能上演两次相同的文件和比较(差异)两阶段式的版本?与文件myclass.java例如:Git:我们可以比较两个相同文件的分步版本吗?
- I期我的文件==> git的添加myclass.java(上演文件第1版)
- 我做这个文件的一些变化
- 我再次上演我的文件(上演文件第2版)
我可以比较上演文件版本1和上演文件版本2?
Thx!
是否有可能上演两次相同的文件和比较(差异)两阶段式的版本?与文件myclass.java例如:Git:我们可以比较两个相同文件的分步版本吗?
我可以比较上演文件版本1和上演文件版本2?
Thx!
第二git add
覆盖第一,但你仍然可以得到的差异。
# edit edit edit
$ git add myclass.java
# edit some more
现在git diff
会告诉你上演文件和最后编辑之间的差异。如果你想上演文件和上次之间的差异提交,你必须做git diff --staged
。
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散列值来完成。
+1,因为我没想到的是,但它是一个大量的工作,可能不应该由一个Git新手使用。使用直线上升'git的diff'比较上演与工作副本应该能满足大多数用户,但他们确实希望倍数的diff上演版本的情况下,似乎这是他们必须做什么。 – johnny
作为后续行动,没有人知道这可能没有做'LS-tree'每一次?我要看看日志有点... – johnny
@johnny完全同意;这不是Git新手应该涉及的东西。但这是我发现回答OP问题的唯一方法。如果有更好的方法,我也很好奇。 –