Git 从历史记录中删除提交
在 Git 中,将机密的东西添加到存储库不是一个好主意,因为它会破坏我们所有的秘密并将它们暴露给全世界,这是我们不希望的。 但有时,我们有意无意地添加了不该添加的东西。
现在我们必须解决问题并使用 Git 命令从我们的 repo 中删除机密信息。 从 Git 历史记录中删除它并不容易,因为 Git 有更丰富的背景来以各种格式保存 repo 的历史记录。
为此,我们应该更加小心地深度清理这个错误,并从该存储库的分支中删除多余的东西。
Git 有多种工具可用于撤消提交,具体取决于提交的条件和大小。 删除可以通过两种不同的方式完成,这取决于我们的失误以及我们是否已将更改推送到远程存储库。
在本文中,我们将了解两种不同的本地删除提交和使用 Git 命令强制删除提交的方法。
在 Git 中本地删除更改
删除最新提交
我们可以在命令 git reset 的帮助下删除最新的提交。 此命令以撤消更改而闻名。
但是,我们可以通过以下 Git 命令删除最近的一个。
$ git reset --hard HEAD~1
HEAD~1 指定 HEAD 之前的一次提交。 我们将使用标志 HEAD~N 通过命令 git reset
删除指定的提交。
git reset --hard HEAD~N
另一种方法可以通过提及确切的提交哈希 ID 来完成此操作。 以下命令是执行此操作的方法。
git reset --hard <sha1-commit-hash>
撤消中间提交
在命令 git revert 的帮助下,我们可以插入一个新的提交,它将撤销特定中间提交所做的更改。 它是通过以下 Git 命令完成的。
$ git revert <sha1-commit-hash>
这里,重点是 git revert
不会删除具体的中间commit。 要从历史记录中完全删除它,我们必须运行 git rebase
以及与之交互的参数,如下所示:
git rebase -i <sha1-commit-hash>
恢复已删除的提交
删除提交后,如果我们想再次恢复它,我们可以使用以下命令恢复它。
git reflog
在 Git 中强制删除更改
如果我们的队友或我们已经将更改推送到远程存储库,那么 Git 可以通过运行命令 git push
以及标志 --force 来顺利控制这种情况。
这将从作为源的默认远程仓库中删除提交,并将在分支上可用以供将来使用。
$ git push origin HEAD --force
注意
: 这种方法不安全,在使用上非常关键; 它可能会弄乱我们同事的本地存储库。 如果我们团队的某个人拉取了这个分支,它将合并到他们的工作中,我们将再次推回这个分支。
所以从同一个仓库中的新分支开始更好更方便。