修改git中的第一条提交消息?

修改git中的第一条提交消息?,git,Git,假设我有一个提交消息日志。有没有办法修改第一个提交消息?或者这就是为什么我们将第一个提交作为初始提交,因为它无法完成。您实际上无法更改任何提交。“修改”所做的(或在交互式重新基中“重写”)是创建一个新的、不同的提交副本。在这个副本中,您完全更改了需要更改的内容,其余内容都是一样的 这里的问题是,所有后续提交最终都指向原始的第一次提交,而不是副本。例如,假设正好有三个提交。让我们称它们为A,B,和C。分支标签master,指向提交C。但是提交C指向B,B指向A。因为A是初始提交,所以链在这里结束(

假设我有一个提交消息日志。有没有办法修改第一个提交消息?或者这就是为什么我们将第一个提交作为初始提交,因为它无法完成。

您实际上无法更改任何提交。“修改”所做的(或在交互式重新基中“重写”)是创建一个新的、不同的提交副本。在这个副本中,您完全更改了需要更改的内容,其余内容都是一样的

这里的问题是,所有后续提交最终都指向原始的第一次提交,而不是副本。例如,假设正好有三个提交。让我们称它们为
A
B
,和
C
。分支标签
master
,指向提交
C
。但是提交
C
指向
B
B
指向
A
。因为
A
是初始提交,所以链在这里结束(这就是为什么您知道提交是初始提交:它不指向任何人。)

为了使这一点有用,您现在必须同时复制
B
C
,对每一个进行一次更改:
B
的副本,我们称之为
B'
,必须指向
A'
,而
C
的副本必须指向
B'

A <- B <- C   <-- master

A' <- B' <- C'
现在可以安全地放弃原来的
A-B-C
提交链,因为您已经复制了所有您关心的内容,同时进行了必要的更改,以使新的
A'-B'-C'
链看起来像您希望的那样

通过使用
git-rebase-i--root
可以一直返回到根提交。但与所有重定基址或任何其他“编辑历史记录”的方式一样,这将给那些获得您的作品的早期出版副本并相信您仍然拥有提交
a-B-C
而不是新的
a'-B'-C'
序列的人带来巨大的头痛。因此,如果您的存储库被其他人克隆或推送到其他人手中,请不要这样做,或者至少在没有与他们讨论之前不要这样做。

您实际上无法更改任何提交。“修改”所做的(或在交互式重新基中“重写”)是创建一个新的、不同的提交副本。在这个副本中,您完全更改了需要更改的内容,其余内容都是一样的

这里的问题是,所有后续提交最终都指向原始的第一次提交,而不是副本。例如,假设正好有三个提交。让我们称它们为
A
B
,和
C
。分支标签
master
,指向提交
C
。但是提交
C
指向
B
B
指向
A
。因为
A
是初始提交,所以链在这里结束(这就是为什么您知道提交是初始提交:它不指向任何人。)

为了使这一点有用,您现在必须同时复制
B
C
,对每一个进行一次更改:
B
的副本,我们称之为
B'
,必须指向
A'
,而
C
的副本必须指向
B'

A <- B <- C   <-- master

A' <- B' <- C'
现在可以安全地放弃原来的
A-B-C
提交链,因为您已经复制了所有您关心的内容,同时进行了必要的更改,以使新的
A'-B'-C'
链看起来像您希望的那样


通过使用
git-rebase-i--root
可以一直返回到根提交。但与所有重定基址或任何其他“编辑历史记录”的方式一样,这将给那些获得您的作品的早期出版副本并相信您仍然拥有提交
a-B-C
而不是新的
a'-B'-C'
序列的人带来巨大的头痛。因此,如果您的存储库由其他人克隆或推送到其他人,不要这样做,或者至少在没有与他们讨论之前不要这样做。

这太棒了,解释得很好,甚至像我这样的白痴也知道事情是如何运作的。这太棒了,解释得很好,甚至像我这样的白痴也知道事情是如何运作的。
A <- B <- C   <-- master

A' <- B' <- C'
A <- B <- C

A' <- B' <- C'   <-- master