【发布时间】:2014-07-02 19:50:15
【问题描述】:
我在某处读到每个git add 都是一个新快照。
所以,如果在文件 X 上,我做了一些更改,一个 git add,更多更改和另一个 git add,我如何查看第一次和第二次调用 git add 之间的更改?
【问题讨论】:
-
你在哪里读到的?我猜每个提交都是一个快照,但是一个添加?
-
我不记得了。也许我只是记错了。
标签: git
我在某处读到每个git add 都是一个新快照。
所以,如果在文件 X 上,我做了一些更改,一个 git add,更多更改和另一个 git add,我如何查看第一次和第二次调用 git add 之间的更改?
【问题讨论】:
标签: git
您可能使用git fsck --full查看旧的“添加”,如“Git Internals - Maintenance and Data Recovery”中所述。
这类似于“Recovering added file after doing git reset --hard HEAD^”。
如果您已将对象添加到索引中(通过使用
git add),会为该对象的该状态创建一个 blob - 但没有树(因此,提交)对象参考它。
这就是获取“悬空”松散对象文件的方式,如果您运行git fsck,它将向您显示未引用的 blob(如果运行,git gc 将删除这些类型的对象)。
所以你可以很容易地找到那些中间版本,因为没有一个文件 name 引用它们(因为没有树,只有 blob):你必须查看它们的 内容.
【讨论】:
git commit --amend 和git rebase 并改变了我的工作流程,所以我不需要这些高级的“内部”命令。
每个git commit 都是一个新快照。 git add 没有任何功能来跟踪您所做的更改何时被添加。您必须在第一次添加后提交,然后使用 git diff 来查看更改的内容(或者,在您已经进行第二次添加后,git diff --cached)。
【讨论】:
你读错了。 git add 只是将更改或新文件添加到暂存区(也称为索引)。它们将包含在下一次提交中,这可能是您正在谈论的快照。我认为没有办法在随后的git add 调用之后显示暂存区域之间的差异。如果你提交了一些东西,你可以看到你的工作目录和最后一次提交之间的区别git diff,以及你最后两次提交之间的区别git diff HEAD~1 HEAD。检查man git diff。
【讨论】: