2

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

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

我可以比较暂存文件版本 1 和暂存文件版本 2 吗?

谢谢!

4

2 回答 2

4

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

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

现在git diff将向您展示暂存文件和上次编辑之间的差异。如果你想要暂存文件和最后一次提交之间的差异,你必须做git diff --staged.

于 2011-10-06T10:33:29.213 回答
3

Git 索引是为提交暂存文件的位置;查看此StackOverflow 答案以获取更多信息。当您暂存文件以进行提交时,索引会反映最新的暂存信息。第二次暂存文件将更改 Git 索引以反映文件在工作目录中的内容。

但是,通过一些额外的工作,您可以看到每个阶段的文件内容。您可以git ls-files在每个阶段之后使用来获取文件blob列表,然后您可以在以后使用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 哈希值才能完成。

于 2011-10-06T11:12:27.747 回答