Git:我们可以比较相同文件的两个分阶段版本吗?

时间:2011-10-06 10:24:12

标签: git git-diff git-add

是否可以将两个相同的文件分段并比较(差异)两个分阶段的版本?文件myclass.java的示例:

  • 我暂存我的文件==> git add myclass.java(暂存文件版本1)
  • 我对此文件进行了一些更改
  • 我再次播放我的文件(分阶段文件版本2)

我可以比较分阶段文件版本1和分阶段文件版本2吗?

THX!

2 个答案:

答案 0 :(得分:4)

第二个git add会覆盖第一个,但你仍然可以获得差异。

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

现在git diff将显示分阶段文件和最后编辑之间的差异。如果您想要暂存文件和最后一次提交之间的差异,则必须执行git diff --staged

答案 1 :(得分: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哈希值才能完成。