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

注意: 这种方法不安全,在使用上非常关键; 它可能会弄乱我们同事的本地存储库。 如果我们团队的某个人拉取了这个分支,它将合并到他们的工作中,我们将再次推回这个分支。

所以从同一个仓库中的新分支开始更好更方便。

查看笔记

扫码一下
查看教程更方便