2016-12-21 73 views

回答

2

如果提交没有推送到远程服务器,您可以使用git rebase来修改git历史记录。

你可以这样做:

git rebase -i commit-hash^ 

它会显示所有提交的名单。第一行应该是你想要删除的提交。从您编辑的文件中删除该行,保存并关闭。

如果您在此之前确实推送到远程服务器,请注意,刚刚删除的提交之后的提交将基于您刚从历史记录中删除的提交之前的提交而被重写。出于这个特殊原因,所有的提交都会因为你的历史发生分歧而改变。所以如果你试图推动它,它不会快进,你将不得不强制推动。

因此,如果您不熟悉git rebase我建议让分支指向您正在修改历史记录的分支以免出现问题。另外,如果该特定提交在多个分支间共享,则分支一个分支的历史将导致多个问题,因为您将无法轻松地将一个分支从旧历史合并到新历史记录中的分支。它将复制许多提交,并且您在一个分支中删除的提交不会在其他分支中被删除。

认为它有修改git历史就像时间旅行。任何一点变化都会创造一个新的平行宇宙。过去改变之后的一切都会受到你过去所做的改变的影响。

5

它不应该受到上述提交影响。

如果您从一个分支的中间提交,还是真的在任何地方,除了一个分支可能是HEAD,你会改写该分支的历史。这是因为用于实现此目的的工具,即git rebase -interactivegit filter-branch,需要重新提交删除提交后的所有内容。对于公共分支机构来说,这通常是不可取的,因为这会迫使每个人采取非常严厉的措施来跟上这一变化。

相反,你一个更安全的赌注是使用git revert

git revert <SHA-1 of commit to delete> 

这将添加一个新提交您分支的顶部,有效地撤销这中间提交所做的一切。

顺便说一句,如果你真的想要删除该提交,我会建议做一个交互式底座。