在git中修改第一个提交消息?

时间:2014-03-27 19:24:40

标签: git

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

1 个答案:

答案 0 :(得分:4)

您实际上无法更改 任何提交。什么“修改”(或交互式rebase中的“reword”)是提交一个新的,不同的副本。在此副本中,您可以准确地更改需要更改的内容,其余所有内容都相同。

这里的问题是所有后续提交最终都会指向您原来的第一次提交,而不是副本。例如,假设有三个提交。我们称他们为ABC。分支标签master指向提交C。但是提交C指向BB指向A。由于A是初始提交,因此链在这里结束(这就是你知道提交是初始提交的方式:它指向没有人。)

A <- B <- C   <-- master

您现在建议将提交A复制到某个新提交,我们称之为A'

A <- B <- C   <-- master

A'

为了使其有用,您现在还必须复制BC,每个都进行一次更改:B的副本,我们将其称之为{ {1}}必须指向B'A'的副本必须指向C

B'

以这种方式复制每个提交后,您可以将标签A <- B <- C <-- master A' <- B' <- C' 更改为指向最后一个副本(此处为master):

C'

现在放弃原始的A <- B <- C A' <- B' <- C' <-- master 提交链是安全的,因为您复制了所关注的所有内容,同时进行了必要的更改,以使新的A-B-C链看起来像你想要它。

执行此操作直到root提交的方法是使用A'-B'-C'。但是,与所有重新定位或任何其他“编辑历史记录”的方式一样,对于那些获得早期发布的作品副本并且认为您仍然提交git rebase -i --root而非新{{}}的人来说,这将会引起很大的麻烦。 1}}序列。因此,如果您的存储库被其他人克隆或推送给其他人,请不要这样做 - 或者至少在没有先与他们讨论的情况下不这样做。