Maison  >  Article  >  outils de développement  >  Vous aider à supprimer les enregistrements de l'historique dans Git

Vous aider à supprimer les enregistrements de l'historique dans Git

PHPz
PHPzoriginal
2023-04-03 09:18:261729parcourir

Pour les développeurs qui utilisent Git pour la gestion de projet, ils rencontrent souvent des situations où ils doivent supprimer les enregistrements historiques. Par exemple, si des informations sensibles sont soumises ou si la loi exige la suppression de certains contenus. Cependant, Git est conçu pour conserver une trace de toutes les modifications. Supprimer l’historique n’est donc pas une tâche facile. Cet article présentera quelques méthodes pour vous aider à supprimer les enregistrements de l'historique dans Git.

  1. Utilisez la commande Git

Vous pouvez utiliser git reset et git push dans la commande Git pour supprimer les enregistrements de l'historique. Utilisez d’abord la commande git log pour afficher l’historique. git resetgit push 删除历史记录。首先使用 git log 命令查看历史记录。

$ git log --oneline

这会列出当前分支上的所有提交记录,每个记录都有一个 SHA-1 标识符(第一列)和一个消息(后面的列)。

然后,使用 git reset 命令将当前分支重置到要删除的提交之前。例如,如果要删除最近的三个提交记录,则可以使用:

$ git reset HEAD~3

这样就将当前分支重置到了前三个提交记录之处,历史记录中的最后三个提交会被删除。

最后,使用 git push -f 命令强制推送到远程仓库,覆盖历史记录。这会使其他人在拉取更新时遇到问题,因此需要确保所有有权限的人知道此操作。

$ git push -f

使用此方法删除历史记录时,我们建议在执行之前备份代码库,以防万一。

  1. 使用 BFG Repo-Cleaner

另一个强大的工具是 BFG Repo-Cleaner。它是一个 Java 程序,可以在本地运行,删除 Git 仓库中的历史记录。

首先,安装 BFG Repo-Cleaner。可以使用 Homebrew 在 Mac 上安装:

$ brew install bfg

或者从官网下载并安装到计算机上:

$ wget http://search.maven.org/remotecontent?filepath=com/madgag/bfg/1.14.0/bfg-1.14.0.jar

然后,在 Git 仓库的根目录下运行以下命令(请确保在删除前备份代码库):

$ java -jar /path/to/bfg.jar --delete-files filename.txt.git
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive
$ git push

其中,filename.txt.git 是包含要删除内容的文件名(例如 .git-credentials)。这里使用 BFG Repo-Cleaner 删除提交历史、refs 和 tags,然后重新压缩存储库。

需要注意的是,BFG Repo-Cleaner 可以删除仓库中的任何内容,因此需要小心操作。

  1. 创建一个新的 Git 仓库

最后一种方法是创建一个新的 Git 仓库,只包含要保留的提交记录。这种方法需要一些手动操作,但可以保留仓库的完整性,并且不会影响其他人在仓库上的工作。

首先,在原始 Git 仓库的根目录下创建一个新目录,用于保存新的 Git 仓库:

$ mkdir newrepo && cd newrepo

然后,将原始 Git 仓库的选择性提交记录复制到新目录中:

$ git clone /path/to/oldrepo --depth 1
$ cd oldrepo && git log --oneline

这样就可以将原始 Git 仓库的最后一个提交记录复制到新的 Git 仓库中。更新新仓库的远程 URL,然后将其推送到远程仓库。

$ git remote set-url origin git://new/repo.git
$ git push -u origin master

这样就创建了一个新的 Git 仓库,只包含选择性提交的记录。

总结

在 Git 中,删除历史记录是一个敏感的问题,需要小心谨慎操作。使用 git resetrrreee

Cela répertorie tous les enregistrements de validation sur la branche actuelle, chacun avec un identifiant SHA-1 (première colonne) et un message (colonnes ultérieures). 🎜🎜Ensuite, utilisez la commande git reset pour réinitialiser la branche actuelle avant le commit que vous souhaitez supprimer. Par exemple, si vous souhaitez supprimer les trois derniers enregistrements de commit, vous pouvez utiliser : 🎜rrreee🎜 Cela réinitialisera la branche actuelle aux trois premiers enregistrements de commit et les trois derniers commits de l'historique seront supprimés. 🎜🎜Enfin, utilisez la commande git push -f pour forcer le push vers l'entrepôt distant et écraser l'historique. Cela peut poser des problèmes aux autres utilisateurs qui récupèrent les mises à jour, vous devez donc vous assurer que toutes les personnes disposant des autorisations le savent. 🎜rrreee🎜Lors de la suppression de l'historique à l'aide de cette méthode, nous vous recommandons de sauvegarder la base de code avant de l'exécuter, juste au cas où. 🎜
    🎜Utilisez BFG Repo-Cleaner🎜🎜🎜Un autre outil puissant est BFG Repo-Cleaner. Il s'agit d'un programme Java qui peut être exécuté localement pour supprimer l'historique dans un référentiel Git. 🎜🎜Tout d’abord, installez BFG Repo-Cleaner. Vous pouvez l'installer sur un Mac en utilisant Homebrew : 🎜rrreee🎜 Ou téléchargez-le depuis le site officiel et installez-le sur votre ordinateur : 🎜rrreee🎜 Ensuite, exécutez la commande suivante dans le répertoire racine du référentiel Git (assurez-vous de sauvegarder la base de code avant de supprimer) : 🎜rrreee🎜 où filename.txt.git est le nom du fichier contenant le contenu à supprimer (par exemple, .git-credentials). Ici, BFG Repo-Cleaner est utilisé pour supprimer l'historique des validations, les références et les balises, puis recompresser le référentiel. 🎜🎜Il convient de noter que BFG Repo-Cleaner peut supprimer n'importe quel contenu du référentiel, vous devez donc agir avec prudence. 🎜
      🎜Créez un nouveau référentiel Git🎜🎜🎜La dernière méthode consiste à créer un nouveau référentiel Git contenant uniquement les enregistrements de validation que vous souhaitez conserver. Cette méthode nécessite un certain travail manuel mais préserve l'intégrité du référentiel et n'affecte pas le travail des autres personnes sur le référentiel. 🎜🎜Tout d'abord, créez un nouveau répertoire sous le répertoire racine du référentiel Git d'origine pour enregistrer le nouveau référentiel Git : 🎜rrreee🎜Ensuite, copiez les enregistrements de validation sélective du référentiel Git d'origine dans le nouveau répertoire : 🎜rrreee🎜Ça y est Vous pouvez copier le dernier enregistrement de validation du référentiel Git d'origine vers le nouveau référentiel Git. Mettez à jour l'URL distante du nouveau référentiel et envoyez-la vers le référentiel distant. 🎜rrreee🎜Cela crée un nouveau référentiel Git contenant uniquement les enregistrements validés de manière sélective. 🎜🎜Résumé🎜🎜Dans Git, la suppression de l'historique est une question sensible et doit être traitée avec prudence. Utilisez la commande git reset pour supprimer certains enregistrements de validation récents. Utilisez BFG Repo-Cleaner pour supprimer l'historique des validations d'un fichier ou d'un dossier spécifique. Enfin, vous pouvez éventuellement conserver les enregistrements de validation en créant un nouveau référentiel Git. Quoi qu'il en soit, vous devrez sauvegarder votre base de code avant de la supprimer, juste au cas où. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn