git命令支持对更改的哪些解释?

时间:2014-10-22 20:54:46

标签: git

我知道git跟踪整个项目的变化而不是特定的文件。这导致我跟随问题。

我可以使用git命令对变更应用不同的解释吗?

我可能会问"哪个提交最后修改了这个特定的行?"或者"哪些提交修改了该行的内容但未从其他地方删除相同的内容?"。

我可以开箱即用,以及如何解读?哪个是默认的?

1 个答案:

答案 0 :(得分:1)

我觉得git跟踪整个项目的事实往往被误解了。这意味着什么

  • 提交,作为可重现的快照,始终引用整个项目
  • git不会将单个文件历史记录存储在单独的文件中,例如RCS

但是git仍然以文件大小为单位存储数据,称为blob对象。 blob一次只是文件的内容,与其名称分离,存储在树对象中。

这种存储方法的一个含义是文件重命名不是(总是)显式但暗示:

git mv foo.c bar.c
cp foo.c bar.c; git add bar.c; git rm foo.c

上面的两行产生完全相同的git status输出:

renamed: foo.c -> bar.c

Git只是检测到在树对象中以不同的名称引用相同的blob对象。

最后,正如@AndrewC指出的那样,git log有一些选项可以关注内容。

git log --follow <single-file>  # Print the history of a file, following renames as well
git log -S string  # Show commits where the occurrence number of string has changed
git log -G string  # Show commits whose diff contains the string