Einen schlechten Zug rückgängig machen

Lesezeit: 5 Minuten

Benutzer-Avatar
Michael Lorton

Zunächst einmal ist Git scheiße. Ich weiß, ich weiß, es soll das Beste seit geschnittenem Brot sein, aber es ist scheiße. Es ist, als würde man versuchen, sich mit einer Kettensäge zu rasieren: Ein kleiner Fehler, und überall sind Blut und Zähne. Vielleicht, wenn ich tatsächlich eine genaue Unterscheidung zwischen einem Kopf, einem Schiedsrichter, einem Commit, einem Zweig, einem Stamm, einem Gnargel und einem Whizpoo machen könnte, wäre einiges davon vielleicht etwas einfacher, aber für einen gewöhnlichen Sterblichen mit nur 10 Jahren Erfahrung mit SVN, Perforce und RCS sieht alles nach ziemlich verschrobener schwarzer Magie aus.

Jetzt aus irgendeinem Grund, git pull hat bei mir noch nie funktioniert. Ich erhalte eine 10-zeilige Fehlermeldung, die bisher ungefähr so ​​hilfreich war wie das Wort “Fehler”. Das Googeln der Fehlermeldung ergab eine Vielzahl von Vorschlägen, denen nur gemeinsam war, dass sie keinerlei offensichtliche Auswirkungen hatten. Aber das ist nicht das Problem von heute: Ich habe mich ans Tippen gewöhnt git pull origin branch.

Heute bin ich zwischen zwei Zweigen “Master” und “Lounge” hin und her geblättert und war im Moment im Master-Zweig. Ich wollte die neuesten Änderungen aus dem Remote-Repository in das lokale übertragen, habe mich aber vertippt. Anstatt zu schreiben git pull origin masterIch schrieb git pull origin lounge und dann, ohne nachzudenken, den richtigen Befehl eingetippt.

Es gibt keine Hinweise auf das erste (schlechte) Einzugsprotokoll, nur zwei Zusammenführungen vom Master:

commit 0c6be9569bab0581244ea8603bf2edfee82cdd7b
Merge: 43fdec5... db09f0d...
Author: Malvolio <[email protected]>
Date:   Wed Nov 24 20:38:58 2010 -0500

Merge branch 'master' of github.com:xcompanyx/xRepositoryX

commit db09f0d79d744d6a354142041b47ff5d748999f3
Merge: 81b6c3d... fc73e25...
Author: Malvolio <[email protected]>
Date:   Wed Nov 24 17:38:16 2010 -0800

Merge branch 'master' of github.com:xcompanyx/xRepositoryX

commit 81b6c3d04b7c464f8750a56282635526a5ef83a1
Author: Michael <[email protected]>
Date:   Wed Nov 24 17:38:07 2010 -0800
    the last commit I did

Aber Dateien, die neu im Lounge-Zweig erstellt wurden, befinden sich in meinem Repository.

Also bin ich jetzt fscked, oder? Soll ich einfach mein Repository abfackeln, die Fernbedienung erneut klonen, alle nicht gepushten Änderungen manuell erneut anwenden und es Git-Saugerei zuschreiben, oder gibt es eine Beschwörung, die ich rezitieren kann, die alles besser macht? Würde es helfen, wenn ich eine Ziege opfere?

  • @Robert – Aber dann würde ich nicht so ein nettes Lachen bekommen.

    – John Kugelmann

    25. November 2010 um 2:10 Uhr

  • Ich würde gerne versuchen, Ihnen zu helfen, aber Sie haben die Hälfte Ihres Posts damit verbracht, das SCM anzugreifen, von dem Sie fragen, wie es verwendet werden soll, und es versäumt, tatsächlich genügend Informationen bereitzustellen, um Ihre Frage zu beantworten. Willst du wirklich Hilfe oder nur schimpfen?

    – Kaskabel

    25. November 2010 um 3:54 Uhr

  • Ich sollte darauf hinweisen, dass 10 (oder sogar 20) Jahre Erfahrung mit zentralisiert VCS wie svn und p4 (Wir ignorieren rcs – Ich fühle mich wohltätig) helfen bei der Anwendung nicht wirklich git. Es ist ein anderes Paradigma und erfordert, dass Sie einen anderen Satz von Abstraktionen kennen.

    – Noufal Ibrahim

    25. November 2010 um 6:11 Uhr

  • Diese Frage und Antwort war tatsächlich hilfreich für mich. Schade, dass es geschlossen und nicht einfach bearbeitet wurde.

    – davenpcj

    23. Februar 2011 um 5:49 Uhr

  • Die Empfindlichkeit einiger Open-Source-Leute ist für mich immer eine Quelle (ziemlich gemeiner, ich gestehe) Belustigung. Sechs Personen schlossen eine Frage als „unbeantwortbar“ ab, die von mindestens neun Personen positiv bewertet wurde und auf die zwei Personen tatsächlich (fast identische und richtige) Antworten gaben!

    – Michael Lorton

    24. Februar 2011 um 3:00 Uhr

Verwenden git reflog um zu sehen, worauf dein KOPF gezeigt hat, bevor du es vermasselt hast.

Sie sollten so etwas sehen wie:

48ab8d [email protected]{0}: pull: Fast-forward
a34bda [email protected]{5}: commit: my last commit message

Richten Sie jetzt Ihren Master-Branch zurück auf das Commit vor dem schlechten Pull:

git reset --hard a34bda

Fertig. Als wäre es nie passiert.

  • Danke, ich muss das Reflog genauer untersuchen, aber ja, “Zurücksetzen” schien definitiv zu funktionieren. Ich bin immer noch neugierig, wie es im Protokoll aussieht, aber die Art und Weise, wie es auf der Festplatte aussieht, ist korrekt. Und @Piskvor: Ich habe es auch das erste Mal als Re-Flog gelesen. Was sagt das über uns aus?

    – Michael Lorton

    26. November 2010 um 22:37 Uhr


  • git reflog ist der Befehl, den Sie verwenden, wenn git hat dir die Seele aus dem Leib geprügelt und du hast dein Problem immer noch nicht gelöst. Gerade git reflog und genießen Sie eine weitere Woche, in der Sie von dem Tool, das Ihnen das Leben erleichtern soll, über den Kopf geschlagen werden. Es ist wirklich die einzig gute Nomenklatur im gesamten Befehlssatz dieser POS-Software. „Danke, Git! Darf ich noch einen Fehler haben!“

    – AJB

    28. August 2016 um 1:39 Uhr


Ich kann Ihren Verlauf aus Ihrer Frage nicht ganz verstehen, aber im Allgemeinen ist es ganz einfach, wenn Sie zwei Zusammenführungen vornehmen (ein Pull ist eine Zusammenführung), eine davon zu entfernen.

- o - o - o - A - M1 - M2 (master)
                 /    /
      - o - o - o    /   (origin/lounge)
                    /
             - o - o (origin/master)

Der offensichtlichste Weg:

 git checkout master
 git reset --hard A
 git merge origin/master

Dies verwendet Ihre lokal zwischengespeicherte Version des Ursprungsmasters, wenn Sie alles zusammenführen möchten, was gerade da draußen ist, verwenden Sie git pull origin master.

1283610cookie-checkEinen schlechten Zug rückgängig machen

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

Privacy policy