Commit aus Verlauf entfernen

Lesezeit: 5 Minuten

Benutzeravatar von Serban Stoenescu
Serban Stoenescu

Ich habe ein Fluchwort in meinen Code eingegeben und den Code auf den Master-Zweig geschoben. Ich habe danach noch ein paar Mal gepusht, damit die Leute nicht die schlechten Sachen ziehen, aber ich kann das Fluchwort immer noch in der Commit-Historie finden.

Ich möchte die Datei nicht hinzufügen .gitignore weil wir diese Datei brauchen.

Gibt es eine Möglichkeit, den Commit aus dem Verlauf zu löschen?

  • Hier ist also ein wichtiger Vorschlag: Überprüfen Sie Ihre Commits immer einzeln, bevor Sie sie pushen. STETS.

    – ckruczek

    17. Juni 2015 um 13:40 Uhr


  • mögliches Duplikat von Remove sensitive files and their Commits from Git history

    – Andreas C

    17. Juni 2015 um 15:13 Uhr

  • Es ist so lustig, weil es mir tatsächlich auch passiert ist, aber ich habe es erst bemerkt, als es zu spät war und zwei Wochen nach dem Commit kam der Teamleiter zu mir und setzte sich zu mir, um mit mir zu reden. xD

    – Arielle

    29. Dezember 2019 um 18:54 Uhr

  • Finden Sie die Schritte in dieser Antwort.

    – Klar

    3. November 2022 um 13:35 Uhr

Benutzeravatar von David Deutsch
David Deutsch

Sobald Sie auf das Repo pushen, möchten Sie wirklich nicht mehr den Verlauf ändern. Allerdings, wenn Sie absolut sind sicher dass niemand seit Ihrem anstößigen Commit aus dem Repo gezogen/abgeholt hat, haben Sie zwei Möglichkeiten.

Wenn Sie den “schlechten” Commit vollständig entfernen möchten (und jeden Commit, der danach kam), tun Sie a git reset --hard ABC (vorausgesetzt ABC ist der Hash des älteren Geschwisters des „schlechten“ Commits – dasjenige, das Sie als neues Haupt-Commit dieses Zweigs sehen möchten). Dann mach a git push --force (oder git push -f).

Wenn Sie diesen Commit nur bearbeiten und die nachfolgenden Commits beibehalten möchten, tun Sie a git rebase -i ABC~. Dadurch wird Ihr Editor gestartet, der die Liste Ihrer Commits anzeigt, beginnend mit dem fehlerhaften. Ändern Sie das Flag von “pick” auf “e”, speichern Sie die Datei und schließen Sie den Editor. Nehmen Sie dann die erforderlichen Änderungen an den Dateien vor und führen Sie a git commit -a --amenddann mach git rebase --continue. Folgen Sie dem Ganzen mit a git push -f.

Ich möchte wiederholen, diese Optionen stehen Ihnen nur zur Verfügung, wenn niemand einen Pull oder Fetch durchgeführt hat, der Ihren anstößigen Commit enthält. Wenn dies der Fall ist, wird die Durchführung dieser Schritte die Sache nur noch schlimmer machen.

  • Ich habe gerade versehentlich meine private E-Mail in einem neu erstellten Repository offengelegt. Puh, das hat meine Nerven gerettet, danke.

    – Liebster Kamerad

    11. Mai 2020 um 12:38 Uhr


  • wenn git rebase --continue oder git push -f gibt Ihnen einen Fehler; check: stackoverflow.com/questions/30471557/… Auch hilfreich: clock.co.uk/insight/deleting-a-git-commit

    – Sagar Patel

    5. Juni 2020 um 1:21 Uhr


Benutzeravatar von Maciej Oziębły
Maciej Oziębły

Wenn es nur auf Ihrem lokalen PC ist (oder niemand Ihre Änderungen ausgecheckt hat):

  1. Verwenden:
    git log
    

um den Commit zu finden, den Sie entfernen möchten. Kopieren Sie den Hash (die lange Zeichenfolge wie: e8348ebe553102018c …).

  1. Verwenden:
    git rebase -i [hash]~
    
    : for example
    git rebase -i e8348~
    

Entfernen Sie einfach den Commit, den Sie nicht benötigen, und speichern Sie die Datei.

