Heim Entwicklungswerkzeuge Idiot Helfen Sie beim Löschen von Verlaufsdatensätzen in Git

Helfen Sie beim Löschen von Verlaufsdatensätzen in Git

Apr 03, 2023 am 09:18 AM

Entwickler, die Git für das Projektmanagement verwenden, stoßen häufig auf Situationen, in denen sie historische Datensätze löschen müssen. Zum Beispiel, wenn sensible Informationen übermittelt werden oder das Gesetz die Entfernung bestimmter Inhalte vorschreibt. Da Git jedoch darauf ausgelegt ist, alle Änderungen aufzuzeichnen, ist das Löschen des Verlaufs keine leichte Aufgabe. In diesem Artikel werden einige Methoden vorgestellt, die Ihnen beim Löschen von Verlaufsdatensätzen in Git helfen.

  1. Git-Befehl verwenden

Sie können git reset und git push im Git-Befehl verwenden, um Verlaufsdatensätze zu löschen. Verwenden Sie zunächst den Befehl git log, um den Verlauf anzuzeigen. 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

Hier werden alle Commit-Datensätze im aktuellen Zweig aufgelistet, jeweils mit einer SHA-1-Kennung (erste Spalte) und einer Nachricht (spätere Spalten). 🎜🎜Dann verwenden Sie den Befehl git reset, um den aktuellen Zweig auf den Stand vor dem Commit zurückzusetzen, den Sie löschen möchten. Wenn Sie beispielsweise die letzten drei Commit-Datensätze löschen möchten, können Sie Folgendes verwenden: 🎜rrreee🎜 Dadurch wird der aktuelle Zweig auf die ersten drei Commit-Datensätze zurückgesetzt und die letzten drei Commits im Verlauf werden gelöscht. 🎜🎜Verwenden Sie abschließend den Befehl git push -f, um den Push zum Remote-Repository zu erzwingen und den Verlauf zu überschreiben. Dies kann für andere beim Abrufen von Updates zu Problemen führen. Sie müssen daher sicherstellen, dass jeder mit den entsprechenden Berechtigungen davon weiß. 🎜rrreee🎜Wenn Sie den Verlauf mit dieser Methode löschen, empfehlen wir für alle Fälle, die Codebasis vor der Ausführung zu sichern. 🎜
    🎜Verwenden Sie BFG Repo-Cleaner🎜🎜🎜Ein weiteres leistungsstarkes Tool ist BFG Repo-Cleaner. Es handelt sich um ein Java-Programm, das lokal ausgeführt werden kann, um den Verlauf in einem Git-Repository zu löschen. 🎜🎜Installieren Sie zunächst BFG Repo-Cleaner. Sie können es mit Homebrew auf einem Mac installieren: 🎜rrreee🎜 Oder laden Sie es von der offiziellen Website herunter und installieren Sie es auf Ihrem Computer: 🎜rrreee🎜 Führen Sie dann den folgenden Befehl im Stammverzeichnis des Git-Repositorys aus (bitte stellen Sie sicher, dass Sie zurückkommen). Aktualisieren Sie die Codebasis vor dem Löschen): 🎜rrreee🎜 Wobei filename.txt.git der Name der Datei ist, die den zu löschenden Inhalt enthält (z. B. .git-credentials). >). Hier wird BFG Repo-Cleaner verwendet, um den Commit-Verlauf, Refs und Tags zu entfernen und das Repository anschließend erneut zu komprimieren. 🎜🎜Es ist zu beachten, dass BFG Repo-Cleaner alle Inhalte im Repository löschen kann, daher müssen Sie es mit Vorsicht bedienen. 🎜
      🎜Erstellen Sie ein neues Git-Repository🎜🎜🎜Die letzte Methode besteht darin, ein neues Git-Repository zu erstellen, das nur die Commit-Datensätze enthält, die Sie behalten möchten. Diese Methode erfordert einige manuelle Arbeit, bewahrt jedoch die Integrität des Repositorys und hat keinen Einfluss auf die Arbeit anderer Personen am Repository. 🎜🎜Erstellen Sie zunächst ein neues Verzeichnis im Stammverzeichnis des ursprünglichen Git-Repositorys, um das neue Git-Repository zu speichern: 🎜rrreee🎜Dann kopieren Sie die selektiven Commit-Datensätze des ursprünglichen Git-Repositorys in das neue Verzeichnis: 🎜rrreee🎜Das ist es Sie können den letzten Commit-Datensatz des ursprünglichen Git-Repositorys in das neue Git-Repository kopieren. Aktualisieren Sie die Remote-URL des neuen Repositorys und übertragen Sie sie per Push an das Remote-Repository. 🎜rrreee🎜Dadurch wird ein neues Git-Repository erstellt, das nur selektiv festgeschriebene Datensätze enthält. 🎜🎜Zusammenfassung🎜🎜In Git ist das Löschen des Verlaufs ein heikles Thema und muss mit Vorsicht behandelt werden. Verwenden Sie den Befehl git reset, um einige aktuelle Commit-Datensätze zu löschen. Verwenden Sie BFG Repo-Cleaner, um den Commit-Verlauf einer bestimmten Datei oder eines bestimmten Ordners zu löschen. Schließlich können Sie optional Commit-Datensätze beibehalten, indem Sie ein neues Git-Repository erstellen. In jedem Fall müssen Sie für alle Fälle Ihre Codebasis sichern, bevor Sie sie löschen. 🎜

