Kann ich das Reflog einer Remote-Referenz (nicht der Remote-Referenz) anzeigen?

Lesezeit: 4 Minuten

Benutzeravatar von Alexander Bird
Alexander Vogel

Ist es möglich, das Reflog einer Fernbedienung anzuzeigen? Das heißt, ich möchte wissen, was das Ergebnis ist git reflog befindet sich auf einem anderen Remote-Computer.

Beachten Sie, dass ich nicht um das Reflog von Remote-Tracking-Zweigen bitte (z. B origin/master); Ich frage nach was reflog sagt auf der anderen Maschine.

  • Wenn Sie Zugriff auf das Dateisystem des Remote-Systems haben (bei dem es sich häufig um bloße Repos handelt), haben Sie immer die Möglichkeit, dort git reflog auszuführen. Ein solcher Zugriff ist jedoch normalerweise nicht möglich. Ich habe die Angewohnheit, dies auf Git-Servern zu ermöglichen (mithilfe einer schreibgeschützten Dateifreigabe), nur um die Überprüfung des Reflogs auf der Serverseite zu ermöglichen.

    – Anders Zommarin

    30. Juli 2014 um 11:51

Benutzeravatar von Błażej Czapp
Błażej Czapp

Für den Fall, dass es sich bei der Remote-Maschine um ein Github-Repository handelt,

  1. Verwenden Sie zunächst die Events-API von Github, um den Commit-SHA abzurufen.
    curl https://api.github.com/repos/<user>/<repo>/events

  2. Identifizieren Sie die SHA der verwaisten Commit-ID das es in keiner Branche mehr gibt.

  3. Verwenden Sie als Nächstes die Refs-API von Github, um einen neuen Zweig zu erstellen, der auf den verwaisten Commit verweist.

    curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d '{"ref":"refs/heads/D-commit", "sha":"<orphan-commit-id>"}' https://api.github.com/repos/<user>/<repo>/git/refs

    Ersetzen <orphan-commit-id> im obigen Befehl mit dem in Schritt 2 identifizierten SHA.

  4. Endlich git fetch den neu erstellten Zweig in Ihr lokales Repository.
    Von dort aus können Sie die Commits auswählen oder wieder in Ihre Arbeit integrieren.

Kasse Dieser Artikel für ein tatsächliches Beispiel.

  • Vielen Dank! Für diejenigen, die weniger geneigt sind, die Befehlszeile zu verwenden, können Sie Schritt 3 auch umgehen, indem Sie sie einfach öffnen github.com///commits/…> und erstellen Sie daraus direkt im Dropdown-Menü „Baum:“ einen neuen Zweig. Dann holen Sie es einfach ganz normal ab.

    – waldyrious

    15. September 2016 um 7:45 Uhr

  • Wenn Sie eine bekommen "message": "Not Found" Fehler bedeutet, dass Sie sich authentifizieren müssen, indem Sie beispielsweise eine access_token-Abfragezeichenfolge übergeben.

    – Andy Hayden

    7. März 2017 um 6:39

  • Für mich der einfachste Weg, das aufzuspüren SHA der verwaisten Commit-ID war es, mir den letzten Build auf CircleCI (bzw [insert CI service here]).

    – Samjewell

    24. März 2017 um 13:57 Uhr

  • Hier finden Sie Anweisungen, wie Sie sich authentifizieren können.

    – mkasberg

    9. August 2018 um 15:42 Uhr

  • Um es klar zu sagen: Für zukünftige Leser möchten Sie hinzufügen -u <github username>:<github personal access token> zum Befehl in 3.

    – Daniel Porteous

    11. März 2022 um 3:46

Die Antwort lautet grundsätzlich „Nein“ (außer auf diesem Computer), da das Reflog ein Protokoll lokal vorgenommener Neuzuweisungen einiger Ref-Namen ist. Im Wesentlichen jedes Mal, wenn Sie laufen git update-ref -m msg <name> <target> das Update wird protokolliert … lokal: .git/logs/<name> bekommt eine Zeile angehängt:

$ git update-ref -m foo HEAD HEAD^
$ tail -1 .git/logs/HEAD
2418b6ba8fd0289933c9351260a272b8e410867f 8d945134b0cead535d66af29c8eb4228b5dc3763 [redacted] <[redacted]> 1334106483 -0600     foo

(in diesem Fall das Ding vor der Nachricht foo, ist kein Leerzeichen, sondern ein Tabulator; Ich habe es für SO-Zwecke erweitert. Konzeptionell wird alles andere, was eine Zweigspitze bewegt, aufgerufen git update-ref um es zu tun (einige sind Shell-Skripte und tun das im wahrsten Sinne des Wortes, andere rufen einfach den C-Code auf, der die gesamte Dateiaktualisierung durchführt) … und alles darin .git/logs bildet den Reflog.

Wenn es Dinge in den zugrunde liegenden Protokollen git:// und/oder ssh:// gäbe, die es Ihnen ermöglichen, auf das Reflog zuzugreifen, würde das funktionieren, aber soweit ich weiß, gibt es das nicht.

Auf GitHub, wenn Sie versehentlich a git push --force Wenn Sie zuvor auf dem Master die zusammengeführten Änderungen abgerufen haben und in der Zwischenzeit der zusammengeführte Zweig gelöscht wurde (ja, das ist mir passiert), können Sie nach der zusammengeführten Pull-Anfrage suchen und zu gehen Commits Abschnitt, z. B.:

Geben Sie hier eine Bildbeschreibung ein

Dann gehst du zum letzten Commit und klickst auf <> Schaltfläche (mit dem Titel „Das Repository an dieser Stelle im Verlauf durchsuchen“).

Dadurch gelangen Sie zum „gelöschten“ Punkt im Verlauf. Von hier aus können Sie:

  • Erstellen Sie einen neuen Zweig und öffnen Sie dann einen neuen Pull-Request (empfohlen, wenn die Änderung aus einem anderen Repository stammt).
  • Öffnen Sie eine neue Pull-Anfrage (empfohlen für Commits in Ihrem Repository).

  • Eine andere Lösung ist die Verwendung git push --force-with-lease Thoughtbot.com/blog/git-push-force-with-lease

    – Othmane El Kesri

    15. Okt. 2019 um 16:23

  • Für Gitlab-Benutzer: Sie können die Commit-SHA-ID des letzten Commits vor dem Rebase kopieren, zur Projektseite gehen, auf das „+“-Symbol neben dem Repo-Namen klicken, auf „Neuer Zweig“ klicken und die letzte Commit-ID einfügen . Sie können diesen neuen Zweig jetzt lokal auschecken oder einen MR erstellen.

    – Letik

    1. März 2022 um 17:01 Uhr

Mit diesem Befehl können Sie Remote-Relogs anzeigen:

git reflog refs/remotes/<remote name>/<branch name>

Wenn Ihre Fernbedienung also „Origin“ heißt und Ihr Zweig „Turtles“ lautet:

git reflog refs/remotes/origin/turtles

1450590cookie-checkKann ich das Reflog einer Remote-Referenz (nicht der Remote-Referenz) anzeigen?

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

Privacy policy