就像在现实生活中一样,改变历史并不是一件小事。;)
在 git 中,提交包括(除其他外)作者姓名和父提交。因此,您不能简单地更改提交作者等属性。您唯一能做的就是丢弃旧的提交并创建一个新的固定提交。但是由于下一个提交确实包含作为父级的原始提交,因此您也必须更改该提交。- 但是你不能这样做,但你需要更换旧的,等等。
可以git rebase
帮助您解决这种丑陋的事情:它需要一系列提交并创建一个具有更改历史的全新提交。由于 git 中的分支只是指向单个提交的指针,因此变基只是将该指针从旧历史记录更改为新历史记录。
X-A-B-C-D <- "old master"
`a-b-c-d <- "new master"
只要您在本地存储库上工作,就可以随意更改历史记录。一旦您通过将提交推送到 github 之类的共享存储库来发布提交,事情就会发生变化。如果您已经发布了旧的历史记录,现在又发布了新的历史记录,那么这两个版本都已发布,并且如果其他人也在该存储库上工作,那么旧版本很可能会回到您的历史记录中。
因此,一旦您发布了历史,通常就不要更改它。但是,如果您确定没有其他人在您的远程存储库上工作,您无论如何都可以这样做:在本地修复您的历史记录并强制将其推送到存储库。
在本地更改历史记录很容易git rebase -i
。不幸的是,对于您的存储库的根提交来说,这有点棘手。请参阅使用 Git 更改项目的首次提交?详情。