Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git查看签入/提交分支的历史记录_Git_Git Extensions - Fatal编程技术网

Git查看签入/提交分支的历史记录

Git查看签入/提交分支的历史记录,git,git-extensions,Git,Git Extensions,我是Git新手,所以问一些与之相关的基本问题。 早些时候,我使用了clearcase和svn 例如,在Subversion中,当我们进行一些文件更改并签入/提交它们时,就会创建一个相同的日志,如链接“”中所示。因此,Subversion会维护各种签入/提交的日志历史以及每次提交期间签入的文件 Git是否还维护了分支的所有签入历史记录以及每次签入期间更改/添加/删除的文件? 如何在Git extension/browser中或通过命令查看此信息(对分支的各种签入/提交以及每次提交时生效的文件) 换

我是Git新手,所以问一些与之相关的基本问题。 早些时候,我使用了clearcase和svn

例如,在Subversion中,当我们进行一些文件更改并签入/提交它们时,就会创建一个相同的日志,如链接“”中所示。因此,Subversion会维护各种签入/提交的日志历史以及每次提交期间签入的文件

Git是否还维护了分支的所有签入历史记录以及每次签入期间更改/添加/删除的文件? 如何在Git extension/browser中或通过命令查看此信息(对分支的各种签入/提交以及每次提交时生效的文件)

换句话说:在Git的任何分支中,假设今天我签入/提交一些文件更改。几天后,我又做了一些更改/添加/删除了一些文件并签入它们。 现在,在更多的日子之后,我想看到所有提交到分支,以及在每次签入/提交期间我更改/签入的所有文件。 如何在Git extension/browser中或通过命令查看所有签入相关信息?

您在寻找什么 git log-p。显示所更改文件的差异。 此外,git日志还有许多其他选项,可以帮助您缩小范围,明确您要寻找的内容。这是参考资料

GIT是否还维护了分支的所有签入历史记录以及每次签入期间更改/添加/删除的文件

否:Git的模型完全不同

换句话说:在GIT的任何分支中,假设今天我签入/提交一些文件更改

Git不存储更改。Git存储提交。每次提交都表示每个文件的完整快照,包括提交时每个文件的内容,完整无缺

更准确地说,提交是一个对象这是一个Git术语,但我们也可以在这里使用它,它也可以通过唯一的散列ID标识,例如
5D826E972970A784BD7BDF587512510097B8C7
(这是Git存储库中Git的提交的散列ID):

  • 包含一些元数据,如提交人的姓名、电子邮件地址和时间戳
  • 包含其前一个提交的哈希ID—通常只有一个
  • 包含您提供的日志消息;及
  • 包含表示快照的Git对象的哈希ID
额外的间接寻址级别(提交包含树的哈希ID,其中包含包含文件内容的blob的哈希ID)允许Git跨多个提交重用未修改的文件。每个Git对象都是100%只读的,因此一旦提交,所有文件的内容都会一直保存(或者至少,直到删除提交本身,这相当棘手)

Git将把提交作为更改呈现给您,但要做到这一点,
Git log
从最后一次提交开始,由其哈希ID标识,您必须以某种方式提供该ID。(您可以通过原始散列ID来完成,但这太难看了。我们稍后再讨论这个问题。)这是最后一次提交,因为Git现在可以使用该提交中存储的前一个散列ID反向工作:

... <-F <-G <-H   <-- start here at H
名称
master
附带单词
HEAD
。这意味着这是我们目前的分支机构

让我们现在就开始做一个新的提交(像往常一样修改文件和
git-add
等等)。Git收集我们的日志消息,永久冻结所有文件的内容,生成一个树对象来记住它们,并生成一个commit对象来存储元数据,如commit
H
的散列ID、新树的散列ID、我们输入的日志消息等等。这个新的提交对象获得了一些新的大而难看的散列ID,我们称之为
I
,而不是猜测它。
I
的父级将是
H

...--F--G--H   <-- master (HEAD)
            \
             I
所以现在,如果我们要求Git向我们显示
master
,Git将提取
I
,显示
I
的日志消息,提取
H
,将其与提取的
I
进行比较,并向我们显示从
H
I
的差异——所有这些都不需要我们输入任何散列ID

请注意,如果我们在提交之前将一个新的分支名称
develope
附加到
H
,并使其成为我们的
,则新的提交
I
将在新分支上执行:

...--F--G--H   <-- master
            \
             I   <-- develop (HEAD)
…--F--G--H
...--F--G--H
            \
             I   <-- master (HEAD)
...--F--G--H   <-- master
            \
             I   <-- develop (HEAD)