Das obige ist der detaillierte Inhalt vonHelfen Sie beim Löschen von Verlaufsdatensätzen in Git. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

PHP-Tutorial
1517
276
Wie erstelle ich einen Merge-Commit, auch wenn ein Schnellvorlauf möglich ist? Wie erstelle ich einen Merge-Commit, auch wenn ein Schnellvorlauf möglich ist? Jul 21, 2025 am 02:22 AM

Verwenden Sie Gitmerge-No-FF, um Git zu zwingen, Merge-Commits zu erstellen, auch wenn Sie schnell vorwärts gehen können. 1. Verwenden Sie den Parameter-no-fF, um die Zweighistorie zu erhalten und die Quelle des Wandels zu klären. 2. Diese Methode ist besonders nützlich während der Codeüberprüfung oder -prüfung und wird häufig in strengen Zweigstrategien wie Gitflow verwendet. 3. Diese Operation kann automatisiert werden, indem Alias oder Skripte wie GitConfig-Globalalias.Merge-noff '! Gitmerge-no-FF' konfiguriert werden, wodurch der Prozess vereinfacht wird.

Wie entferne ich ein Submodul aus meinem Git -Repository? Wie entferne ich ein Submodul aus meinem Git -Repository? Jul 19, 2025 am 01:19 AM

TocleanlyRemoveAgitsubmodule, FirstDeinitializeItWithGitSubmoduledeinit-Fad/to/submodule, ThendeleteEtsFilesviardrf.git/modu les/path/to/submoduleandgitrm-fad/to/submodule, und endgültigRemoverelatedEntries von.git/configand.gitmodulesBeForecommitttt

Wie konfiguriere ich Git mit meinem Benutzernamen und meiner E -Mail -Adresse? Wie konfiguriere ich Git mit meinem Benutzernamen und meiner E -Mail -Adresse? Jul 23, 2025 am 02:57 AM

Die Methode zum Festlegen des Git-Benutzernamens und des Mailbox besteht darin, die Befehle von GitConfig-Globaluser.name und GitConfig-GlobalUser.Email zu verwenden, um die Identitätsinformationen global zu konfigurieren. Die spezifischen Schritte sind wie folgt: 1. Setzen Sie den Benutzernamen: Gitconfig-Globaluser.Name "Yourname" ausführen; 2. Konfigurieren Sie das Mailbox: Gitconfig-GloBaluser.Email "your.email@example.com"; 1. Überprüfen Sie die Einstellungen: Geben Sie GitConfiguser.name und Gitco über

Wie man einen gelöschten Zweig mit Git -Reflog wiederherstellt Wie man einen gelöschten Zweig mit Git -Reflog wiederherstellt Jul 25, 2025 am 12:46 AM

RUNGIREFLOG--date = localToviewRecentReferencechangesandlocatethededEletedbranchbyitsNameorCommithash.2.IdentifytheCommithaNtoBeforee "Deletedbranch" MessageinTheReFrogoutput.3.RecreatetheBanchuchusedgitchout-Bbranch-Namecommit-Hash-Hash oder

Wann sollte ich Git Merge vs. Git Rebase verwenden? Wann sollte ich Git Merge vs. Git Rebase verwenden? Jul 22, 2025 am 02:43 AM

UseGitMergetopreserveHistoryAndCollaboratesafely, insbesondere umfublicbrancheslikemaNorreveles

Wie kann ich ein bestimmtes Komitee zurücksetzen (erstellen Sie ein neues Commit, das die Änderungen rückgängig macht)? Wie kann ich ein bestimmtes Komitee zurücksetzen (erstellen Sie ein neues Commit, das die Änderungen rückgängig macht)? Jul 20, 2025 am 01:41 AM

Um ein Commit zu widerrufen, das in ein Repository gedrängt wurde, aber den Verlauf hält, verwenden Sie Gitervert, um ein neues Commit zu erstellen, um die Änderungen am angegebenen Komitee umzukehren. 1. Verwenden Sie Gitlog-Einstieg, um den Hash-Wert des Zielausschusses zu finden. 2. Ausführen von Gitrevert oder wie Gitreverthead ~ 2, um ein bestimmtes Commit zu widerrufen; 3. Wenn es einen Konflikt gibt, lösen Sie ihn manuell und fahren Sie mit Gitrevert fort-kontinuieren oder abbrechen; 4. Die Einreichungsinformationen können bearbeitet und bestätigt werden; 5. Für fusionierte Commits muss der Parameter -m1 hinzugefügt werden. Diese Methode ist für gemeinsame Zweige sicher und vermeidet Probleme, die durch die Umschreibung der Anamnese verursacht werden.

Große Monorepos mit Git verwalten Große Monorepos mit Git verwalten Jul 25, 2025 am 12:39 AM

USeShallowclonesandsparseChEckoutStoreduClonetimeAnddiskusByFetchingonlyN-DEWORTORYAndFiles.2.StructurethemonorepologicalByServiceOrteam, usecodeownerswuchswuchswuchs und KeepbuildsModularWitools-LikeBazelorturborepo.3.3.3.3.

So ändern Sie die vorherige Git -Commit -Nachricht So ändern Sie die vorherige Git -Commit -Nachricht Aug 01, 2025 am 03:34 AM

ToamendthemostrecentcommitMessage, usegitcommit-amend-m "yournewcommitMessage" ifthecommithas nichtbeenpushed;

See all articles