Git在不更改提交ID的情况下更改了旧提交的更新

时间:2020-11-02 20:13:32

标签: git github commit

假设我在回购中具有以下历史记录

branch 1 :    1---2---4---5
                   \ /
branch 2 :          3

有没有办法改变第三次提交而不破坏回购的历史? (因此,第3次提交的提交ID应该保持不变)

1 个答案:

答案 0 :(得分:1)

是的,但仅限本地。

您可以使用git-replace替换提交​​,但保留ID。这只能在本地完成。如果要推动它,则仍然需要rewrite the commit, and all following commits, with a new ID


为什么不呢?

不变的提交ID对于Git的工作方式至关重要。

A commit ID represents a checksum of its contents and its parents IDs。这意味着,如果您和我都具有提交ABC123,我们不仅知道我们具有相同的提交, ,而且具有相同的历史记录 。这有助于使Git推拉速度如此之快,他们只需要交换提交ID。


在更改历史记录时避免其他协作者出现问题的一种简单方法是鼓励git pull --rebase=merges。与其尝试将其本地更改与远程服务器合并,而不是尝试将其本地更改与远程服务器合并会导致问题,而是因为它们的本地历史记录与远程服务器历史记录不同,它会在新的远程服务器上重写其本地更改。

与其他变基不同,这是安全的。它避免了没有价值的“更新合并”,只会使历史复杂化。

您可以通过将pull.rebase设置为merges来使其成为默认值。 merges将尝试保留本地合并提交。