假设我在回购中具有以下历史记录
branch 1 : 1---2---4---5
\ /
branch 2 : 3
有没有办法改变第三次提交而不破坏回购的历史? (因此,第3次提交的提交ID应该保持不变)
答案 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
将尝试保留本地合并提交。