Mit dem interaktiven Git-Rebase können Sie auch den fehlerhaften Commit reparieren – es besteht keine Notwendigkeit, ihn zu entfernen.

Wenn Sie Änderungen auf den Server übertragen haben oder jemand Ihre Änderungen bereits erhalten hat – ändern Sie niemals den Verlauf -, würde dies Ihrem Team ernsthafte Probleme bereiten.

  • Können Sie erläutern, welches schwerwiegende Problem dies verursachen würde? Wird es garantiert passieren?

    – Steven Zhou

    12. März 2020 um 19:07 Uhr

  • Sorry, aber “nie” ist nicht wahr. Unsere große Organisation muss filter-branch verwenden, um ein aufgeblähtes Repo zu trimmen.

    – Sridhar Sarnobat

    23. Juni 2020 um 5:38 Uhr

  • Force Pushing auf einen gemeinsam genutzten Branch könnte jemand anderem seine Arbeit entfernen. Selbst wenn dies nicht der Fall wäre, wenn jemand davon abzweigen würde, müsste er sich mit den mehreren Versionen der Historie befassen, sicher sein, die richtige auszuwählen, und darauf achten, nicht beide Kopien zu integrieren. Ich denke nicht, dass es eine so große Sünde ist, wie viele Leute zu denken scheinen, aber wenn Sie Gewalt anwenden, stellen Sie sicher, dass es ein kurzlebiger Zweig ist, an den nur Sie schreiben, und stellen Sie sicher, dass die Leute wahrscheinlich nicht die alte Geschichte überprüft haben oder wissen, wie man damit umgeht mit diesem.

    – Fiktiv

    30. Dezember 2020 um 13:11 Uhr


  • Ich möchte eine Korrektur an der Antwort vornehmen. Anstatt den zu entfernenden Hash zu kopieren, sollten Sie den einen Schritt übergeordneten Hash des zu entfernenden Hash kopieren, erst dann können Sie den zu entfernenden Hash löschen.

    – Vijender Kumar

    22. Februar 2021 um 10:21 Uhr

  • Wenn Sie TortoiseGit verwenden, sind die Antworten hier hilfreich: stackoverflow.com/questions/12528854/…

    – Venryx

    17. August 2021 um 13:55 Uhr

Benutzeravatar von NutCracker
Nussknacker

Das funktioniert bei mir:

  1. git log um den Commit zu finden, den Sie entfernen möchten, und kopieren Sie seinen Hash
  2. git rebase -i <commit_hash>~ was Ihren Texteditor öffnet
  3. Wechseln Sie im Texteditor von pick zu drop für Ihr besonderes Engagement

  • Die Verwendung von explizitem Drop ist etwas sicherer als nur das Löschen der Zeile … Dies ist besser als die akzeptierte Antwort. stackoverflow.com/questions/35846154/…

    – Ray Foss

    31. März 2020 um 17:57 Uhr


  • Dies scheint nur für lokale Commits ohne Push richtig zu sein.

    –Timo

    12. August 2020 um 18:02 Uhr

  • Dies funktioniert gut für einen Push, wenn niemand den anstößigen Commit lokal gezogen hat

    – Alex

    17. September 2020 um 18:36 Uhr

  • @Timo In Bezug auf die Befehlsausführung ist diese Lösung auch dann richtig, wenn die lokalen Commits gepusht wurden, für die der Push erzwungen werden muss (push -f). Es besteht jedoch die Möglichkeit, dass der Arbeitsablauf des Teams von diesen Aktionen abrät, da dies dem Team Probleme bereiten kann.

    – thanos.a

    3. Juni 2022 um 7:47 Uhr

  • Ich musste einen Commit-Hash vor dem Commit ausführen, den ich löschen wollte, um den Commit im vim-Editor anzeigen zu können.

    – apinanyogaratnam

    4. Juli 2022 um 23:47 Uhr

Benutzeravatar von Ali Miskeen
Ali Miskeen

Ich habe kürzlich mit einem Team gearbeitet und herausgefunden, dass git eine Lösung dafür hat

alles unter diesem Link

https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/removing-sensitive-data-from-a-repository

was verwendet git-filter-repo und BFG Repo-Cleaner

Hier ist ein cooles Video genau dafür

https://www.youtube.com/watch?v=z8tIOYg_oho

1441050cookie-checkCommit aus Verlauf entfernen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy